From: Eric Sandeen <sandeen@sandeen.net>
To: Christoph Hellwig <hch@infradead.org>
Cc: Eric Sandeen <sandeen@redhat.com>, xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] xfsprogs: skip over "rootfs" entry if mtab links to /proc/mounts
Date: Thu, 04 Aug 2011 17:17:40 -0500 [thread overview]
Message-ID: <4E3B1A84.10708@sandeen.net> (raw)
In-Reply-To: <20110803190216.GA31421@infradead.org>
On 8/3/11 2:02 PM, Christoph Hellwig wrote:
> On Wed, Aug 03, 2011 at 01:41:59PM -0500, Eric Sandeen wrote:
>> This is for RH bug 727938, xfs_fsr regression for root file system
>>
>> Fedora has made /etc/mtab a symlink to /proc/mounts, but when
>> we issue "xfs_fsr /" and fsr's getmntany() goes looking for
>> the "/" entry, the first one it finds is
>>
>> rootfs / rootfs rw 0 0
>>
>> it says no way, that's a rootfs filesystem type, not xfs!
>> And it never finds this later:
>>
>> /dev/sda2 / xfs rw,relatime,attr2,noquota 0 0
>>
>> This patch to skip over the rootfs entry seems to fix it.
>
> I don't like this. rootfs is the symptom, but the underlying problem
> is that in Linux we're perfectly fine to have multiple filesystems
> mounted on a single mountpoint, and the getmntany can't deal with it.
>
> I think the right fix is to simply remove the break from the loop,
It's not quite that simple.
when we do
*mp = *t;
/* break; */
we are pointing the mp string pointers at the strings in the getmntent entry,
which will keep moving as we iterate. We'll need a strdup or something
to copy it out on each good find, with appropriate frees etc, I guess.
Is there a better way to do it? This seems pretty ugly.
memset(mp, 0, sizeof(struct mntent));
while ((t = getmntent(fp))) {
if (mpref->mnt_fsname) { /* device */
if (stat64(t->mnt_fsname, &ms) < 0)
continue;
if (s->st_rdev != ms.st_rdev)
continue;
}
if (mpref->mnt_dir) { /* mount point */
if (stat64(t->mnt_dir, &ms) < 0)
continue;
if (s->st_ino != ms.st_ino || s->st_dev != ms.st_dev)
continue;
}
/* This one matches */
found = 1;
free(mp->mnt_fsname);
free(mp->mnt_dir);
free(mp->mnt_type);
mp->mnt_fsname = strdup(t->mnt_fsname);
mp->mnt_dir = strdup(t->mnt_dir);
mp->mnt_type = strdup(t->mnt_type);
}
return (found);
(and then free the strings in the caller when we're done ...)
-Eric
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2011-08-04 22:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-03 18:41 [PATCH] xfsprogs: skip over "rootfs" entry if mtab links to /proc/mounts Eric Sandeen
2011-08-03 19:02 ` Christoph Hellwig
2011-08-03 19:12 ` Eric Sandeen
2011-08-04 22:17 ` Eric Sandeen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E3B1A84.10708@sandeen.net \
--to=sandeen@sandeen.net \
--cc=hch@infradead.org \
--cc=sandeen@redhat.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.