aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/delegation.h
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:46 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:46 -0500
commit515d86117724abe39d7d57d7ccc7cc5c44480529 (patch)
treedce297acebc94355217219893a5c6a81ca281ff7 /fs/nfs/delegation.h
parent9e33bed55239bdcee1746c31a11177d239bac1b5 (diff)
NFSv4: Clean up the support for returning multiple delegations
Add a flag to mark delegations as requiring return, then run a garbage collector. In the future, this will allow for more flexible delegation management, where delegations may be marked for return if it turns out that they are not being referenced. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/delegation.h')
-rw-r--r--fs/nfs/delegation.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/nfs/delegation.h b/fs/nfs/delegation.h
index 5e9f40e0a7d8..c772bab12eea 100644
--- a/fs/nfs/delegation.h
+++ b/fs/nfs/delegation.h
@@ -20,12 +20,16 @@ struct nfs_delegation {
20 int type; 20 int type;
21 loff_t maxsize; 21 loff_t maxsize;
22 __u64 change_attr; 22 __u64 change_attr;
23#define NFS_DELEGATION_NEED_RECLAIM 0
24 unsigned long flags; 23 unsigned long flags;
25 spinlock_t lock; 24 spinlock_t lock;
26 struct rcu_head rcu; 25 struct rcu_head rcu;
27}; 26};
28 27
28enum {
29 NFS_DELEGATION_NEED_RECLAIM = 0,
30 NFS_DELEGATION_RETURN,
31};
32
29int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res); 33int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
30void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res); 34void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred, struct nfs_openres *res);
31int nfs_inode_return_delegation(struct inode *inode); 35int nfs_inode_return_delegation(struct inode *inode);
@@ -33,7 +37,7 @@ int nfs_async_inode_return_delegation(struct inode *inode, const nfs4_stateid *s
33void nfs_inode_return_delegation_noreclaim(struct inode *inode); 37void nfs_inode_return_delegation_noreclaim(struct inode *inode);
34 38
35struct inode *nfs_delegation_find_inode(struct nfs_client *clp, const struct nfs_fh *fhandle); 39struct inode *nfs_delegation_find_inode(struct nfs_client *clp, const struct nfs_fh *fhandle);
36void nfs_return_all_delegations(struct super_block *sb); 40void nfs_super_return_all_delegations(struct super_block *sb);
37void nfs_expire_all_delegations(struct nfs_client *clp); 41void nfs_expire_all_delegations(struct nfs_client *clp);
38void nfs_handle_cb_pathdown(struct nfs_client *clp); 42void nfs_handle_cb_pathdown(struct nfs_client *clp);
39 43