NeilBrown 1e4725
From: Trond Myklebust <trond.myklebust@hammerspace.com>
NeilBrown 1e4725
Date: Thu, 21 Jan 2021 16:34:37 -0500
NeilBrown 1e4725
Subject: [PATCH] pNFS/NFSv4: Fix a layout segment leak in
NeilBrown 1e4725
 pnfs_layout_process()
NeilBrown 1e4725
Git-commit: 814b84971388cd5fb182f2e914265b3827758455
Michal Kubecek 08c81d
Patch-mainline: v5.11-rc6
NeilBrown 1e4725
References: git-fixes
NeilBrown 1e4725
NeilBrown 1e4725
If the server returns a new stateid that does not match the one in our
NeilBrown 1e4725
cache, then pnfs_layout_process() will leak the layout segments returned
NeilBrown 1e4725
by pnfs_mark_layout_stateid_invalid().
NeilBrown 1e4725
NeilBrown 1e4725
Fixes: 9888d837f3cf ("pNFS: Force a retry of LAYOUTGET if the stateid doesn't match our cache")
NeilBrown 1e4725
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
NeilBrown 1e4725
Acked-by: NeilBrown <neilb@suse.com>
NeilBrown 1e4725
NeilBrown 1e4725
---
NeilBrown 1e4725
 fs/nfs/pnfs.c |    1 +
NeilBrown 1e4725
 1 file changed, 1 insertion(+)
NeilBrown 1e4725
NeilBrown 1e4725
--- a/fs/nfs/pnfs.c
NeilBrown 1e4725
+++ b/fs/nfs/pnfs.c
NeilBrown 1e4725
@@ -2304,6 +2304,7 @@ out_forget:
NeilBrown 1e4725
 	spin_unlock(&ino->i_lock);
NeilBrown 1e4725
 	lseg->pls_layout = lo;
NeilBrown 1e4725
 	NFS_SERVER(ino)->pnfs_curr_ld->free_lseg(lseg);
NeilBrown 1e4725
+	pnfs_free_lseg_list(&free_me);
NeilBrown 1e4725
 	return ERR_PTR(-EAGAIN);
NeilBrown 1e4725
 }
NeilBrown 1e4725