> On Jun 23, 2022, at 6:56 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > On Wed, Jun 22, 2022 at 10:15:50AM -0400, Chuck Lever wrote: > >> +static u32 nfsd_file_obj_hashfn(const void *data, u32 len, u32 seed) >> +{ >> + const struct nfsd_file *nf = data; >> + >> + return jhash2((const u32 *)&nf->nf_inode, >> + sizeof_field(struct nfsd_file, nf_inode) / sizeof(u32), >> + seed); > > Out of curiosity - what are you using to allocate those? Because if > it's a slab, then middle bits of address (i.e. lower bits of > (unsigned long)data / L1_CACHE_BYTES) would better be random enough... 261 static struct nfsd_file * 262 nfsd_file_alloc(struct nfsd_file_lookup_key *key, unsigned int may) 263 { 264 static atomic_t nfsd_file_id; 265 struct nfsd_file *nf; 266 267 nf = kmem_cache_alloc(nfsd_file_slab, GFP_KERNEL); Was wondering about that. pahole says struct nfsd_file is 112 bytes on my system. -- Chuck Lever