Author: kib
Date: Sun Oct 10 07:05:47 2010
New Revision: 213664
URL: http://svn.freebsd.org/changeset/base/213664

Log:
  The r184588 changed the layout of struct export_args, causing an ABI
  breakage for old mount(2) syscall, since most struct <filesystem>_args
  embed export_args. The mount(2) is supposed to provide ABI
  compatibility for pre-nmount mount(8) binaries, so restore ABI to
  pre-r184588.
  
  Requested and reviewed by:    bde
  MFC after:    2 weeks

Modified:
  head/sys/fs/cd9660/cd9660_mount.h
  head/sys/fs/cd9660/cd9660_vfsops.c
  head/sys/fs/hpfs/hpfs_vfsops.c
  head/sys/fs/hpfs/hpfsmount.h
  head/sys/fs/msdosfs/msdosfs_vfsops.c
  head/sys/fs/msdosfs/msdosfsmount.h
  head/sys/fs/ntfs/ntfs_vfsops.c
  head/sys/fs/ntfs/ntfsmount.h
  head/sys/gnu/fs/reiserfs/reiserfs_mount.h
  head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
  head/sys/kern/vfs_mount.c
  head/sys/sys/mount.h
  head/sys/ufs/ffs/ffs_vfsops.c
  head/sys/ufs/ufs/ufsmount.h

Modified: head/sys/fs/cd9660/cd9660_mount.h
==============================================================================
--- head/sys/fs/cd9660/cd9660_mount.h   Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/cd9660/cd9660_mount.h   Sun Oct 10 07:05:47 2010        
(r213664)
@@ -40,7 +40,7 @@
  */
 struct iso_args {
        char    *fspec;                 /* block special device to mount */
-       struct  export_args export;     /* network export info */
+       struct  oexport_args export;    /* network export info */
        int     flags;                  /* mounting flags, see below */
        int     ssector;                /* starting sector, 0 for 1st session */
        char    *cs_disk;               /* disk charset for Joliet cs 
conversion */

Modified: head/sys/fs/cd9660/cd9660_vfsops.c
==============================================================================
--- head/sys/fs/cd9660/cd9660_vfsops.c  Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/cd9660/cd9660_vfsops.c  Sun Oct 10 07:05:47 2010        
(r213664)
@@ -98,14 +98,16 @@ static int
 cd9660_cmount(struct mntarg *ma, void *data, int flags)
 {
        struct iso_args args;
+       struct export_args exp;
        int error;
 
        error = copyin(data, &args, sizeof args);
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
 
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
        ma = mount_argsu(ma, "cs_disk", args.cs_disk, 64);
        ma = mount_argsu(ma, "cs_local", args.cs_local, 64);
        ma = mount_argf(ma, "ssector", "%u", args.ssector);

Modified: head/sys/fs/hpfs/hpfs_vfsops.c
==============================================================================
--- head/sys/fs/hpfs/hpfs_vfsops.c      Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/hpfs/hpfs_vfsops.c      Sun Oct 10 07:05:47 2010        
(r213664)
@@ -76,14 +76,16 @@ hpfs_cmount ( 
        int flags)
 {
        struct hpfs_args args;
+       struct export_args exp;
        int error;
 
        error = copyin(data, (caddr_t)&args, sizeof (struct hpfs_args));
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
 
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
        ma = mount_argf(ma, "uid", "%d", args.uid);
        ma = mount_argf(ma, "gid", "%d", args.gid);
        ma = mount_argf(ma, "mode", "%d", args.mode);

Modified: head/sys/fs/hpfs/hpfsmount.h
==============================================================================
--- head/sys/fs/hpfs/hpfsmount.h        Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/hpfs/hpfsmount.h        Sun Oct 10 07:05:47 2010        
(r213664)
@@ -29,7 +29,7 @@
 #define HPFSMNT_TABLES         0x0001
 struct hpfs_args {
        char    *fspec;                 /* block special device to mount */
-       struct  export_args export;     /* network export information */
+       struct  oexport_args export;    /* network export information */
        uid_t   uid;                    /* uid that owns hpfs files */
        gid_t   gid;                    /* gid that owns hpfs files */
        mode_t  mode;                   /* mask to be applied for hpfs perms */

Modified: head/sys/fs/msdosfs/msdosfs_vfsops.c
==============================================================================
--- head/sys/fs/msdosfs/msdosfs_vfsops.c        Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/msdosfs/msdosfs_vfsops.c        Sun Oct 10 07:05:47 2010        
(r213664)
@@ -200,6 +200,7 @@ static int
 msdosfs_cmount(struct mntarg *ma, void *data, int flags)
 {
        struct msdosfs_args args;
+       struct export_args exp;
        int error;
 
        if (data == NULL)
@@ -207,9 +208,10 @@ msdosfs_cmount(struct mntarg *ma, void *
        error = copyin(data, &args, sizeof args);
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
 
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
        ma = mount_argf(ma, "uid", "%d", args.uid);
        ma = mount_argf(ma, "gid", "%d", args.gid);
        ma = mount_argf(ma, "mask", "%d", args.mask);

Modified: head/sys/fs/msdosfs/msdosfsmount.h
==============================================================================
--- head/sys/fs/msdosfs/msdosfsmount.h  Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/msdosfs/msdosfsmount.h  Sun Oct 10 07:05:47 2010        
(r213664)
@@ -234,7 +234,7 @@ uint32_t msdosfs_fileno_map(struct mount
  */
 struct msdosfs_args {
        char    *fspec;         /* blocks special holding the fs to mount */
-       struct  export_args export;     /* network export information */
+       struct  oexport_args export;    /* network export information */
        uid_t   uid;            /* uid that owns msdosfs files */
        gid_t   gid;            /* gid that owns msdosfs files */
        mode_t  mask;           /* file mask to be applied for msdosfs perms */

Modified: head/sys/fs/ntfs/ntfs_vfsops.c
==============================================================================
--- head/sys/fs/ntfs/ntfs_vfsops.c      Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/ntfs/ntfs_vfsops.c      Sun Oct 10 07:05:47 2010        
(r213664)
@@ -119,14 +119,16 @@ ntfs_cmount ( 
        void *data,
        int flags)
 {
-       int error;
        struct ntfs_args args;
+       struct export_args exp;
+       int error;
 
-       error = copyin(data, (caddr_t)&args, sizeof args);
+       error = copyin(data, &args, sizeof(args));
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
        ma = mount_argf(ma, "uid", "%d", args.uid);
        ma = mount_argf(ma, "gid", "%d", args.gid);
        ma = mount_argf(ma, "mode", "%d", args.mode);

Modified: head/sys/fs/ntfs/ntfsmount.h
==============================================================================
--- head/sys/fs/ntfs/ntfsmount.h        Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/fs/ntfs/ntfsmount.h        Sun Oct 10 07:05:47 2010        
(r213664)
@@ -34,7 +34,7 @@
 
 struct ntfs_args {
        char    *fspec;                 /* block special device to mount */
-       struct  export_args export;     /* network export information */
+       struct  oexport_args export;    /* network export information */
        uid_t   uid;                    /* uid that owns ntfs files */
        gid_t   gid;                    /* gid that owns ntfs files */
        mode_t  mode;                   /* mask to be applied for ntfs perms */

Modified: head/sys/gnu/fs/reiserfs/reiserfs_mount.h
==============================================================================
--- head/sys/gnu/fs/reiserfs/reiserfs_mount.h   Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/gnu/fs/reiserfs/reiserfs_mount.h   Sun Oct 10 07:05:47 2010        
(r213664)
@@ -39,7 +39,7 @@ struct reiserfs_mount {
 /* Arguments to mount ReiserFS filesystems. */
 struct reiserfs_args {
        char    *fspec;         /* blocks special holding the fs to mount */
-       struct export_args export;      /* network export information */
+       struct oexport_args export;     /* network export information */
 };
 
 #endif /* !defined _GNU_REISERFS_REISERFS_MOUNT_H */

Modified: head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
==============================================================================
--- head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c  Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c  Sun Oct 10 07:05:47 2010        
(r213664)
@@ -52,14 +52,16 @@ static int
 reiserfs_cmount(struct mntarg *ma, void *data, int flags)
 {
        struct reiserfs_args args;
+       struct export_args exp;
        int error;
 
        error = copyin(data, &args, sizeof(args));
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
 
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
 
        error = kernel_mount(ma, flags);
 

Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c   Sat Oct  9 20:52:36 2010        (r213663)
+++ head/sys/kern/vfs_mount.c   Sun Oct 10 07:05:47 2010        (r213664)
@@ -1960,3 +1960,11 @@ kernel_vmount(int flags, ...)
        error = kernel_mount(ma, flags);
        return (error);
 }
+
+void
+vfs_oexport_conv(const struct oexport_args *oexp, struct export_args *exp)
+{
+
+       bcopy(oexp, exp, sizeof(*oexp));
+       exp->ex_numsecflavors = 0;
+}

Modified: head/sys/sys/mount.h
==============================================================================
--- head/sys/sys/mount.h        Sat Oct  9 20:52:36 2010        (r213663)
+++ head/sys/sys/mount.h        Sun Oct 10 07:05:47 2010        (r213664)
@@ -741,6 +741,8 @@ int vfs_modevent(module_t, int, void *);
 void   vfs_mount_error(struct mount *, const char *, ...);
 void   vfs_mountroot(void);                    /* mount our root filesystem */
 void   vfs_mountedfrom(struct mount *, const char *from);
+void   vfs_oexport_conv(const struct oexport_args *oexp,
+           struct export_args *exp);
 void   vfs_ref(struct mount *);
 void   vfs_rel(struct mount *);
 struct mount *vfs_mount_alloc(struct vnode *, struct vfsconf *, const char *,

Modified: head/sys/ufs/ffs/ffs_vfsops.c
==============================================================================
--- head/sys/ufs/ffs/ffs_vfsops.c       Sat Oct  9 20:52:36 2010        
(r213663)
+++ head/sys/ufs/ffs/ffs_vfsops.c       Sun Oct 10 07:05:47 2010        
(r213664)
@@ -463,6 +463,7 @@ static int
 ffs_cmount(struct mntarg *ma, void *data, int flags)
 {
        struct ufs_args args;
+       struct export_args exp;
        int error;
 
        if (data == NULL)
@@ -470,9 +471,10 @@ ffs_cmount(struct mntarg *ma, void *data
        error = copyin(data, &args, sizeof args);
        if (error)
                return (error);
+       vfs_oexport_conv(&args.export, &exp);
 
        ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN);
-       ma = mount_arg(ma, "export", &args.export, sizeof args.export);
+       ma = mount_arg(ma, "export", &exp, sizeof(exp));
        error = kernel_mount(ma, flags);
 
        return (error);

Modified: head/sys/ufs/ufs/ufsmount.h
==============================================================================
--- head/sys/ufs/ufs/ufsmount.h Sat Oct  9 20:52:36 2010        (r213663)
+++ head/sys/ufs/ufs/ufsmount.h Sun Oct 10 07:05:47 2010        (r213664)
@@ -40,7 +40,7 @@
  */
 struct ufs_args {
        char    *fspec;                 /* block special device to mount */
-       struct  export_args export;     /* network export information */
+       struct  oexport_args export;    /* network export information */
 };
 
 #ifdef _KERNEL
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to