linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Calvin Walton <calvin.walton@kepstin.ca>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: Subvolumes and /proc/self/mountinfo
Date: Tue, 19 Jun 2012 10:22:46 -0400	[thread overview]
Message-ID: <1340115766.3403.19.camel@cwalton-XPS-8300> (raw)
In-Reply-To: <4FDFCA43.2070407@zytor.com>

On Mon, 2012-06-18 at 17:39 -0700, 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.
> 
> /proc/self/mountinfo seems to have some of that information, however, it
> does not appear to distinguish between non-default subvolumes and
> directories.  At the same time, once I have mounted a subvolume I see
> its name in the root btrfs directory even if I didn't access it.
> 
> Questions, thus:
> 
> a. Are subvolumes always part of the "root" namespace?

Yes. There is only one namespace in btrfs that all files, directories,
and subvolumes are contained in.

> If so, is it the
> mounted root, the default subvolume, or subvolume 0 which always exposes
> these other subvolumes?

All subvolumes are accessible from the volume mounted when you use -o
subvolid=0. (Note that 0 is not the real ID of the root volume, it's
just a shortcut for mounting it.)

The 'default' subvolume can be arbitrarily changed to any subvolume by a
user; the result is equivalent to having a file-system default
'subvolid=' value that's used when none is specified by the user.

> Are there disambiguation rules so that if I
> have /btrfs/root/blah and "blah" is both a subvolume and a directory (I
> presume that can happen?)

This cannot happen; see my first answer.

> b. Are there better ways (walking the tree using BTRFS_IOC_TREE_SEARCH?)
> to accomplish this than using /proc/self/mountinfo?

I'm not sure; you might want to look into how the 
  btrfs subvolume list <path>
tool reads the list of subvolumes. (Note that this tool lists the
subvolume paths relative to the root, and the <path> parameter is only
used to determine which btrfs filesystem you're looking at.)

Unless it has changed recently, mounting a subvolume by path on btrfs is
(almost) the same as mounting the root volume, then doing a bind mount
like "mount --bind /mnt/subvolume/path /mnt". This used to not even
bother checking if you were attempting to mount a directory or
subvolume.

-- 
Calvin Walton <calvin.walton@kepstin.ca>


  reply	other threads:[~2012-06-19 14:22 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 [this message]
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
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=1340115766.3403.19.camel@cwalton-XPS-8300 \
    --to=calvin.walton@kepstin.ca \
    --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).