Re: [PATCH] NFS: add filehandle crc for debug display

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2012-03-20 at 09:53 -0400, Bryan Schumaker wrote:
> 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)
> >  {
> 

Yes. Stephen Rothwell pointed out the same, and so I've applied his
patch to the 'testing' branch already.

He also found a bunch of 'struct rpc_task' in the sunrpc and lockd code
that were marked as 'unused variable', and so there is a patch to fix
that too...

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com

��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux