]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mount.ceph: avoid spurious error message 4030/head
authorYan, Zheng <zyan@redhat.com>
Sat, 3 Jan 2015 07:29:29 +0000 (15:29 +0800)
committerLoic Dachary <ldachary@redhat.com>
Tue, 17 Mar 2015 10:14:04 +0000 (11:14 +0100)
/etc/mtab in most modern distributions is a symbol link to
/proc/self/mounts.

Fixes: #10351
Signed-off-by: Yan, Zheng <zyan@redhat.com>
(cherry picked from commit bdd0e3c4bda97fe18487a58dd173a7dff752e1a2)

src/mount/mtab.c

index 9b2c9237e1645079f83793e01a54ccfdebc274a4..d17f7a55f6cd8819f9adb97098ce94e8840b6808 100644 (file)
@@ -18,6 +18,7 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
+#include <sys/vfs.h>
 #include <time.h>
 #include <mntent.h>
 #include <stdarg.h>
@@ -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);