]> err.no Git - util-linux/commitdiff
mount: "can't create lock file" message sometimes means failure, sometimes not
authorMark McLoughlin <markmc@redhat.com>
Mon, 28 Jan 2008 13:30:29 +0000 (14:30 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 14 Feb 2008 13:28:19 +0000 (14:28 +0100)
What the patch does is goes from the situation where:

  1) If /etc/mtab doesn't exist and /etc is read-only, you get the
     "can't create lock file" message and the mount fails

  2) If /etc/mtab does exist and /etc is read-only,you get the same
     message but the mount succeeds

Clearly, the failure to update /etc/mtab should either cause the mount
to fail or not ... sometimes causing it to fail, and sometimes not
(each with the same message) is not useful.

This patch sets the same behaviour for create and update mtab. In both
cases it prints error message and the mount succeeds.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
mount/fstab.c
mount/fstab.h
mount/mount.c

index 03ddf4ec582323fee17a78c77860a5bacbd8b2b2..814e6fc0e3952580f0f4f050da8b51ff877418ad 100644 (file)
@@ -41,6 +41,11 @@ get_mtab_info(void) {
        }
 }
 
+void
+reset_mtab_info(void) {
+        have_mtab_info = 0;
+}
+
 int
 mtab_does_not_exist(void) {
        get_mtab_info();
index 75a34e31529799ff13529c52f2c9ae96fd8aa404..14b24c45e83d295be39487e07d6951ff6d2a1fb1 100644 (file)
@@ -4,6 +4,7 @@
 #include "mount_mntent.h"
 int mtab_is_writable(void);
 int mtab_does_not_exist(void);
+void reset_mtab_info(void);
 int is_mounted_once(const char *name);
 
 struct mntentchn {
index 41fe71d61e54a11624812e12e8c3ccb11f7cfb78..e6e733db4731a60f054c841948624b6ff67b2d5d 100644 (file)
@@ -562,6 +562,8 @@ create_mtab (void) {
        my_endmntent (mfp);
 
        unlock_mtab();
+
+       reset_mtab_info();
 }
 
 /* count successful mount system calls */
@@ -983,6 +985,13 @@ update_mtab_entry(const char *spec, const char *node, const char *type,
        if (verbose)
                print_one (&mnt);
 
+       if (!nomtab && mtab_does_not_exist()) {
+               if (verbose > 1)
+                       printf(_("mount: no %s found - creating it..\n"),
+                              MOUNTED);
+               create_mtab ();
+       }
+
        if (!nomtab && mtab_is_writable()) {
                if (flags & MS_REMOUNT)
                        update_mtab (mnt.mnt_dir, &mnt);
@@ -2017,13 +2026,6 @@ main(int argc, char *argv[]) {
                        die (EX_USAGE, _("mount: only root can do that"));
        }
 
-       if (!nomtab && mtab_does_not_exist()) {
-               if (verbose > 1)
-                       printf(_("mount: no %s found - creating it..\n"),
-                              _PATH_MOUNTED);
-               create_mtab ();
-       }
-
        atexit(unlock_mtab);
 
        switch (argc+specseen) {