Skip to content

Commit

Permalink
nfsd4: better stateid hashing
Browse files Browse the repository at this point in the history
First, we shouldn't care here about the structure of the opaque part of
the stateid.  Second, this hash is really dumb.  (I'm not sure the
replacement is much better, though--to look at it another patch.)

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
  • Loading branch information
J. Bruce Fields committed Sep 13, 2011
1 parent 69064a2 commit ee626a7
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions fs/nfsd/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ static unsigned int file_hashval(struct inode *ino)
return hash_ptr(ino, FILE_HASH_BITS);
}

static unsigned int stateid_hashval(u32 owner_id, u32 file_id)
static unsigned int stateid_hashval(stateid_t *s)
{
return (owner_id + file_id) & STATEID_HASH_MASK;
return opaque_hashval(&s->si_opaque, sizeof(stateid_opaque_t)) & STATEID_HASH_MASK;
}

static struct list_head file_hashtbl[FILE_HASH_SIZE];
Expand Down Expand Up @@ -221,7 +221,7 @@ static inline void hash_stid(struct nfs4_stid *stid)
stateid_t *s = &stid->sc_stateid;
unsigned int hashval;

hashval = stateid_hashval(s->si_stateownerid, s->si_fileid);
hashval = stateid_hashval(s);
list_add(&stid->sc_hash, &stateid_hashtbl[hashval]);
}

Expand Down Expand Up @@ -1083,7 +1083,7 @@ static struct nfs4_stid *find_stateid(stateid_t *t)
struct nfs4_stid *s;
unsigned int hashval;

hashval = stateid_hashval(t->si_stateownerid, t->si_fileid);
hashval = stateid_hashval(t);
list_for_each_entry(s, &stateid_hashtbl[hashval], sc_hash)
if (same_stateid(&s->sc_stateid, t))
return s;
Expand Down

0 comments on commit ee626a7

Please sign in to comment.