
From: Jeremy Fitzhardinge <jeremy@goop.org>

There still seems to be a problem with large dev_t and nfs exports.  I'm
getting this in my /proc/fs/nfsd/exports:

# Version 1.1
# Path Client(Flags) # IPs
/usr/local      fw.goop.org(rw,insecure,root_squash,all_squash,async,wdelay,uidmap,kerberos,sunsecure,nohide,crossmnt,no_subtree_check,insecure_locks,msnfs,fsid=2,anonuid=27772,anongid=2053)
/usr/local      dhcp-159.goop.org(rw,insecure,root_squash,all_squash,async,wdelay,uidmap,kerberos,sunsecure,nohide,crossmnt,no_subtree_check,insecure_locks,msnfs,fsid=2,anonuid=44164,anongid=2053)
/usr/local      iris.goop.org(rw,insecure,root_squash,all_squash,async,wdelay,uidmap,kerberos,sunsecure,nohide,crossmnt,no_subtree_check,insecure_locks,msnfs,fsid=2,anonuid=54692,anongid=2053)
/usr/local      ezr-eth.goop.org(rw,insecure,root_squash,all_squash,async,wdelay,uidmap,kerberos,sunsecure,nohide,crossmnt,no_subtree_check,insecure_locks,msnfs,fsid=2,anonuid=33636,anongid=2053)
/home   mc1.goop.org(rw,insecure,root_squash,all_squash,async,wdelay,uidmap,kerberos,sunsecure,nohide,crossmnt,no_subtree_check,insecure_locks,msnfs,fsid=2,anonuid=65356,anongid=2053)

which looks nothing like my actual export options:

/               *(rw,no_root_squash,insecure,async)
/usr/local      *(rw,no_root_squash,insecure,async)
/home           *(rw,no_root_squash,insecure,async)

It was working with Neil's patch on Mar 23rd, but it doesn't work with
whatever got into Linus' tree.  It looks like the difference is in
nfsd/syscall.h:struct nfsctl_export's use of __kernel_dev_t vs u16 for
ex_dev.  The Mar 23rd patch changes it to u16, but Linus' tree still
uses __kernel_dev_t.

I noticed the comment in the changeset: 
        The third variant that uses __kernel_* types, export, is not so
        easy to deal with, so it will be kept for later.

It seems to me that this is the only case which I've actually
encountered.  What's the problem?  If I make this change locally, it all
seems to work OK, and the filesystems are exported properly.




 25-akpm/include/linux/nfsd/syscall.h |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN include/linux/nfsd/syscall.h~32bit-dev_t-nfs-export-fix include/linux/nfsd/syscall.h
--- 25/include/linux/nfsd/syscall.h~32bit-dev_t-nfs-export-fix	Mon Apr 14 16:22:47 2003
+++ 25-akpm/include/linux/nfsd/syscall.h	Mon Apr 14 16:22:47 2003
@@ -59,7 +59,7 @@ struct nfsctl_client {
 struct nfsctl_export {
 	char			ex_client[NFSCLNT_IDMAX+1];
 	char			ex_path[NFS_MAXPATHLEN+1];
-	__kernel_dev_t		ex_dev;
+	u16			ex_dev;
 	__kernel_ino_t		ex_ino;
 	int			ex_flags;
 	__kernel_uid_t		ex_anon_uid;

_
