@@ -254,6 +254,7 @@ static void netfs_collect_write_results(struct netfs_io_request *wreq)
254254 if (front -> start + front -> transferred > stream -> collected_to ) {
255255 stream -> collected_to = front -> start + front -> transferred ;
256256 stream -> transferred = stream -> collected_to - wreq -> start ;
257+ stream -> transferred_valid = true;
257258 notes |= MADE_PROGRESS ;
258259 }
259260 if (test_bit (NETFS_SREQ_FAILED , & front -> flags )) {
@@ -356,6 +357,7 @@ bool netfs_write_collection(struct netfs_io_request *wreq)
356357{
357358 struct netfs_inode * ictx = netfs_inode (wreq -> inode );
358359 size_t transferred ;
360+ bool transferred_valid = false;
359361 int s ;
360362
361363 _enter ("R=%x" , wreq -> debug_id );
@@ -376,12 +378,16 @@ bool netfs_write_collection(struct netfs_io_request *wreq)
376378 continue ;
377379 if (!list_empty (& stream -> subrequests ))
378380 return false;
379- if (stream -> transferred < transferred )
381+ if (stream -> transferred_valid &&
382+ stream -> transferred < transferred ) {
380383 transferred = stream -> transferred ;
384+ transferred_valid = true;
385+ }
381386 }
382387
383388 /* Okay, declare that all I/O is complete. */
384- wreq -> transferred = transferred ;
389+ if (transferred_valid )
390+ wreq -> transferred = transferred ;
385391 trace_netfs_rreq (wreq , netfs_rreq_trace_write_done );
386392
387393 if (wreq -> io_streams [1 ].active &&
0 commit comments