2013-05-22 23:07:10

by Dilger, Andreas

[permalink] [raw]
Subject: [PATCH] nfs: support 64-bit root inode number in NFS FSID

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 <[email protected]>
Signed-off-by: Andreas Dilger <[email protected]>
---
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

Lustre Software Architect
Intel High Performance Data Division



Attachments:
nfs-suport-64-bit-root-inode-number.patch (1.42 kB)
nfs-suport-64-bit-root-inode-number.patch

2013-05-24 01:38:58

by Yong, Fan

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

For the rare unfortunate cases of "sizeof(unsigned long) < 4" or "sizeof(unsigned long long) < 8", current nfs-utils will cross-boundary memory copy. So need more work to make it stably runnable on kinds of platform...

--
Cheers,
Nasf

-----Original Message-----
From: Myklebust, Trond [mailto:[email protected]]
Sent: Thursday, May 23, 2013 10:22 PM
To: Jim Rees
Cc: Yong, Fan; Peng Tao; Dilger, Andreas; J. Bruce Fields; [email protected]; Steve Dickson
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

> -----Original Message-----
> From: Jim Rees [mailto:[email protected]]
> Sent: Thursday, May 23, 2013 10:20 AM
> To: Myklebust, Trond
> Cc: Yong, Fan; Peng Tao; Dilger, Andreas; J. Bruce Fields; linux-
> [email protected]; Steve Dickson
> Subject: Re: [PATCH] nfs: support 64-bit root inode number in NFS FSID
>
> Myklebust, Trond wrote:
>
> 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...
>
> Is there any reason not to use ino_t?

Yes. It's not guaranteed to be 64-bit either.

Trond

2013-05-23 14:21:47

by Myklebust, Trond

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

> -----Original Message-----
> From: Jim Rees [mailto:[email protected]]
> Sent: Thursday, May 23, 2013 10:20 AM
> To: Myklebust, Trond
> Cc: Yong, Fan; Peng Tao; Dilger, Andreas; J. Bruce Fields; linux-
> [email protected]; Steve Dickson
> Subject: Re: [PATCH] nfs: support 64-bit root inode number in NFS FSID
>
> Myklebust, Trond wrote:
>
> 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...
>
> Is there any reason not to use ino_t?

Yes. It's not guaranteed to be 64-bit either.

Trond

2013-05-23 14:20:21

by Jim Rees

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

Myklebust, Trond wrote:

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...

Is there any reason not to use ino_t?

2013-05-23 12:49:46

by Myklebust, Trond

[permalink] [raw]
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
> <[email protected]> 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 <[email protected]>
> > Signed-off-by: Andreas Dilger <[email protected]>
> > ---
> > 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
[email protected]
http://www.netapp.com

2013-05-23 13:39:43

by Myklebust, Trond

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

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:[email protected]]
> Sent: Thursday, May 23, 2013 8:50 PM
> To: Peng Tao
> Cc: Dilger, Andreas; J. Bruce Fields; [email protected]; 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
> > <[email protected]> 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 <[email protected]>
> > > Signed-off-by: Andreas Dilger <[email protected]>
> > > ---
> > > 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
> [email protected]
> http://www.netapp.com
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


--
Trond Myklebust
Linux NFS client maintainer

NetApp
[email protected]
http://www.netapp.com

2013-05-23 08:12:25

by Peng Tao

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

[nfs-utils patch needs to be sent to Steve Dickson (CC'ed)]

On Thu, May 23, 2013 at 7:06 AM, Dilger, Andreas
<[email protected]> 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 <[email protected]>
> Signed-off-by: Andreas Dilger <[email protected]>
> ---
> 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
>
> Lustre Software Architect
> Intel High Performance Data Division
>
>

2013-05-24 01:49:31

by Myklebust, Trond

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

> -----Original Message-----
> From: Yong, Fan [mailto:[email protected]]
> Sent: Thursday, May 23, 2013 9:30 PM
> To: Myklebust, Trond; Jim Rees
> Cc: Peng Tao; Dilger, Andreas; J. Bruce Fields; [email protected];
> Steve Dickson
> Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID
>
> For the rare unfortunate cases of "sizeof(unsigned long) < 4" or
> "sizeof(unsigned long long) < 8", current nfs-utils will cross-boundary
> memory copy. So need more work to make it stably runnable on kinds of
> platform...

unsigned long long is guaranteed by C99 to be >= 64 bits. IOW: it could be 128 bits depending on the compiler.


> --
> Cheers,
> Nasf
>
> -----Original Message-----
> From: Myklebust, Trond [mailto:[email protected]]
> Sent: Thursday, May 23, 2013 10:22 PM
> To: Jim Rees
> Cc: Yong, Fan; Peng Tao; Dilger, Andreas; J. Bruce Fields; linux-
> [email protected]; Steve Dickson
> Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID
>
> > -----Original Message-----
> > From: Jim Rees [mailto:[email protected]]
> > Sent: Thursday, May 23, 2013 10:20 AM
> > To: Myklebust, Trond
> > Cc: Yong, Fan; Peng Tao; Dilger, Andreas; J. Bruce Fields; linux-
> > [email protected]; Steve Dickson
> > Subject: Re: [PATCH] nfs: support 64-bit root inode number in NFS FSID
> >
> > Myklebust, Trond wrote:
> >
> > 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...
> >
> > Is there any reason not to use ino_t?
>
> Yes. It's not guaranteed to be 64-bit either.
>
> Trond

2013-05-23 12:59:35

by Yong, Fan

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

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



-----Original Message-----
From: Myklebust, Trond [mailto:[email protected]]
Sent: Thursday, May 23, 2013 8:50 PM
To: Peng Tao
Cc: Dilger, Andreas; J. Bruce Fields; [email protected]; 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
> <[email protected]> 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 <[email protected]>
> > Signed-off-by: Andreas Dilger <[email protected]>
> > ---
> > 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
[email protected]
http://www.netapp.com

2013-06-03 01:59:35

by Yong, Fan

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

Update the patch as suggested.

--
Cheers,
Nasf



-----Original Message-----
From: Myklebust, Trond [mailto:[email protected]]
Sent: Thursday, May 23, 2013 8:50 PM
To: Peng Tao
Cc: Dilger, Andreas; J. Bruce Fields; [email protected]; 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
> <[email protected]> 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 <[email protected]>
> > Signed-off-by: Andreas Dilger <[email protected]>
> > ---
> > 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
[email protected]
http://www.netapp.com

2013-06-03 02:02:48

by Yong, Fan

[permalink] [raw]
Subject: RE: [PATCH] nfs: support 64-bit root inode number in NFS FSID

Update the patch as suggested. Here is the patch...

--
Cheers,
Nasf



-----Original Message-----
From: Myklebust, Trond [mailto:[email protected]]
Sent: Thursday, May 23, 2013 8:50 PM
To: Peng Tao
Cc: Dilger, Andreas; J. Bruce Fields; [email protected]; 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
> <[email protected]> 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 <[email protected]>
> > Signed-off-by: Andreas Dilger <[email protected]>
> > ---
> > 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
[email protected]
http://www.netapp.com


Attachments:
0001-nfs-support-64-bit-root-inode-number-in-NFS-FSID.patch (1.74 kB)
0001-nfs-support-64-bit-root-inode-number-in-NFS-FSID.patch