svn commit: r214224 - in head/sys/fs: nfs nfsserver
Gleb Kurtsou
gleb.kurtsou at gmail.com
Sat Oct 23 09:23:58 UTC 2010
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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the svn-src-all
mailing list