@@ -78,15 +78,16 @@ static int netfs_begin_cache_read(struct netfs_io_request *rreq, struct netfs_in
78
78
* [!] NOTE: This must be run in the same thread as ->issue_read() was called
79
79
* in as we access the readahead_control struct.
80
80
*/
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 )
82
83
{
83
84
struct netfs_io_request * rreq = subreq -> rreq ;
84
85
size_t rsize = subreq -> len ;
85
86
86
87
if (subreq -> source == NETFS_DOWNLOAD_FROM_SERVER )
87
88
rsize = umin (rsize , rreq -> io_streams [0 ].sreq_max_len );
88
89
89
- if (rreq -> ractl ) {
90
+ if (ractl ) {
90
91
/* If we don't have sufficient folios in the rolling buffer,
91
92
* extract a folioq's worth from the readahead region at a time
92
93
* 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)
99
100
while (rreq -> submitted < subreq -> start + rsize ) {
100
101
ssize_t added ;
101
102
102
- added = rolling_buffer_load_from_ra (& rreq -> buffer , rreq -> ractl ,
103
+ added = rolling_buffer_load_from_ra (& rreq -> buffer , ractl ,
103
104
& put_batch );
104
105
if (added < 0 )
105
106
return added ;
@@ -211,7 +212,8 @@ static void netfs_issue_read(struct netfs_io_request *rreq,
211
212
* slicing up the region to be read according to available cache blocks and
212
213
* network rsize.
213
214
*/
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 )
215
217
{
216
218
struct netfs_inode * ictx = netfs_inode (rreq -> inode );
217
219
unsigned long long start = rreq -> start ;
@@ -291,7 +293,7 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
291
293
break ;
292
294
293
295
issue :
294
- slice = netfs_prepare_read_iterator (subreq );
296
+ slice = netfs_prepare_read_iterator (subreq , ractl );
295
297
if (slice < 0 ) {
296
298
ret = slice ;
297
299
subreq -> error = ret ;
@@ -359,11 +361,10 @@ void netfs_readahead(struct readahead_control *ractl)
359
361
360
362
netfs_rreq_expand (rreq , ractl );
361
363
362
- rreq -> ractl = ractl ;
363
364
rreq -> submitted = rreq -> start ;
364
365
if (rolling_buffer_init (& rreq -> buffer , rreq -> debug_id , ITER_DEST ) < 0 )
365
366
goto cleanup_free ;
366
- netfs_read_to_pagecache (rreq );
367
+ netfs_read_to_pagecache (rreq , ractl );
367
368
368
369
netfs_put_request (rreq , true, netfs_rreq_trace_put_return );
369
370
return ;
@@ -389,7 +390,6 @@ static int netfs_create_singular_buffer(struct netfs_io_request *rreq, struct fo
389
390
if (added < 0 )
390
391
return added ;
391
392
rreq -> submitted = rreq -> start + added ;
392
- rreq -> ractl = (struct readahead_control * )1UL ;
393
393
return 0 ;
394
394
}
395
395
@@ -459,7 +459,7 @@ static int netfs_read_gaps(struct file *file, struct folio *folio)
459
459
iov_iter_bvec (& rreq -> buffer .iter , ITER_DEST , bvec , i , rreq -> len );
460
460
rreq -> submitted = rreq -> start + flen ;
461
461
462
- netfs_read_to_pagecache (rreq );
462
+ netfs_read_to_pagecache (rreq , NULL );
463
463
464
464
if (sink )
465
465
folio_put (sink );
@@ -528,7 +528,7 @@ int netfs_read_folio(struct file *file, struct folio *folio)
528
528
if (ret < 0 )
529
529
goto discard ;
530
530
531
- netfs_read_to_pagecache (rreq );
531
+ netfs_read_to_pagecache (rreq , NULL );
532
532
ret = netfs_wait_for_read (rreq );
533
533
netfs_put_request (rreq , false, netfs_rreq_trace_put_return );
534
534
return ret < 0 ? ret : 0 ;
@@ -685,7 +685,7 @@ int netfs_write_begin(struct netfs_inode *ctx,
685
685
if (ret < 0 )
686
686
goto error_put ;
687
687
688
- netfs_read_to_pagecache (rreq );
688
+ netfs_read_to_pagecache (rreq , NULL );
689
689
ret = netfs_wait_for_read (rreq );
690
690
if (ret < 0 )
691
691
goto error ;
@@ -750,7 +750,7 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,
750
750
if (ret < 0 )
751
751
goto error_put ;
752
752
753
- netfs_read_to_pagecache (rreq );
753
+ netfs_read_to_pagecache (rreq , NULL );
754
754
ret = netfs_wait_for_read (rreq );
755
755
netfs_put_request (rreq , false, netfs_rreq_trace_put_return );
756
756
return ret < 0 ? ret : 0 ;
0 commit comments