lkml.org 
[lkml]   [2003]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: 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/

\
 
 \ /
  Last update: 2005-03-22 13:34    [W:0.063 / U:1.140 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site