]> err.no Git - util-linux/commitdiff
mount: update mtab correctly when mount --move
authorKarel Zak <kzak@redhat.com>
Thu, 12 Apr 2007 11:27:41 +0000 (13:27 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 24 Apr 2007 22:08:43 +0000 (00:08 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
mount/fstab.c
mount/mount.c

index bdcc7a674815d39f453468639d95081c93c30256..1e186c194545fea979c58b46d9a0a6919130a799 100644 (file)
@@ -638,9 +638,13 @@ update_mtab (const char *dir, struct my_mntent *instead) {
                                mc->nxt->prev = mc->prev;
                                free(mc);
                        }
-               } else {
+               } else if (!strcmp(mc->m.mnt_dir, instead->mnt_dir)) {
                        /* A remount */
                        mc->m.mnt_opts = instead->mnt_opts;
+               } else {
+                       /* A move */
+                       my_free(mc->m.mnt_dir);
+                       mc->m.mnt_dir = xstrdup(instead->mnt_dir);
                }
        } else if (instead) {
                /* not found, add a new entry */
index 63e6731352649a03ef34fea119b2d8accc0eb57b..1360d235dfeaf5cff8b4927c22937447b7c15525 100644 (file)
@@ -752,7 +752,7 @@ update_mtab_entry(const char *spec, const char *node, const char *type,
        mnt.mnt_opts = opts;
        mnt.mnt_freq = freq;
        mnt.mnt_passno = pass;
-      
+
        /* We get chatty now rather than after the update to mtab since the
           mount succeeded, even if the write to /etc/mtab should fail.  */
        if (verbose)
@@ -761,6 +761,8 @@ update_mtab_entry(const char *spec, const char *node, const char *type,
        if (!nomtab && mtab_is_writable()) {
                if (flags & MS_REMOUNT)
                        update_mtab (mnt.mnt_dir, &mnt);
+               else if (flags & MS_MOVE)
+                       update_mtab(mnt.mnt_fsname, &mnt);
                else {
                        mntFILE *mfp;