From: Neil Brown <neilb@cse.unsw.edu.au>

(32 bit dev_t changes the size of data structures which are passed to/from
userspace and breaks knfsd exports)


I think it is completely safe to change

	__kernel_dev_t		ex_dev;
to
	u16			ex_dev;

in nfsd/syscall.h.  That field is not actually used to hold
a device number any more (ex_path contains all the needed info).

The other __kernel_dev_t in syscall.h, in nfsctl_fhparm
can be discarded along with the who structure.  It is an
interface that has not been used for ages and is not implemented in
2.5.




 include/linux/nfsd/syscall.h |   14 ++------------
 1 files changed, 2 insertions(+), 12 deletions(-)

diff -puN include/linux/nfsd/syscall.h~nfsd-32-bit-dev_t-fixes include/linux/nfsd/syscall.h
--- 25/include/linux/nfsd/syscall.h~nfsd-32-bit-dev_t-fixes	2003-03-23 01:14:54.000000000 -0800
+++ 25-akpm/include/linux/nfsd/syscall.h	2003-03-23 01:14:54.000000000 -0800
@@ -35,7 +35,7 @@
 #define NFSCTL_EXPORT		3	/* export a file system. */
 #define NFSCTL_UNEXPORT		4	/* unexport a file system. */
 #define NFSCTL_UGIDUPDATE	5	/* update a client's uid/gid map. */
-#define NFSCTL_GETFH		6	/* get an fh by ino (used by mountd) */
+#define NFSCTL_GETFH		6	/* get an fh by ino DISCARDED */
 #define NFSCTL_GETFD		7	/* get an fh by path (used by mountd) */
 #define	NFSCTL_GETFS		8	/* get an fh by path with max FH len */
 
@@ -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;
@@ -77,14 +77,6 @@ struct nfsctl_uidmap {
 	__kernel_gid_t *	ug_gdimap;
 };
 
-/* GETFH */
-struct nfsctl_fhparm {
-	struct sockaddr		gf_addr;
-	__kernel_dev_t		gf_dev;
-	__kernel_ino_t		gf_ino;
-	int			gf_version;
-};
-
 /* GETFD */
 struct nfsctl_fdparm {
 	struct sockaddr		gd_addr;
@@ -109,7 +101,6 @@ struct nfsctl_arg {
 		struct nfsctl_client	u_client;
 		struct nfsctl_export	u_export;
 		struct nfsctl_uidmap	u_umap;
-		struct nfsctl_fhparm	u_getfh;
 		struct nfsctl_fdparm	u_getfd;
 		struct nfsctl_fsparm	u_getfs;
 	} u;
@@ -117,7 +108,6 @@ struct nfsctl_arg {
 #define ca_client	u.u_client
 #define ca_export	u.u_export
 #define ca_umap		u.u_umap
-#define ca_getfh	u.u_getfh
 #define ca_getfd	u.u_getfd
 #define	ca_getfs	u.u_getfs
 #define ca_authd	u.u_authd

_