From: Chris Mason <chris.mason@fusionio.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: "Chris L. Mason" <clmason@fusionio.com>,
"linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>
Subject: Re: Subvolumes and /proc/self/mountinfo
Date: Wed, 20 Jun 2012 09:34:29 -0400 [thread overview]
Message-ID: <20120620133429.GD4102@shiny> (raw)
In-Reply-To: <4FE11365.3010802@zytor.com>
On Tue, Jun 19, 2012 at 06:03:49PM -0600, H. Peter Anvin wrote:
> On 06/19/2012 04:49 PM, Chris Mason wrote:
> > On Mon, Jun 18, 2012 at 06:39:31PM -0600, H. Peter Anvin wrote:
> >> I'm trying to figure out an algorithm from taking an arbitrary mounted
> >> btrfs directory and break it down into:
> >>
> >> <device(s), subvolume, subpath>
> >>
> >> where, keep in mind, <subpath> may not actually be part of the mount.
> >
> > Do you want an API for this, or is it enough to wander through /dev/disk
> > style symlinks?
> >
> > The big reason it isn't here yet is because Kay had this neat patch to
> > blkid and udev to just put all the info you need into /dev/btrfs (or
> > some other suitable location). It would allow you to see which devices
> > belong to which filesystems etc.
> >
>
> I want an algorithm, it doesn't have an API per se. I would really like
> to avoid relying on blkid and udev for this, though... that is pretty
> much a nonstarter.
>
> If the answer is to walk the tree then I'm fine with that.
Ok, fair enough.
>
> > subvolumes may become disconnected from the root namespace. In this
> > case we can find it just by the subvol id, and mount it into an
> > arbitrary directory.
>
> OK, so it sounds like the best thing is actually to record the subvolume
> *number* (ID) where (in my case) Syslinux is installed. This is actually
> a good thing because the fewer O(n) strings I have to stick into the
> boot block the better.
Right, the subvolume number doesn't change over the life of the subvol,
regardless of the path that was used for mounting the subvol. So all
you need is that number (64 bits) and the filename relative to the
subvol root and you're set.
We'll have to add an ioctl for that.
Finding the path relative to the subvol is easy, just walk backwards up
the directory chain (cd ..) until you get to inode number 256. All the
subvol roots have inode number 256.
>
> >> b. Are there better ways (walking the tree using BTRFS_IOC_TREE_SEARCH?)
> >> to accomplish this than using /proc/self/mountinfo?
> >
> > Not yet, but I'm definitely open to adding them. Lets just hash out
> > what you need and we'll either go through Kay's stuff or add ioctls for
> > you.
>
> Well, I'd be interested in what Kay's stuff actually does. Other than
> that, I would suggest adding a pair of ioctls that when executed on an
> arbitrary btrfs inode returns the corresponding subvolume and one which
> returns the path relative to the subvolume root.
udev already scans block devices as they appear. When it finds btrfs,
it calls the btrfs dev scan ioctl for that one device. It also reads in
the FS uuid and the device uuid and puts them into a tree.
Very simple stuff, but it gets rid of the need to manually call btrfs
dev scan yourself.
-chris
next prev parent reply other threads:[~2012-06-20 13:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-19 0:39 Subvolumes and /proc/self/mountinfo H. Peter Anvin
2012-06-19 14:22 ` Calvin Walton
2012-06-19 23:35 ` H. Peter Anvin
2012-06-20 1:27 ` Fajar A. Nugraha
2012-06-20 8:21 ` Hugo Mills
2012-06-19 23:49 ` Chris Mason
2012-06-20 0:03 ` H. Peter Anvin
2012-06-20 13:34 ` Chris Mason [this message]
2012-06-20 15:59 ` H. Peter Anvin
2012-06-20 0:39 ` Helmut Hullen
2012-06-20 1:16 ` cwillu
2012-06-20 3:22 ` H. Peter Anvin
2012-06-20 6:31 ` Fajar A. Nugraha
2012-06-20 23:43 ` H. Peter Anvin
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=20120620133429.GD4102@shiny \
--to=chris.mason@fusionio.com \
--cc=clmason@fusionio.com \
--cc=hpa@zytor.com \
--cc=linux-btrfs@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).