]> git.proxmox.com Git - mirror_zfs-debian.git/commitdiff
MS_DIRSYNC and MS_REC compat
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Feb 2011 20:11:05 +0000 (12:11 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Feb 2011 20:14:57 +0000 (12:14 -0800)
It turns out that older versions of the glibc headers do not
properly define MS_DIRSYNC despite it being explicitly mentioned
in the man pages.  They instead call it S_WRITE, so for system
where this is not correct defined map MS_DIRSYNC to S_WRITE.
At the time of this commit both Ubuntu Lucid, and Debian Squeeze
both use the out of date glibc headers.

As for MS_REC this field is also not available in the older headers.
Since there is no obvious mapping in this case we simply disable
the recursive mount option which used it.

cmd/zfs/zfs_main.c
lib/libspl/include/sys/mount.h

index d27fcbf46ba1794214810e56c9af7c86f054d354..86f0d5c39f1cbf9e1f4245abc90f3dd046ac3c77 100644 (file)
@@ -3875,7 +3875,9 @@ static const option_map_t option_map[] = {
 #endif
        /* Valid options not found in mount(8) */
        { MNTOPT_BIND,          MS_BIND         },
+#ifdef MS_REC
        { MNTOPT_RBIND,         MS_BIND|MS_REC  },
+#endif
        { MNTOPT_COMMENT,       MS_COMMENT      },
        { MNTOPT_BOOTWAIT,      MS_COMMENT      },
        { MNTOPT_NOBOOTWAIT,    MS_COMMENT      },
index f6a67c6a0caf2c106d8118e0cdb7b1bbf09ea983..9eb893fe64bf6266ba8d44819106062023aa7bc0 100644 (file)
 #define BLKGETSIZE64           _IOR(0x12, 114, size_t)
 #endif
 
+/*
+ * Some old glibc headers don't correctly define MS_DIRSYNC and
+ * instead use the enum name S_WRITE.  When using these older
+ * headers define MS_DIRSYNC to be S_WRITE.
+ */
+#if !defined(MS_DIRSYNC)
+#define MS_DIRSYNC             S_WRITE
+#endif
+
 #define        MS_USERS        0x40000000
 #define        MS_OWNER        0x10000000
 #define        MS_GROUP        0x08000000