* Re: Using /proc/mounts in mountlist.c for linux
[not found] ` <BANLkTin=pcsJ-b2y=GN3BpXsx8p+zgnJWA@mail.gmail.com>
@ 2011-05-31 9:31 ` Pádraig Brady
2011-05-31 9:42 ` James Youngman
2011-05-31 11:10 ` Karel Zak
0 siblings, 2 replies; 5+ messages in thread
From: Pádraig Brady @ 2011-05-31 9:31 UTC (permalink / raw)
To: James Youngman; +Cc: Philipp Thomas, bug-gnulib, util-linux
On 31/05/11 01:14, James Youngman wrote:
> On Tue, Apr 5, 2011 at 1:36 PM, Philipp Thomas <pth@suse.de> wrote:
>> GNU find will not recognize file systems of type autofs on newer Linux
>> kernels as autofs entries are only listed in /proc/mounts and mountlist.c
>> includes glibc mntent.h which takes the _PATH_MOUNTED from paths.h and that
>> is /etc/mtab.
>>
>> After a longer discussion, we (SUSE) chose to patch mountlist.c in findutils
>> to use proc/mounts instead of /etc/mtab which fixed ou problem.
>>
>> Would gnulib accept the attached patch to mountlist.c?
>
> I don't know if this patch was accepted, but it shouldn't be. The
> problem is that /proc/mounts has incomplete data for /. This will
> break gnulib's mountlist, at least with the current form of the patch,
> because mountlist will have an incorrect idea of the type of the root
> filesystem. Here's an example showing the problem:
>
> ~$ cat tryit.sh
> #! /bin/sh
> f() {
> echo "$1"
> ( ls -l /etc/mtab; find / -maxdepth 0 -printf '%p %F\n' ) |
> sed -e 's_^_ _'
> }
>
> set -e
> cd /etc
> f "regular /etc/mtab"
>
> mv mtab mtab.old; ln -s ../proc/mounts mtab
> f "with /proc/mounts"
> rm mtab; mv mtab.old mtab
> ~$ sudo sh tryit.sh
> regular /etc/mtab
> -rw-r--r-- 1 root root 1869 May 30 23:53 /etc/mtab
> / ext3
> with /proc/mounts
> lrwxrwxrwx 1 root root 14 May 31 01:12 /etc/mtab -> ../proc/mounts
> / rootfs
Well I didn't merge it, but for more generic reasons.
It seemed like a bit of a layering violation to me,
and I was unsure that other users of gnulib may need
access to /etc/mtab specific stuff (on older systems).
Here is related output on my Fedora 15 system
which does link /etc/mtab -> /proc/mounts
$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb2 13102208 3210896 9758244 25% /
$ df -t rootfs
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 13102208 3210896 9758244 25% /
$ find / -maxdepth 0 -printf "%p %F\n"
/ rootfs
cheers,
Pádraig.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Using /proc/mounts in mountlist.c for linux
2011-05-31 9:31 ` Using /proc/mounts in mountlist.c for linux Pádraig Brady
@ 2011-05-31 9:42 ` James Youngman
2011-05-31 11:10 ` Karel Zak
1 sibling, 0 replies; 5+ messages in thread
From: James Youngman @ 2011-05-31 9:42 UTC (permalink / raw)
To: Pádraig Brady; +Cc: Philipp Thomas, bug-gnulib, util-linux
2011/5/31 Pádraig Brady <P@draigbrady.com>:
> On 31/05/11 01:14, James Youngman wrote:
>> On Tue, Apr 5, 2011 at 1:36 PM, Philipp Thomas <pth@suse.de> wrote:
>>> GNU find will not recognize file systems of type autofs on newer Linux
>>> kernels as autofs entries are only listed in /proc/mounts and mountlist.c
>>> includes glibc mntent.h which takes the _PATH_MOUNTED from paths.h and that
>>> is /etc/mtab.
>>>
>>> After a longer discussion, we (SUSE) chose to patch mountlist.c in findutils
>>> to use proc/mounts instead of /etc/mtab which fixed ou problem.
>>>
>>> Would gnulib accept the attached patch to mountlist.c?
>>
>> I don't know if this patch was accepted, but it shouldn't be. The
>> problem is that /proc/mounts has incomplete data for /. This will
>> break gnulib's mountlist, at least with the current form of the patch,
>> because mountlist will have an incorrect idea of the type of the root
>> filesystem. Here's an example showing the problem:
>>
>> ~$ cat tryit.sh
>> #! /bin/sh
>> f() {
>> echo "$1"
>> ( ls -l /etc/mtab; find / -maxdepth 0 -printf '%p %F\n' ) |
>> sed -e 's_^_ _'
>> }
>>
>> set -e
>> cd /etc
>> f "regular /etc/mtab"
>>
>> mv mtab mtab.old; ln -s ../proc/mounts mtab
>> f "with /proc/mounts"
>> rm mtab; mv mtab.old mtab
>> ~$ sudo sh tryit.sh
>> regular /etc/mtab
>> -rw-r--r-- 1 root root 1869 May 30 23:53 /etc/mtab
>> / ext3
>> with /proc/mounts
>> lrwxrwxrwx 1 root root 14 May 31 01:12 /etc/mtab -> ../proc/mounts
>> / rootfs
>
> Well I didn't merge it, but for more generic reasons.
> It seemed like a bit of a layering violation to me,
> and I was unsure that other users of gnulib may need
> access to /etc/mtab specific stuff (on older systems).
>
> Here is related output on my Fedora 15 system
> which does link /etc/mtab -> /proc/mounts
>
> $ df /
> Filesystem 1K-blocks Used Available Use% Mounted on
> /dev/sdb2 13102208 3210896 9758244 25% /
> $ df -t rootfs
> Filesystem 1K-blocks Used Available Use% Mounted on
> rootfs 13102208 3210896 9758244 25% /
> $ find / -maxdepth 0 -printf "%p %F\n"
> / rootfs
Thanks for the additional info. I think that would be a bug in
Fedora 15, then.
James.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Using /proc/mounts in mountlist.c for linux
2011-05-31 9:31 ` Using /proc/mounts in mountlist.c for linux Pádraig Brady
2011-05-31 9:42 ` James Youngman
@ 2011-05-31 11:10 ` Karel Zak
2011-05-31 23:28 ` James Youngman
1 sibling, 1 reply; 5+ messages in thread
From: Karel Zak @ 2011-05-31 11:10 UTC (permalink / raw)
To: Pádraig Brady; +Cc: James Youngman, Philipp Thomas, bug-gnulib, util-linux
On Tue, May 31, 2011 at 10:31:17AM +0100, Pádraig Brady wrote:
> On 31/05/11 01:14, James Youngman wrote:
> > On Tue, Apr 5, 2011 at 1:36 PM, Philipp Thomas <pth@suse.de> wrote:
> >> GNU find will not recognize file systems of type autofs on newer Linux
> >> kernels as autofs entries are only listed in /proc/mounts and mountlist.c
> >> includes glibc mntent.h which takes the _PATH_MOUNTED from paths.h and that
> >> is /etc/mtab.
> >>
> >> After a longer discussion, we (SUSE) chose to patch mountlist.c in findutils
> >> to use proc/mounts instead of /etc/mtab which fixed ou problem.
> >>
> >> Would gnulib accept the attached patch to mountlist.c?
> >
> > I don't know if this patch was accepted, but it shouldn't be. The
> > problem is that /proc/mounts has incomplete data for /. This will
> > break gnulib's mountlist, at least with the current form of the patch,
> > because mountlist will have an incorrect idea of the type of the root
> > filesystem. Here's an example showing the problem:
> >
> > ~$ cat tryit.sh
> > #! /bin/sh
> > f() {
> > echo "$1"
> > ( ls -l /etc/mtab; find / -maxdepth 0 -printf '%p %F\n' ) |
> > sed -e 's_^_ _'
> > }
> >
> > set -e
> > cd /etc
> > f "regular /etc/mtab"
> >
> > mv mtab mtab.old; ln -s ../proc/mounts mtab
> > f "with /proc/mounts"
> > rm mtab; mv mtab.old mtab
> > ~$ sudo sh tryit.sh
> > regular /etc/mtab
> > -rw-r--r-- 1 root root 1869 May 30 23:53 /etc/mtab
> > / ext3
> > with /proc/mounts
> > lrwxrwxrwx 1 root root 14 May 31 01:12 /etc/mtab -> ../proc/mounts
> > / rootfs
That's strange, why for "/" it does not search in the file (mtab) in reverse
order?
example A)
# mount -t ext3 /dev/sda6 /mnt/test
# mount -t ext4 /dev/mapper/kzak-home /mnt/test
... so I have two entries for the same mountpoint:
# grep /mnt/test /proc/mounts
/dev/sda6 /mnt/test ext3 rw,relatime,errors=continue,barrier=0,data=ordered 0 0
/dev/mapper/kzak-home /mnt/test ext4 rw,relatime,barrier=1,data=ordered 0 0
this is correct (ext4 is the second entry):
# find /mnt/test -maxdepth 0 -printf '%p %F\n'
/mnt/test ext4
example B)
the same thing with root FS:
# grep -E '(/dev/sda4|rootfs)' /proc/mounts
rootfs / rootfs rw 0 0
/dev/sda4 / ext3 rw,noatime,errors=continue,user_xattr,acl,barrier=0,data=ordered 0 0
... so I have two entries for the same mountpoint:
# find / -maxdepth 0 -printf '%p %F\n'
/ rootfs
why does it return the first entry? It seems like obvious bug. You
have to read entries in the mtab file in reverse order.
Anyway, /proc/self/mountinfo is definitely more sexy... :-)
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Using /proc/mounts in mountlist.c for linux
2011-05-31 11:10 ` Karel Zak
@ 2011-05-31 23:28 ` James Youngman
2011-06-01 7:56 ` Karel Zak
0 siblings, 1 reply; 5+ messages in thread
From: James Youngman @ 2011-05-31 23:28 UTC (permalink / raw)
To: Karel Zak; +Cc: Pádraig Brady, Philipp Thomas, bug-gnulib, util-linux
2011/5/31 Karel Zak <kzak@redhat.com>:
> On Tue, May 31, 2011 at 10:31:17AM +0100, Pádraig Brady wrote:
>> On 31/05/11 01:14, James Youngman wrote:
>> > On Tue, Apr 5, 2011 at 1:36 PM, Philipp Thomas <pth@suse.de> wrote:
>> >> GNU find will not recognize file systems of type autofs on newer Linux
>> >> kernels as autofs entries are only listed in /proc/mounts and mountlist.c
>> >> includes glibc mntent.h which takes the _PATH_MOUNTED from paths.h and that
>> >> is /etc/mtab.
>> >>
>> >> After a longer discussion, we (SUSE) chose to patch mountlist.c in findutils
>> >> to use proc/mounts instead of /etc/mtab which fixed ou problem.
>> >>
>> >> Would gnulib accept the attached patch to mountlist.c?
>> >
>> > I don't know if this patch was accepted, but it shouldn't be. The
>> > problem is that /proc/mounts has incomplete data for /. This will
>> > break gnulib's mountlist, at least with the current form of the patch,
>> > because mountlist will have an incorrect idea of the type of the root
>> > filesystem. Here's an example showing the problem:
>> >
>> > ~$ cat tryit.sh
>> > #! /bin/sh
>> > f() {
>> > echo "$1"
>> > ( ls -l /etc/mtab; find / -maxdepth 0 -printf '%p %F\n' ) |
>> > sed -e 's_^_ _'
>> > }
>> >
>> > set -e
>> > cd /etc
>> > f "regular /etc/mtab"
>> >
>> > mv mtab mtab.old; ln -s ../proc/mounts mtab
>> > f "with /proc/mounts"
>> > rm mtab; mv mtab.old mtab
>> > ~$ sudo sh tryit.sh
>> > regular /etc/mtab
>> > -rw-r--r-- 1 root root 1869 May 30 23:53 /etc/mtab
>> > / ext3
>> > with /proc/mounts
>> > lrwxrwxrwx 1 root root 14 May 31 01:12 /etc/mtab -> ../proc/mounts
>> > / rootfs
>
>
> That's strange, why for "/" it does not search in the file (mtab) in reverse
> order?
>
> example A)
>
> # mount -t ext3 /dev/sda6 /mnt/test
> # mount -t ext4 /dev/mapper/kzak-home /mnt/test
>
> ... so I have two entries for the same mountpoint:
>
> # grep /mnt/test /proc/mounts
> /dev/sda6 /mnt/test ext3 rw,relatime,errors=continue,barrier=0,data=ordered 0 0
> /dev/mapper/kzak-home /mnt/test ext4 rw,relatime,barrier=1,data=ordered 0 0
>
>
> this is correct (ext4 is the second entry):
>
> # find /mnt/test -maxdepth 0 -printf '%p %F\n'
> /mnt/test ext4
>
>
> example B)
>
> the same thing with root FS:
>
> # grep -E '(/dev/sda4|rootfs)' /proc/mounts
> rootfs / rootfs rw 0 0
> /dev/sda4 / ext3 rw,noatime,errors=continue,user_xattr,acl,barrier=0,data=ordered 0 0
>
> ... so I have two entries for the same mountpoint:
>
>
> # find / -maxdepth 0 -printf '%p %F\n'
> / rootfs
>
> why does it return the first entry? It seems like obvious bug. You
> have to read entries in the mtab file in reverse order.
I find this claim most surprising, since getmntent is intended for use
on both /etc/mtab and /etc/fstab and it reads them forwards. As a
system administrator, I would consider it a bug for there to be a
duplicate entry in /etc/mtab, and if as a sysadmin I had actually
somehow put two similar entries into /etc/fstab, I'd expect mount(8)
to use the first match (and mount -a to use all matches).
> Anyway, /proc/self/mountinfo is definitely more sexy... :-)
>
> Karel
>
> --
> Karel Zak <kzak@redhat.com>
> http://karelzak.blogspot.com
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Using /proc/mounts in mountlist.c for linux
2011-05-31 23:28 ` James Youngman
@ 2011-06-01 7:56 ` Karel Zak
0 siblings, 0 replies; 5+ messages in thread
From: Karel Zak @ 2011-06-01 7:56 UTC (permalink / raw)
To: James Youngman; +Cc: Pádraig Brady, Philipp Thomas, bug-gnulib, util-linux
On Wed, Jun 01, 2011 at 12:28:46AM +0100, James Youngman wrote:
> 2011/5/31 Karel Zak <kzak@redhat.com>:
> > On Tue, May 31, 2011 at 10:31:17AM +0100, Pádraig Brady wrote:
> >> On 31/05/11 01:14, James Youngman wrote:
> >> > On Tue, Apr 5, 2011 at 1:36 PM, Philipp Thomas <pth@suse.de> wrote:
> >> >> GNU find will not recognize file systems of type autofs on newer Linux
> >> >> kernels as autofs entries are only listed in /proc/mounts and mountlist.c
> >> >> includes glibc mntent.h which takes the _PATH_MOUNTED from paths.h and that
> >> >> is /etc/mtab.
> >> >>
> >> >> After a longer discussion, we (SUSE) chose to patch mountlist.c in findutils
> >> >> to use proc/mounts instead of /etc/mtab which fixed ou problem.
> >> >>
> >> >> Would gnulib accept the attached patch to mountlist.c?
> >> >
> >> > I don't know if this patch was accepted, but it shouldn't be. The
> >> > problem is that /proc/mounts has incomplete data for /. This will
> >> > break gnulib's mountlist, at least with the current form of the patch,
> >> > because mountlist will have an incorrect idea of the type of the root
> >> > filesystem. Here's an example showing the problem:
> >> >
> >> > ~$ cat tryit.sh
> >> > #! /bin/sh
> >> > f() {
> >> > echo "$1"
> >> > ( ls -l /etc/mtab; find / -maxdepth 0 -printf '%p %F\n' ) |
> >> > sed -e 's_^_ _'
> >> > }
> >> >
> >> > set -e
> >> > cd /etc
> >> > f "regular /etc/mtab"
> >> >
> >> > mv mtab mtab.old; ln -s ../proc/mounts mtab
> >> > f "with /proc/mounts"
> >> > rm mtab; mv mtab.old mtab
> >> > ~$ sudo sh tryit.sh
> >> > regular /etc/mtab
> >> > -rw-r--r-- 1 root root 1869 May 30 23:53 /etc/mtab
> >> > / ext3
> >> > with /proc/mounts
> >> > lrwxrwxrwx 1 root root 14 May 31 01:12 /etc/mtab -> ../proc/mounts
> >> > / rootfs
> >
> >
> > That's strange, why for "/" it does not search in the file (mtab) in reverse
> > order?
> >
> > example A)
> >
> > # mount -t ext3 /dev/sda6 /mnt/test
> > # mount -t ext4 /dev/mapper/kzak-home /mnt/test
> >
> > ... so I have two entries for the same mountpoint:
> >
> > # grep /mnt/test /proc/mounts
> > /dev/sda6 /mnt/test ext3 rw,relatime,errors=continue,barrier=0,data=ordered 0 0
> > /dev/mapper/kzak-home /mnt/test ext4 rw,relatime,barrier=1,data=ordered 0 0
> >
> >
> > this is correct (ext4 is the second entry):
> >
> > # find /mnt/test -maxdepth 0 -printf '%p %F\n'
> > /mnt/test ext4
> >
> >
> > example B)
> >
> > the same thing with root FS:
> >
> > # grep -E '(/dev/sda4|rootfs)' /proc/mounts
> > rootfs / rootfs rw 0 0
> > /dev/sda4 / ext3 rw,noatime,errors=continue,user_xattr,acl,barrier=0,data=ordered 0 0
> >
> > ... so I have two entries for the same mountpoint:
> >
> >
> > # find / -maxdepth 0 -printf '%p %F\n'
> > / rootfs
> >
> > why does it return the first entry? It seems like obvious bug. You
> > have to read entries in the mtab file in reverse order.
>
> I find this claim most surprising, since getmntent is intended for use
> on both /etc/mtab and /etc/fstab and it reads them forwards. As a
> system administrator, I would consider it a bug for there to be a
> duplicate entry in /etc/mtab, and if as a sysadmin I had actually
/dev/sda1 /foo ext2 defaults
/dev/sda2 /foo ext3 defaults
there is nothing duplicated, this maybe unusual, but valid setup
> somehow put two similar entries into /etc/fstab,
Don't care about fstab, you can mount whatever manually and I think
that basic system tools should be able to follow VFS.
> I'd expect mount(8)
> to use the first match (and mount -a to use all matches).
We are not talking about fstab, but about list of already mounted
filesystem. The order is important, because you can mount more
filesystems on the same mountpoint. The visible filesystem is the
filesystem on the top of the hierarchy.
And yes, "mount [-a]" reads fstab in normal order (forward), but when
mount(8) or umount(8) work with lists of the mounted filesystes (e.g.
/etc/mtab, /proc/mounts, /proc/self/mountinfo ) then we use reverse order.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-06-01 7:56 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20110405123650.GW22289@paradies.suse.de>
[not found] ` <BANLkTin=pcsJ-b2y=GN3BpXsx8p+zgnJWA@mail.gmail.com>
2011-05-31 9:31 ` Using /proc/mounts in mountlist.c for linux Pádraig Brady
2011-05-31 9:42 ` James Youngman
2011-05-31 11:10 ` Karel Zak
2011-05-31 23:28 ` James Youngman
2011-06-01 7:56 ` Karel Zak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox