Messages in this thread | ![/](/images/icornerl.gif) | | From | Neil Brown <> | Date | Thu, 10 Apr 2003 09:48:37 +1000 | Subject | Re: NFSD binary compatibility breakage |
| |
On Tuesday April 8, davidm@napali.hpl.hp.com wrote: > Neil, > > 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.
Hmm... just another reason to get rid of these binary interfaces! I plan to rip them all out in 2.7.1. But for now I'll try to keep them going as best I can. Thanks for the patch.
NeilBrown
> > Thanks, > > --david > > ===== include/linux/nfsd/syscall.h 1.4 vs edited ===== > --- 1.4/include/linux/nfsd/syscall.h Sun Mar 23 14:35:20 2003 > +++ edited/include/linux/nfsd/syscall.h Tue Apr 8 22:36:59 2003 > @@ -91,6 +91,13 @@ > 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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |