From: J. Bruce Fields on
On Wed, Jul 07, 2010 at 12:57:26PM +1000, Neil Brown wrote:
> The trouble with /proc/mounts is that it is somewhat clumsy to parse
> (remember to handle \0ctal escapes) and doesn't include major/minor number
> which is the primary key for identifying filesystems in Linux
> (see /sys/class/bdi/MAJOR:MINOR which is e.g. the best place to configure
> read-ahead for a filesystem).
>
> So /proc/mounts could work (and would probably be better than a new syscall)
> but I would really rather see something sane in /sys for
> inspecting/configuring filesystems (rather than each filesystem doing their
> own independent thing in /sys/fs).

If you use sys or proc, is it possible to get the uuid from a file
descriptor or pathname without races?

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: J. Bruce Fields on
On Wed, Jul 07, 2010 at 03:10:21PM +0200, Miklos Szeredi wrote:
> On Wed, 7 Jul 2010, J. Bruce Fields wrote:
> > On Wed, Jul 07, 2010 at 12:57:26PM +1000, Neil Brown wrote:
> > > The trouble with /proc/mounts is that it is somewhat clumsy to parse
> > > (remember to handle \0ctal escapes) and doesn't include major/minor number
> > > which is the primary key for identifying filesystems in Linux
> > > (see /sys/class/bdi/MAJOR:MINOR which is e.g. the best place to configure
> > > read-ahead for a filesystem).
> > >
> > > So /proc/mounts could work (and would probably be better than a new syscall)
> > > but I would really rather see something sane in /sys for
> > > inspecting/configuring filesystems (rather than each filesystem doing their
> > > own independent thing in /sys/fs).
> >
> > If you use sys or proc, is it possible to get the uuid from a file
> > descriptor or pathname without races?
>
> You can do stat/fstat to find out the device number (which is unique,
> but not persistent)

Is it really unique over time? (Can't a given st_dev value map to one
filesystem now, and another later?) And it must also have the same
problems as libblkid (e.g. btrfs subvolumes share the same st_dev).

--b.

> then look for the major:minor calculated from
> st_dev in /proc/self/mountinfo.
>
> Thanks,
> Miklos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Miklos Szeredi on
On Wed, 7 Jul 2010, J. Bruce Fields wrote:
> On Wed, Jul 07, 2010 at 12:57:26PM +1000, Neil Brown wrote:
> > The trouble with /proc/mounts is that it is somewhat clumsy to parse
> > (remember to handle \0ctal escapes) and doesn't include major/minor number
> > which is the primary key for identifying filesystems in Linux
> > (see /sys/class/bdi/MAJOR:MINOR which is e.g. the best place to configure
> > read-ahead for a filesystem).
> >
> > So /proc/mounts could work (and would probably be better than a new syscall)
> > but I would really rather see something sane in /sys for
> > inspecting/configuring filesystems (rather than each filesystem doing their
> > own independent thing in /sys/fs).
>
> If you use sys or proc, is it possible to get the uuid from a file
> descriptor or pathname without races?

You can do stat/fstat to find out the device number (which is unique,
but not persistent) then look for the major:minor calculated from
st_dev in /proc/self/mountinfo.

Thanks,
Miklos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Miklos Szeredi on
On Wed, 7 Jul 2010, J. Bruce Fields wrote:
> > > If you use sys or proc, is it possible to get the uuid from a file
> > > descriptor or pathname without races?
> >
> > You can do stat/fstat to find out the device number (which is unique,
> > but not persistent)
>
> Is it really unique over time? (Can't a given st_dev value map to one
> filesystem now, and another later?)

It's unique at a single point in time. But if you have a reference
(e.g. open file descriptor) on the mount then that's not a problem.

fd = open(path, ...);
fstat(fd, &st);
search st.st_dev in mountinfo
close(fd)

is effectively the same as an getuuid(path) syscall (lazy unmounted
filesystems will not be found in mountinfo, but the reference is still
there so st_dev will not be reused for other filesystems).

Thanks,
Miklos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: J. Bruce Fields on
On Wed, Jul 07, 2010 at 03:35:50PM +0200, Miklos Szeredi wrote:
> On Wed, 7 Jul 2010, J. Bruce Fields wrote:
> > > > If you use sys or proc, is it possible to get the uuid from a file
> > > > descriptor or pathname without races?
> > >
> > > You can do stat/fstat to find out the device number (which is unique,
> > > but not persistent)
> >
> > Is it really unique over time? (Can't a given st_dev value map to one
> > filesystem now, and another later?)
>
> It's unique at a single point in time. But if you have a reference
> (e.g. open file descriptor) on the mount then that's not a problem.
>
> fd = open(path, ...);
> fstat(fd, &st);
> search st.st_dev in mountinfo
> close(fd)
>
> is effectively the same as an getuuid(path) syscall (lazy unmounted
> filesystems will not be found in mountinfo, but the reference is still
> there so st_dev will not be reused for other filesystems).

OK, cool.

That still leaves the problem that there isn't always an underlying
block device, and/or when there is it doesn't always uniquely specify
the filesystem.

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/