| From ae5a459d5f65c3e83f3e14068dde5fb9c9d81807 Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| Date: Mon, 14 Nov 2016 14:34:18 -0500 |
| Subject: pNFS: Clear NFS_LAYOUT_RETURN_REQUESTED when invalidating the layout stateid |
| |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| |
| commit ae5a459d5f65c3e83f3e14068dde5fb9c9d81807 upstream. |
| |
| We must ensure that we don't schedule a layoutreturn if the layout stateid |
| has been marked as invalid. |
| |
| Fixes: 2a59a0411671e ("pNFS: Fix pnfs_set_layout_stateid() to clear...") |
| Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/pnfs.c | 17 +++++++++-------- |
| 1 file changed, 9 insertions(+), 8 deletions(-) |
| |
| --- a/fs/nfs/pnfs.c |
| +++ b/fs/nfs/pnfs.c |
| @@ -252,6 +252,14 @@ pnfs_put_layout_hdr(struct pnfs_layout_h |
| } |
| } |
| |
| +static void |
| +pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo) |
| +{ |
| + lo->plh_return_iomode = 0; |
| + lo->plh_return_seq = 0; |
| + clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags); |
| +} |
| + |
| /* |
| * Mark a pnfs_layout_hdr and all associated layout segments as invalid |
| * |
| @@ -270,6 +278,7 @@ pnfs_mark_layout_stateid_invalid(struct |
| }; |
| |
| set_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags); |
| + pnfs_clear_layoutreturn_info(lo); |
| return pnfs_mark_matching_lsegs_invalid(lo, lseg_list, &range, 0); |
| } |
| |
| @@ -771,14 +780,6 @@ pnfs_destroy_all_layouts(struct nfs_clie |
| pnfs_destroy_layouts_byclid(clp, false); |
| } |
| |
| -static void |
| -pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo) |
| -{ |
| - lo->plh_return_iomode = 0; |
| - lo->plh_return_seq = 0; |
| - clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags); |
| -} |
| - |
| /* update lo->plh_stateid with new if is more recent */ |
| void |
| pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, |