aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2011-09-08 12:16:03 -0400
committerJ. Bruce Fields <bfields@redhat.com>2011-09-13 18:30:33 -0400
commit36d44c6038f6d3f8786187a5558c2f3b39a7af95 (patch)
tree39bd0f665d64632950e3faf58e9b535c69101ad2 /fs/nfsd/nfs4state.c
parentd5477a8db8134c481ad7b4b745f6defa119253e1 (diff)
nfsd4: share common stid-hashing helper function
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 3e3d605d3e73..581a5d01b005 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -218,6 +218,15 @@ static void nfs4_file_put_access(struct nfs4_file *fp, int oflag)
218 __nfs4_file_put_access(fp, oflag); 218 __nfs4_file_put_access(fp, oflag);
219} 219}
220 220
221static inline void hash_stid(struct nfs4_stid *stid)
222{
223 stateid_t *s = &stid->sc_stateid;
224 unsigned int hashval;
225
226 hashval = stateid_hashval(s->si_stateownerid, s->si_fileid);
227 list_add(&stid->sc_hash, &stateid_hashtbl[hashval]);
228}
229
221static struct nfs4_delegation * 230static struct nfs4_delegation *
222alloc_init_deleg(struct nfs4_client *clp, struct nfs4_ol_stateid *stp, struct svc_fh *current_fh, u32 type) 231alloc_init_deleg(struct nfs4_client *clp, struct nfs4_ol_stateid *stp, struct svc_fh *current_fh, u32 type)
223{ 232{
@@ -2316,10 +2325,8 @@ alloc_init_open_stateowner(unsigned int strhashval, struct nfs4_client *clp, str
2316static inline void 2325static inline void
2317init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) { 2326init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) {
2318 struct nfs4_openowner *oo = open->op_openowner; 2327 struct nfs4_openowner *oo = open->op_openowner;
2319 unsigned int hashval = stateid_hashval(oo->oo_owner.so_id, fp->fi_id);
2320 2328
2321 INIT_LIST_HEAD(&stp->st_lockowners); 2329 INIT_LIST_HEAD(&stp->st_lockowners);
2322 list_add(&stp->st_stid.sc_hash, &stateid_hashtbl[hashval]);
2323 list_add(&stp->st_perstateowner, &oo->oo_owner.so_stateids); 2330 list_add(&stp->st_perstateowner, &oo->oo_owner.so_stateids);
2324 list_add(&stp->st_perfile, &fp->fi_stateids); 2331 list_add(&stp->st_perfile, &fp->fi_stateids);
2325 stp->st_stid.sc_type = NFS4_OPEN_STID; 2332 stp->st_stid.sc_type = NFS4_OPEN_STID;
@@ -2331,6 +2338,7 @@ init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp, struct nfsd
2331 stp->st_stid.sc_stateid.si_fileid = fp->fi_id; 2338 stp->st_stid.sc_stateid.si_fileid = fp->fi_id;
2332 /* note will be incremented before first return to client: */ 2339 /* note will be incremented before first return to client: */
2333 stp->st_stid.sc_stateid.si_generation = 0; 2340 stp->st_stid.sc_stateid.si_generation = 0;
2341 hash_stid(&stp->st_stid);
2334 stp->st_access_bmap = 0; 2342 stp->st_access_bmap = 0;
2335 stp->st_deny_bmap = 0; 2343 stp->st_deny_bmap = 0;
2336 __set_bit(open->op_share_access & ~NFS4_SHARE_WANT_MASK, 2344 __set_bit(open->op_share_access & ~NFS4_SHARE_WANT_MASK,
@@ -3866,12 +3874,10 @@ static struct nfs4_ol_stateid *
3866alloc_init_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fp, struct nfs4_ol_stateid *open_stp) 3874alloc_init_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fp, struct nfs4_ol_stateid *open_stp)
3867{ 3875{
3868 struct nfs4_ol_stateid *stp; 3876 struct nfs4_ol_stateid *stp;
3869 unsigned int hashval = stateid_hashval(lo->lo_owner.so_id, fp->fi_id);
3870 3877
3871 stp = nfs4_alloc_stateid(); 3878 stp = nfs4_alloc_stateid();
3872 if (stp == NULL) 3879 if (stp == NULL)
3873 goto out; 3880 goto out;
3874 list_add(&stp->st_stid.sc_hash, &stateid_hashtbl[hashval]);
3875 list_add(&stp->st_perfile, &fp->fi_stateids); 3881 list_add(&stp->st_perfile, &fp->fi_stateids);
3876 list_add(&stp->st_perstateowner, &lo->lo_owner.so_stateids); 3882 list_add(&stp->st_perstateowner, &lo->lo_owner.so_stateids);
3877 stp->st_stateowner = &lo->lo_owner; 3883 stp->st_stateowner = &lo->lo_owner;
@@ -3883,6 +3889,7 @@ alloc_init_lock_stateid(struct nfs4_lockowner *lo, struct nfs4_file *fp, struct
3883 stp->st_stid.sc_stateid.si_fileid = fp->fi_id; 3889 stp->st_stid.sc_stateid.si_fileid = fp->fi_id;
3884 /* note will be incremented before first return to client: */ 3890 /* note will be incremented before first return to client: */
3885 stp->st_stid.sc_stateid.si_generation = 0; 3891 stp->st_stid.sc_stateid.si_generation = 0;
3892 hash_stid(&stp->st_stid);
3886 stp->st_access_bmap = 0; 3893 stp->st_access_bmap = 0;
3887 stp->st_deny_bmap = open_stp->st_deny_bmap; 3894 stp->st_deny_bmap = open_stp->st_deny_bmap;
3888 stp->st_openstp = open_stp; 3895 stp->st_openstp = open_stp;