Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Oct 2010 12:00:40 +0300
From:      Gleb Kurtsou <gleb.kurtsou@gmail.com>
To:        Rick Macklem <rmacklem@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r214224 - in head/sys/fs: nfs nfsserver
Message-ID:  <20101023090040.GA67039@tops>
In-Reply-To: <201010222138.o9MLcuLY066850@svn.freebsd.org>
References:  <201010222138.o9MLcuLY066850@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101023090040.GA67039>