From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhijith Das Date: Fri, 22 Jul 2011 10:11:17 -0400 (EDT) Subject: [Cluster-devel] [PATCH] mount.gfs2 - gfs2 mounts doubled up in mtab In-Reply-To: <1311323753.2804.5.camel@menhir> Message-ID: <337807386.198839.1311343877819.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit ----- Original Message ----- > From: "Steven Whitehouse" > To: "Abhijith Das" > Cc: "cluster-devel" > Sent: Friday, July 22, 2011 3:35:53 AM > Subject: Re: [Cluster-devel] [PATCH] mount.gfs2 - gfs2 mounts doubled up in mtab > Hi, > > On Wed, 2011-07-20 at 16:10 -0400, Abhijith Das wrote: > > 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 > > + sscanf(line, "%s %s %s", device, path, type); > > This seems to remove the error checking for argument assignment from > sscanf, > > Steve. Hi, This was fixed before checking into gfs2-utils.git and cluster.git. Here's the patch that actually went in: Thanks! --Abhi Red Hat Filesystems diff --git a/gfs2/mount/mtab.c b/gfs2/mount/mtab.c index 148ff14..fbe5f63 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,13 +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)) { - found = 1; - continue; + if (sscanf(line, "%s %s %s", device, path, type) == 3) { + abs_path = realpath(path, NULL); + abs_dev = realpath(device, NULL); + if ((strcmp(type, "gfs2") == 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