Skip to content

Commit 7e57523

Browse files
dhowellsbrauner
authored andcommitted
netfs: Fix read abandonment during retry
Under certain circumstances, all the remaining subrequests from a read request will get abandoned during retry. The abandonment process expects the 'subreq' variable to be set to the place to start abandonment from, but it doesn't always have a useful value (it will be uninitialised on the first pass through the loop and it may point to a deleted subrequest on later passes). Fix the first jump to "abandon:" to set subreq to the start of the first subrequest expected to need retry (which, in this abandonment case, turned out unexpectedly to no longer have NEED_RETRY set). Also clear the subreq pointer after discarding superfluous retryable subrequests to cause an oops if we do try to access it. Fixes: ee4cdf7 ("netfs: Speed up buffered reading") Signed-off-by: David Howells <[email protected]> Link: https://patch.msgid.link/[email protected] Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]> cc: Paulo Alcantara <[email protected]> cc: [email protected] cc: [email protected] Signed-off-by: Christian Brauner <[email protected]>
1 parent 8fb6857 commit 7e57523

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

fs/netfs/read_retry.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ static void netfs_retry_read_subrequests(struct netfs_io_request *rreq)
9393
from->start, from->transferred, from->len);
9494

9595
if (test_bit(NETFS_SREQ_FAILED, &from->flags) ||
96-
!test_bit(NETFS_SREQ_NEED_RETRY, &from->flags))
96+
!test_bit(NETFS_SREQ_NEED_RETRY, &from->flags)) {
97+
subreq = from;
9798
goto abandon;
99+
}
98100

99101
list_for_each_continue(next, &stream->subrequests) {
100102
subreq = list_entry(next, struct netfs_io_subrequest, rreq_link);
@@ -178,6 +180,7 @@ static void netfs_retry_read_subrequests(struct netfs_io_request *rreq)
178180
if (subreq == to)
179181
break;
180182
}
183+
subreq = NULL;
181184
continue;
182185
}
183186

0 commit comments

Comments
 (0)