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.wal...@kepstin.ca> -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html