@@ -78,15 +78,16 @@ static int netfs_begin_cache_read(struct netfs_io_request *rreq, struct netfs_in
7878 * [!] NOTE: This must be run in the same thread as ->issue_read() was called
7979 * in as we access the readahead_control struct.
8080 */
81- static ssize_t netfs_prepare_read_iterator (struct netfs_io_subrequest * subreq )
81+ static ssize_t netfs_prepare_read_iterator (struct netfs_io_subrequest * subreq ,
82+ struct readahead_control * ractl )
8283{
8384 struct netfs_io_request * rreq = subreq -> rreq ;
8485 size_t rsize = subreq -> len ;
8586
8687 if (subreq -> source == NETFS_DOWNLOAD_FROM_SERVER )
8788 rsize = umin (rsize , rreq -> io_streams [0 ].sreq_max_len );
8889
89- if (rreq -> ractl ) {
90+ if (ractl ) {
9091 /* If we don't have sufficient folios in the rolling buffer,
9192 * extract a folioq's worth from the readahead region at a time
9293 * into the buffer. Note that this acquires a ref on each page
@@ -99,7 +100,7 @@ static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq)
99100 while (rreq -> submitted < subreq -> start + rsize ) {
100101 ssize_t added ;
101102
102- added = rolling_buffer_load_from_ra (& rreq -> buffer , rreq -> ractl ,
103+ added = rolling_buffer_load_from_ra (& rreq -> buffer , ractl ,
103104 & put_batch );
104105 if (added < 0 )
105106 return added ;
@@ -211,7 +212,8 @@ static void netfs_issue_read(struct netfs_io_request *rreq,
211212 * slicing up the region to be read according to available cache blocks and
212213 * network rsize.
213214 */
214- static void netfs_read_to_pagecache (struct netfs_io_request * rreq )
215+ static void netfs_read_to_pagecache (struct netfs_io_request * rreq ,
216+ struct readahead_control * ractl )
215217{
216218 struct netfs_inode * ictx = netfs_inode (rreq -> inode );
217219 unsigned long long start = rreq -> start ;
@@ -291,7 +293,7 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
291293 break ;
292294
293295 issue :
294- slice = netfs_prepare_read_iterator (subreq );
296+ slice = netfs_prepare_read_iterator (subreq , ractl );
295297 if (slice < 0 ) {
296298 ret = slice ;
297299 subreq -> error = ret ;
@@ -359,11 +361,10 @@ void netfs_readahead(struct readahead_control *ractl)
359361
360362 netfs_rreq_expand (rreq , ractl );
361363
362- rreq -> ractl = ractl ;
363364 rreq -> submitted = rreq -> start ;
364365 if (rolling_buffer_init (& rreq -> buffer , rreq -> debug_id , ITER_DEST ) < 0 )
365366 goto cleanup_free ;
366- netfs_read_to_pagecache (rreq );
367+ netfs_read_to_pagecache (rreq , ractl );
367368
368369 netfs_put_request (rreq , true, netfs_rreq_trace_put_return );
369370 return ;
@@ -389,7 +390,6 @@ static int netfs_create_singular_buffer(struct netfs_io_request *rreq, struct fo
389390 if (added < 0 )
390391 return added ;
391392 rreq -> submitted = rreq -> start + added ;
392- rreq -> ractl = (struct readahead_control * )1UL ;
393393 return 0 ;
394394}
395395
@@ -459,7 +459,7 @@ static int netfs_read_gaps(struct file *file, struct folio *folio)
459459 iov_iter_bvec (& rreq -> buffer .iter , ITER_DEST , bvec , i , rreq -> len );
460460 rreq -> submitted = rreq -> start + flen ;
461461
462- netfs_read_to_pagecache (rreq );
462+ netfs_read_to_pagecache (rreq , NULL );
463463
464464 if (sink )
465465 folio_put (sink );
@@ -528,7 +528,7 @@ int netfs_read_folio(struct file *file, struct folio *folio)
528528 if (ret < 0 )
529529 goto discard ;
530530
531- netfs_read_to_pagecache (rreq );
531+ netfs_read_to_pagecache (rreq , NULL );
532532 ret = netfs_wait_for_read (rreq );
533533 netfs_put_request (rreq , false, netfs_rreq_trace_put_return );
534534 return ret < 0 ? ret : 0 ;
@@ -685,7 +685,7 @@ int netfs_write_begin(struct netfs_inode *ctx,
685685 if (ret < 0 )
686686 goto error_put ;
687687
688- netfs_read_to_pagecache (rreq );
688+ netfs_read_to_pagecache (rreq , NULL );
689689 ret = netfs_wait_for_read (rreq );
690690 if (ret < 0 )
691691 goto error ;
@@ -750,7 +750,7 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,
750750 if (ret < 0 )
751751 goto error_put ;
752752
753- netfs_read_to_pagecache (rreq );
753+ netfs_read_to_pagecache (rreq , NULL );
754754 ret = netfs_wait_for_read (rreq );
755755 netfs_put_request (rreq , false, netfs_rreq_trace_put_return );
756756 return ret < 0 ? ret : 0 ;
0 commit comments