Re: [PATCH] nfs: support 64-bit root inode number in NFS FSID

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

 



On Thu, 2013-05-23 at 12:59 +0000, Yong, Fan wrote:
> Just make it match the "inode64" in nfs-utils parse_fsid(), which is defined as "unsigned long long", and the parsed_fsid:: inode is copied from "inode64" as following:
> 
> static int parse_fsid(int fsidtype, int fsidlen, char *fsid,
>                 struct parsed_fsid *parsed)
> {
>         unsigned int dev;
>         unsigned long long inode64;
> ...
>         case FSID_UUID16_INUM: /* 8 byte inode number and 16 byte uuid */
>                 if (fsidlen != 24)
>                         return -1;
>                 memcpy(&inode64, fsid, 8);
>                 parsed->inode = inode64;
>                 parsed->uuidlen = 16;
>                 parsed->fhuuid = fsid+8;
>                 break;
>         }
> 
> --
> Cheers,
> Nasf

Eeeeeeeewww! This is _exactly_ why we should be using properly
dimensioned types. Feel free to tell me how the value of 'inode64' is
well defined on systems where sizeof(unsigned long long) != 8...

Trond

> -----Original Message-----
> From: Myklebust, Trond [mailto:Trond.Myklebust@xxxxxxxxxx] 
> Sent: Thursday, May 23, 2013 8:50 PM
> To: Peng Tao
> Cc: Dilger, Andreas; J. Bruce Fields; linux-nfs@xxxxxxxxxxxxxxx; Yong, Fan; Steve Dickson
> Subject: Re: [PATCH] nfs: support 64-bit root inode number in NFS FSID
> 
> On Thu, 2013-05-23 at 16:12 +0800, Peng Tao wrote:
> > [nfs-utils patch needs to be sent to Steve Dickson (CC'ed)]
> > 
> > On Thu, May 23, 2013 at 7:06 AM, Dilger, Andreas 
> > <andreas.dilger@xxxxxxxxx> wrote:
> > > When exporting a filesystem via NFS, it can generate several kinds 
> > > of NFS filesystem IDs. For most of cases, it uses a 32-bit inode 
> > > number in the NFS FSID, but this does not work on a filesystem using 
> > > a 64-bit root inode number.
> > >
> > > In kernel space, NFS can generate/use NFS FSID with a 64-bit inode 
> > > number for the "FSID_UUID16_INUM" type. Unfortunately, while the 
> > > user space nfs-utils decode the 64-bit inode number from the FSID 
> > > correctly, it is truncated when storing it in "struct parsed_fsid".
> > > Expand the "struct parsed_fsid" inode field to store the full 64-bit 
> > > root inode number.
> > >
> > > Intel-bug-id: LU-2904
> > > Signed-off-by: Fan Yong <fan.yong@xxxxxxxxx>
> > > Signed-off-by: Andreas Dilger <andreas.dilger@xxxxxxxxx>
> > > ---
> > >  utils/mountd/cache.c |    2 +-
> > >  1 files changed, 1 insertions(+), 1 deletions(-)
> > >
> > > diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 
> > > 517aa62..a7212e7 100644
> > > --- a/utils/mountd/cache.c
> > > +++ b/utils/mountd/cache.c
> > > @@ -388,7 +388,7 @@ struct parsed_fsid {
> > >         int fsidtype;
> > >         /* We could use a union for this, but it would be more
> > >          * complicated; why bother? */
> > > -       unsigned int inode;
> > > +       unsigned long long inode; /* We need 64-bits ino# */
> > >         unsigned int minor;
> > >         unsigned int major;
> > >         unsigned int fsidnum;
> > > --1.7.1
> > >
> > > Patch is also attached separately, since it will likely be butchered 
> > > by this email client.
> > >
> > >
> > > Cheers, Andreas
> > > --
> > > Andreas Dilger
> 
> Why not just specify a uint64_t size then?
> 
> --
> Trond Myklebust
> Linux NFS client maintainer
> 
> NetApp
> Trond.Myklebust@xxxxxxxxxx
> www.netapp.com
> --
> 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


-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com
--
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




[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