Hi Dros, On 03/06/2012 08:46 PM, Weston Andros Adamson wrote: > Match wireshark's CRC-32 hash for easier debugging > > Signed-off-by: Weston Andros Adamson <dros@xxxxxxxxxx> > --- > Reposted with Trond's suggestion of splitting out hash calculation to a > separate function. Now dprintks can use a fh's CRC instead of the > multiline nfs_display_fhandle() when it makes sense. > > fs/nfs/inode.c | 23 ++++++++++++++++++++--- > include/linux/nfs_fs.h | 8 ++++++++ > 2 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c > index 99a4f52..3919ceb 100644 > --- a/fs/nfs/inode.c > +++ b/fs/nfs/inode.c > @@ -39,6 +39,7 @@ > #include <linux/slab.h> > #include <linux/compat.h> > #include <linux/freezer.h> > +#include <linux/crc32.h> > > #include <asm/system.h> > #include <asm/uaccess.h> > @@ -1045,7 +1046,23 @@ struct nfs_fh *nfs_alloc_fhandle(void) > return fh; > } > > -/** > +#ifdef RPC_DEBUG > +/* > + * _nfs_display_fhandle_hash - calculate the crc32 hash for the filehandle > + * in the same way that wireshark does > + * > + * @fh: file handle > + * > + * For debugging only. > + */ > +u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh) > +{ > + /* wireshark uses 32-bit AUTODIN crc and does a bitwise > + * not on the result */ > + return ~crc32(0xFFFFFFFF, &fh->data[0], fh->size); > +} > + > +/* > * _nfs_display_fhandle - display an NFS file handle on the console > * > * @fh: file handle to display > @@ -1053,7 +1070,6 @@ struct nfs_fh *nfs_alloc_fhandle(void) > * > * For debugging only. > */ > -#ifdef RPC_DEBUG > void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption) > { > unsigned short i; > @@ -1063,7 +1079,8 @@ void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption) > return; > } > > - printk(KERN_DEFAULT "%s at %p is %u bytes:\n", caption, fh, fh->size); > + printk(KERN_DEFAULT "%s at %p is %u bytes, crc: 0x%08x:\n", > + caption, fh, fh->size, _nfs_display_fhandle_hash(fh)); > for (i = 0; i < fh->size; i += 16) { > __be32 *pos = (__be32 *)&fh->data[i]; > > diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h > index c07a757..ce8e436 100644 > --- a/include/linux/nfs_fs.h > +++ b/include/linux/nfs_fs.h > @@ -396,6 +396,11 @@ static inline void nfs_free_fhandle(const struct nfs_fh *fh) > } > > #ifdef RPC_DEBUG > +extern u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh); > +static inline u32 nfs_display_fhandle_hash(const struct nfs_fh *fh) > +{ > + return _nfs_display_fhandle_hash(fh); > +} > extern void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption); > #define nfs_display_fhandle(fh, caption) \ > do { \ > @@ -403,6 +408,9 @@ extern void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption); > _nfs_display_fhandle(fh, caption); \ > } while (0) > #else > +static inline u32 nfs_display_fhandle_hash(const struct nfs_fh *fh) > +{ This function should return something... maybe 0? - Bryan > +} > static inline void nfs_display_fhandle(const struct nfs_fh *fh, > const char *caption) > { -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html