On (22/10/2010 21:38), Rick Macklem wrote: > Author: rmacklem > Date: Fri Oct 22 21:38:56 2010 > New Revision: 214224 > URL: http://svn.freebsd.org/changeset/base/214224 > > Log: > Modify the file handle hash function in the experimental NFS > server so that it will work better for non-UFS file systems. > The new function simply sums the bytes of the fh_fid field > of fhandle_t. > > MFC after: 10 days > > Modified: > head/sys/fs/nfs/nfs_var.h > head/sys/fs/nfs/nfsdport.h > head/sys/fs/nfsserver/nfs_nfsdport.c > > Modified: head/sys/fs/nfs/nfs_var.h > ============================================================================== > --- head/sys/fs/nfs/nfs_var.h Fri Oct 22 20:46:08 2010 (r214223) > +++ head/sys/fs/nfs/nfs_var.h Fri Oct 22 21:38:56 2010 (r214224) > @@ -576,6 +576,7 @@ void nfsvno_unlockvfs(mount_t); > int nfsvno_lockvfs(mount_t); > int nfsrv_v4rootexport(void *, struct ucred *, NFSPROC_T *); > int nfsvno_testexp(struct nfsrv_descript *, struct nfsexstuff *); > +int nfsrv_hashfh(fhandle_t *); > > /* nfs_commonkrpc.c */ > int newnfs_nmcancelreqs(struct nfsmount *); > > Modified: head/sys/fs/nfs/nfsdport.h > ============================================================================== > --- head/sys/fs/nfs/nfsdport.h Fri Oct 22 20:46:08 2010 > (r214223) > +++ head/sys/fs/nfs/nfsdport.h Fri Oct 22 21:38:56 2010 > (r214224) > @@ -73,7 +73,7 @@ struct nfsexstuff { > bcmp(&(f1)->fh_fid, &(f2)->fh_fid, sizeof(struct fid)) == 0) > > #define NFSLOCKHASH(f) > \ > - (&nfslockhash[(*((u_int32_t *)((f)->fh_fid.fid_data))) % > NFSLOCKHASHSIZE]) > + (&nfslockhash[nfsrv_hashfh(f) % NFSLOCKHASHSIZE]) > > #define NFSFPVNODE(f) ((struct vnode *)((f)->f_data)) > #define NFSFPCRED(f) ((f)->f_cred) > > Modified: head/sys/fs/nfsserver/nfs_nfsdport.c > ============================================================================== > --- head/sys/fs/nfsserver/nfs_nfsdport.c Fri Oct 22 20:46:08 2010 > (r214223) > +++ head/sys/fs/nfsserver/nfs_nfsdport.c Fri Oct 22 21:38:56 2010 > (r214224) > @@ -3087,6 +3087,21 @@ nfsvno_testexp(struct nfsrv_descript *nd > return (1); > } > > +/* > + * Calculate a hash value for the fid in a file handle. > + */ > +int > +nfsrv_hashfh(fhandle_t *fhp) > +{ > + int hashval = 0, i; > + uint8_t *cp; > + > + cp = (uint8_t *)&fhp->fh_fid; > + for (i = 0; i < sizeof(struct fid); i++) > + hashval += *cp++; > + return (hashval); > +} > + Is there a reason not to use fnv_32_buf() from sys/fnv_hash.h or hash32_buf() from sys/hash.h?
Just summing up bytes for hash is not generally helpful. Thanks, Gleb. > extern int (*nfsd_call_nfsd)(struct thread *, struct nfssvc_args *); > > /* > _______________________________________________ > svn-src-all@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-all > To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org" _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"