RE: [PATCH] netfs: Fix missing xas_retry() calls in xarray iteration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Anthony Brennan
> Sent: 22 December 2023 00:15
> 
> commit 59d0d52c30d4991ac4b329f049cc37118e00f5b0 upstream
> 
> Stops kernel from crashing when encountering an XAS retry entry. Patch modified
> from upstream to work with pages instead of folios, and omits fixes to "dodgy
> maths" as unrelated to fixing the crash.
> 
> Signed-off-by: Anthony Brennan <a2brenna@xxxxxxxxx>
> ---
>  fs/netfs/read_helper.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/fs/netfs/read_helper.c b/fs/netfs/read_helper.c
> index 242f8bcb34a4..4de15555bceb 100644
> --- a/fs/netfs/read_helper.c
> +++ b/fs/netfs/read_helper.c
> @@ -248,6 +248,9 @@ static void netfs_rreq_unmark_after_write(struct netfs_read_request *rreq,
>  		XA_STATE(xas, &rreq->mapping->i_pages, subreq->start / PAGE_SIZE);
> 
>  		xas_for_each(&xas, page, (subreq->start + subreq->len - 1) / PAGE_SIZE) {
> +			if(xas_retry(&xas, page))

'if' is not a function.

> +				continue;
> +
>  			/* We might have multiple writes from the same huge
>  			 * page, but we mustn't unlock a page more than once.
>  			 */
> @@ -403,6 +406,9 @@ static void netfs_rreq_unlock(struct netfs_read_request *rreq)
>  		unsigned int pgend = pgpos + thp_size(page);
>  		bool pg_failed = false;
> 
> +		if(xas_retry(&xas, page))
> +			continue;
> +
>  		for (;;) {
>  			if (!subreq) {
>  				pg_failed = true;
> --
> 2.30.2

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)






[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux