gfs2-utils: master - mount.gfs2 - gfs2 mounts doubled up in mtab

Abhijith Das adas at fedoraproject.org
Thu Jul 21 18:49:44 UTC 2011


Gitweb:        http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdiff;h=b212f8cde707fc2cd716f271fc62350803c195c8
Commit:        b212f8cde707fc2cd716f271fc62350803c195c8
Parent:        a830c8747cf7dcc899dc92ad13c3a3b1a3738092
Author:        Abhijith Das <adas at radium.msp.redhat.com>
AuthorDate:    Thu Jul 21 13:44:44 2011 -0500
Committer:     Abhijith Das <adas at radium.msp.redhat.com>
CommitterDate: Thu Jul 21 13:44:44 2011 -0500

mount.gfs2 - gfs2 mounts doubled up in mtab

When the -o remount option is used with mount.gfs2 it fails to
remove the original mtab entry because it can't find it. Instead
it simply adds the mount entry corresponding to the remount,
thereby doubling the entries in mtab. This patch corrects the
logic to find the mtab entry so mount.gfs2 finds and removes
the original entry correctly before adding the remount entry.

Resolves: rhbz#706141
Signed-off-by: Abhi Das <adas at redhat.com>
---
 gfs2/mount/mtab.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/gfs2/mount/mtab.c b/gfs2/mount/mtab.c
index 148ff14..a9804d8 100644
--- a/gfs2/mount/mtab.c
+++ b/gfs2/mount/mtab.c
@@ -120,6 +120,7 @@ void del_mtab_entry(struct mount_options *mo)
 	mode_t old_umask;
 	struct stat sbuf;
 	int found = 0;
+	char *abs_path, *abs_dev;
 
 	if (ignore_mtab())
 		return;
@@ -139,14 +140,19 @@ void del_mtab_entry(struct mount_options *mo)
 	while (fgets(line, PATH_MAX, mtab)) {
 		/* exclude the line matching the fs being unmounted
 		   from the next version of mtab */
-
-		if ((sscanf(line, "%s %s %s", device, path, type) == 3) &&
-		    (strncmp(type, "gfs", 3) == 0) &&
-		    (strcmp(path, mo->dir) == 0) &&
-		    (strcmp(device, mo->dev) == 0)) {
+		sscanf(line, "%s %s %s", device, path, type);
+		abs_path = realpath(path, NULL);
+		abs_dev = realpath(device, NULL);
+		if ((strncmp(type, "gfs", 3) == 0) &&
+		    (strcmp(abs_path, mo->dir) == 0) &&
+		    (strcmp(abs_dev, mo->dev) == 0)) {
 			found = 1;
+			free(abs_path);
+			free(abs_dev);
 			continue;
 		}
+		free(abs_path);
+		free(abs_dev);
 
 		/* all other lines from mtab are included in
 		   the next version of mtab */


More information about the cluster-commits mailing list