]> git.hungrycats.org Git - linux/commitdiff
[PATCH] kNFSd: NFSD binary compatibility breakage
authorNeil Brown <neilb@cse.unsw.edu.au>
Sat, 12 Apr 2003 20:04:22 +0000 (13:04 -0700)
committerJames Bottomley <jejb@raven.il.steeleye.com>
Sat, 12 Apr 2003 20:04:22 +0000 (13:04 -0700)
The removal of "struct nfsctl_uidmap" from "nfsctl_fdparm" broke
binary compatiblity on 64-bit platforms (strictly speaking: on all
platforms with alignof(void *) > alignof(int)).  The problem is that
nfsctl_uidmap contained a "char *", which forced the alignment of the
entire union to be 64 bits.  With the removal of the uidmap, the
required alignment drops to 32 bits.  Since the first member is only
32 bits in size, this breaks compatibility with user-space.  Patch
below fixes the problem.

include/linux/nfsd/syscall.h

index 872af1fe9d7d684130465536e3b1713f6e2afdad..d512171f5bf855ec48638888419b9db24950a8f3 100644 (file)
@@ -91,6 +91,13 @@ struct nfsctl_arg {
                struct nfsctl_export    u_export;
                struct nfsctl_fdparm    u_getfd;
                struct nfsctl_fsparm    u_getfs;
+               /*
+                * The following dummy member is needed to preserve binary compatibility
+                * on platforms where alignof(void*)>alignof(int).  It's needed because
+                * this union used to contain a member (u_umap) which contained a
+                * pointer.
+                */
+               void *u_ptr;
        } u;
 #define ca_svc         u.u_svc
 #define ca_client      u.u_client