From: Yan, Zheng Date: Sat, 3 Jan 2015 07:29:29 +0000 (+0800) Subject: mount.ceph: avoid spurious error message X-Git-Tag: v0.92~79^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F3286%2Fhead;p=ceph.git mount.ceph: avoid spurious error message /etc/mtab in most modern distributions is a symbol link to /proc/self/mounts. Fixes: #10351 Signed-off-by: Yan, Zheng --- diff --git a/src/mount/mtab.c b/src/mount/mtab.c index 9b2c9237e16..d17f7a55f6c 100644 --- a/src/mount/mtab.c +++ b/src/mount/mtab.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ setlkw_timeout (int sig) { #define _PATH_MOUNTED "/etc/mtab" #define _PATH_MOUNTED_LOCK "/etc/mtab~" +#define PROC_SUPER_MAGIC 0x9fa0 /* exit status - bits below are ORed */ #define EX_USAGE 1 /* incorrect invocation or permission */ @@ -245,11 +247,21 @@ lock_mtab (void) { static void update_mtab_entry(const char *spec, const char *node, const char *type, const char *opts, int flags, int freq, int pass) { - struct mntent mnt; + struct statfs buf; + int err = statfs(_PATH_MOUNTED, &buf); + if (err) { + printf("mount: can't statfs %s: %s", _PATH_MOUNTED, + strerror (err)); + return; + } + /* /etc/mtab is symbol link to /proc/self/mounts? */ + if (buf.f_type == PROC_SUPER_MAGIC) + return; if (!opts) opts = "rw"; + struct mntent mnt; mnt.mnt_fsname = strdup(spec); mnt.mnt_dir = canonicalize_path(node); mnt.mnt_type = strdup(type);