pNFS/NFSv4: Fix a layout segment leak in pnfs_layout_process()
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 21 Jan 2021 21:34:37 +0000 (16:34 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 25 Jan 2021 01:52:30 +0000 (20:52 -0500)
If the server returns a new stateid that does not match the one in our
cache, then pnfs_layout_process() will leak the layout segments returned
by pnfs_mark_layout_stateid_invalid().

Fixes: 9888d837f3cf ("pNFS: Force a retry of LAYOUTGET if the stateid doesn't match our cache")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/pnfs.c

index 4f274f2..e68e6f8 100644 (file)
@@ -2417,6 +2417,7 @@ out_forget:
        spin_unlock(&ino->i_lock);
        lseg->pls_layout = lo;
        NFS_SERVER(ino)->pnfs_curr_ld->free_lseg(lseg);
+       pnfs_free_lseg_list(&free_me);
        return ERR_PTR(-EAGAIN);
 }