diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-06-17 16:48:26 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2016-06-24 12:01:00 -0400 |
commit | 2d148c7e84962429a79092a56d3736a8d984f595 (patch) | |
tree | ff6f6914a18070418a1afdafed82bb9284257dbe /fs | |
parent | cbebaf897e5c4862567eb799dc84acc5d7ee2678 (diff) | |
download | op-kernel-dev-2d148c7e84962429a79092a56d3736a8d984f595.zip op-kernel-dev-2d148c7e84962429a79092a56d3736a8d984f595.tar.gz |
NFSv4.1/pnfs: Mark the layout stateid invalid when all segments are removed
According to RFC5661, section 12.5.3. the layout stateid is no longer
valid once the client no longer holds any layout segments. Ensure that
we mark it invalid.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/pnfs.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index ca488b5..0fbe734 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -361,8 +361,10 @@ pnfs_layout_remove_lseg(struct pnfs_layout_hdr *lo, list_del_init(&lseg->pls_list); /* Matched by pnfs_get_layout_hdr in pnfs_layout_insert_lseg */ atomic_dec(&lo->plh_refcount); - if (list_empty(&lo->plh_segs)) + if (list_empty(&lo->plh_segs)) { + set_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags); clear_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags); + } rpc_wake_up(&NFS_SERVER(inode)->roc_rpcwaitq); } |