FAILED: patch "[PATCH] NFSv4/pnfs: Fix a page lock leak in nfs_pageio_resend()" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f4340e9314dbfadc48758945f85fc3b16612d06f Mon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Mon, 12 Aug 2019 15:19:54 -0400
Subject: [PATCH] NFSv4/pnfs: Fix a page lock leak in nfs_pageio_resend()
If the attempt to resend the pages fails, we need to ensure that we clean up those pages that were not transmitted.
Fixes d600ad1f2bdb ("NFS41: pop some layoutget errors to application")
Signed-off-by Trond Myklebust <[email protected]>
Cc [email protected] # v4.5+
fs/nfs/pagelist.c +9 -7
@@ -1251,20 +1251,22 @@ static void nfs_pageio_complete_mirror(struct nfs_pageio_descriptor *desc,int nfs_pageio_resend (struct nfs_pageio_descriptor *desc,struct nfs_pgio_header *hdr) { -LIST_HEAD (failed); +LIST_HEAD (pages); desc->pg_io_completion = hdr->io_completion; desc->pg_dreq = hdr->dreq; -while (!list_empty (&hdr->pages)) { -struct nfs_page *req =nfs_list_entry (hdr->pages.next); +list_splice_init (&hdr->pages, &pages); +while (!list_empty (&pages)) { +struct nfs_page *req =nfs_list_entry (pages.next);if (!nfs_pageio_add_request (desc, req)) -nfs_list_move_request (req, &failed); +break ; }nfs_pageio_complete (desc); -if (!list_empty (&failed)) { -list_move (&failed, &hdr->pages); -return desc->pg_error <0 ? desc->pg_error : -EIO ; +if (!list_empty (&pages)) { +int err = desc->pg_error <0 ? desc->pg_error : -EIO ; + hdr->completion_ops->error_cleanup (&pages, err); +return err; }return 0 ; }