@@ -275,22 +275,14 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
275
275
netfs_stat (& netfs_n_rh_download );
276
276
if (rreq -> netfs_ops -> prepare_read ) {
277
277
ret = rreq -> netfs_ops -> prepare_read (subreq );
278
- if (ret < 0 ) {
279
- atomic_dec (& rreq -> nr_outstanding );
280
- netfs_put_subrequest (subreq , false,
281
- netfs_sreq_trace_put_cancel );
282
- break ;
283
- }
278
+ if (ret < 0 )
279
+ goto prep_failed ;
284
280
trace_netfs_sreq (subreq , netfs_sreq_trace_prepare );
285
281
}
286
282
287
283
slice = netfs_prepare_read_iterator (subreq );
288
- if (slice < 0 ) {
289
- atomic_dec (& rreq -> nr_outstanding );
290
- netfs_put_subrequest (subreq , false, netfs_sreq_trace_put_cancel );
291
- ret = slice ;
292
- break ;
293
- }
284
+ if (slice < 0 )
285
+ goto prep_iter_failed ;
294
286
295
287
rreq -> netfs_ops -> issue_read (subreq );
296
288
goto done ;
@@ -302,6 +294,8 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
302
294
trace_netfs_sreq (subreq , netfs_sreq_trace_submit );
303
295
netfs_stat (& netfs_n_rh_zero );
304
296
slice = netfs_prepare_read_iterator (subreq );
297
+ if (slice < 0 )
298
+ goto prep_iter_failed ;
305
299
__set_bit (NETFS_SREQ_CLEAR_TAIL , & subreq -> flags );
306
300
netfs_read_subreq_terminated (subreq , 0 , false);
307
301
goto done ;
@@ -310,6 +304,8 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
310
304
if (source == NETFS_READ_FROM_CACHE ) {
311
305
trace_netfs_sreq (subreq , netfs_sreq_trace_submit );
312
306
slice = netfs_prepare_read_iterator (subreq );
307
+ if (slice < 0 )
308
+ goto prep_iter_failed ;
313
309
netfs_read_cache_to_pagecache (rreq , subreq );
314
310
goto done ;
315
311
}
@@ -318,6 +314,14 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
318
314
WARN_ON_ONCE (1 );
319
315
break ;
320
316
317
+ prep_iter_failed :
318
+ ret = slice ;
319
+ prep_failed :
320
+ subreq -> error = ret ;
321
+ atomic_dec (& rreq -> nr_outstanding );
322
+ netfs_put_subrequest (subreq , false, netfs_sreq_trace_put_cancel );
323
+ break ;
324
+
321
325
done :
322
326
size -= slice ;
323
327
start += slice ;
0 commit comments