[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] [PATCH] 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 add the the remount entry.

Signed-off-by: Abhi Das <adas redhat com>
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 */

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]