Lines Matching defs:subreq
103 * netfs_prepare_read_iterator - Prepare the subreq iterator for I/O
104 * @subreq: The subrequest to be set up
114 static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq)
116 struct netfs_io_request *rreq = subreq->rreq;
117 size_t rsize = subreq->len;
119 if (subreq->source == NETFS_DOWNLOAD_FROM_SERVER)
122 subreq->len = rsize;
128 subreq->len = limit;
129 trace_netfs_sreq(subreq, netfs_sreq_trace_limited);
133 subreq->io_iter = rreq->buffer.iter;
135 iov_iter_truncate(&subreq->io_iter, subreq->len);
136 rolling_buffer_advance(&rreq->buffer, subreq->len);
137 return subreq->len;
141 struct netfs_io_subrequest *subreq,
149 source = cres->ops->prepare_read(subreq, i_size);
150 trace_netfs_sreq(subreq, netfs_sreq_trace_prepare);
157 * - Eats the caller's ref on subreq.
160 struct netfs_io_subrequest *subreq)
165 cres->ops->read(cres, subreq->start, &subreq->io_iter, NETFS_READ_HOLE_IGNORE,
166 netfs_cache_read_terminated, subreq);
170 struct netfs_io_subrequest *subreq)
174 __set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
181 /* Write IN_PROGRESS before pointer to new subreq */
182 list_add_tail_release(&subreq->rreq_link, &stream->subrequests);
183 if (list_is_first(&subreq->rreq_link, &stream->subrequests)) {
185 stream->collected_to = subreq->start;
195 struct netfs_io_subrequest *subreq)
197 switch (subreq->source) {
199 rreq->netfs_ops->issue_read(subreq);
202 netfs_read_cache_to_pagecache(rreq, subreq);
205 __set_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags);
206 subreq->error = 0;
207 iov_iter_zero(subreq->len, &subreq->io_iter);
208 subreq->transferred = subreq->len;
209 netfs_read_subreq_terminated(subreq);
239 /* Determine how much the subreq overlaps the folio, if at all. */
278 struct netfs_io_subrequest *subreq;
282 subreq = netfs_alloc_subrequest(rreq);
283 if (!subreq) {
288 subreq->start = start;
289 subreq->len = size;
291 netfs_queue_read(rreq, subreq);
293 source = netfs_cache_prepare_read(rreq, subreq, rreq->i_size);
294 subreq->source = source;
298 size_t len = subreq->len;
302 if (subreq->start >= zp) {
303 subreq->source = source = NETFS_FILL_WITH_ZEROES;
307 if (len > zp - subreq->start)
308 len = zp - subreq->start;
311 rreq->debug_id, subreq->debug_index,
312 subreq->len, size,
313 subreq->start, zero_point, rreq->i_size);
314 netfs_cancel_read(subreq, ret);
317 subreq->len = len;
321 ret = rreq->netfs_ops->prepare_read(subreq);
323 netfs_cancel_read(subreq, ret);
326 trace_netfs_sreq(subreq, netfs_sreq_trace_prepare);
333 subreq->source = NETFS_FILL_WITH_ZEROES;
334 trace_netfs_sreq(subreq, netfs_sreq_trace_submit);
340 trace_netfs_sreq(subreq, netfs_sreq_trace_submit);
346 netfs_cancel_read(subreq, ret);
350 slice = netfs_prepare_read_iterator(subreq);
353 netfs_cancel_read(subreq, ret);
365 bool copy = test_bit(NETFS_SREQ_COPY_TO_CACHE, &subreq->flags);
370 netfs_issue_read(rreq, subreq);