summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust2012-09-21 21:49:42 +0200
committerTrond Myklebust2012-09-28 22:03:17 +0200
commit173f77e9c5cbddb02eebe17dd9c48d39e5eb86b9 (patch)
tree648a0e78eb1316f5ebe3cee659a4aac0b8ffa48c
parentNFSv4.1: Get rid of the NFS_LAYOUT_DESTROYED state (diff)
downloadkernel-qcow2-linux-173f77e9c5cbddb02eebe17dd9c48d39e5eb86b9.tar.gz
kernel-qcow2-linux-173f77e9c5cbddb02eebe17dd9c48d39e5eb86b9.tar.xz
kernel-qcow2-linux-173f77e9c5cbddb02eebe17dd9c48d39e5eb86b9.zip
NFSv4.1: Clear NFS_LAYOUT_BULK_RECALL when the layout segments are freed
Once all the affected layout segments have been freed up, clear the NFS_LAYOUT_BULK_RECALL flag so that we can reuse the pnfs_layout_hdr Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/pnfs.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index bda88a275071..174c51a5001c 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -331,6 +331,8 @@ 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))
+ clear_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags);
rpc_wake_up(&NFS_SERVER(inode)->roc_rpcwaitq);
}