From afffb5cd102f340f3879f4d7af8988dd209b9b72 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 10 Feb 2011 12:11:05 -0800 Subject: [PATCH] MS_DIRSYNC and MS_REC compat 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 | 2 ++ lib/libspl/include/sys/mount.h | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c index d27fcbf46b..86f0d5c39f 100644 --- a/cmd/zfs/zfs_main.c +++ b/cmd/zfs/zfs_main.c @@ -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 }, diff --git a/lib/libspl/include/sys/mount.h b/lib/libspl/include/sys/mount.h index f6a67c6a0c..9eb893fe64 100644 --- a/lib/libspl/include/sys/mount.h +++ b/lib/libspl/include/sys/mount.h @@ -42,6 +42,15 @@ #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