My root file system is on a btrfs partition and I have created btrfs subvolumes in /chroot and /var/lib. The following behavior seems incorrect # btrfs subvolume list -o /chroot ID 593 gen 6616 top level 5 path chroot/base-devel/root ID 594 gen 6618 top level 5 path chroot/multilib-devel/root ID 595 gen 6620 top level 5 path chroot/base/root ID 597 gen 6624 top level 5 path chroot/twm/root ID 599 gen 6628 top level 5 path chroot/lxde/root ID 601 gen 6655 top level 5 path chroot/wheezy/root ID 602 gen 6684 top level 5 path chroot/sid/root ID 603 gen 6862 top level 5 path var/lib/machines The man page for btrfs subvolume says -o print only subvolumes below specified <path>. so I expected to only see the subvolumes below /chroot and to not see /var/lib/machines/. I am running Arch Linux with the 4.2.5 kernel and btrfs-progs v4.3.1.
I tested with kernel 4.2.0 and 4.3.0, using btrfs-progs v4.3.1: btrfs --version btrfs-progs v4.3.1 uname -r 4.3.0+ btrfs-progs/btrfs subvolume list /mnt ID 256 gen 6 top level 5 path root ID 258 gen 10 top level 5 path vol1 ID 259 gen 8 top level 5 path volX ID 260 gen 10 top level 258 path vol1/vol2 btrfs-progs/btrfs subvolume list /mnt/vol1 ID 256 gen 6 top level 5 path root ID 258 gen 10 top level 5 path vol1 ID 259 gen 8 top level 5 path volX ID 260 gen 10 top level 258 path vol2 btrfs-progs/btrfs subvolume list -o /mnt/vol1 ID 260 gen 10 top level 258 path vol1/vol2 As you can see, I created a subvolume vol1, and vol2 within vol1. And so, it shows correctly. Setting as invalid. Please reopen f you can reproduce the issue with a newer kernel/btrfs-progs (since 4.2 is a very older kernel to these days :) )
I just tried the experiment on an updated machine running Arch Linux with the 5.3.8 kernel and btrfs-progs 5.3.1 and get the same result I did 4 years ago # btrfs --version btrfs-progs v5.3.1 # uname -r 5.3.8-arch1-1 # btrfs subvolume list /chroot/ ID 2993 gen 203267 top level 5 path var/lib/portables ID 2994 gen 203268 top level 5 path var/lib/machines ID 2995 gen 238032 top level 5 path chroot/base-devel/root ID 2996 gen 203270 top level 2995 path chroot/base-devel/root/var/lib/portables ID 2997 gen 203271 top level 2995 path chroot/base-devel/root/var/lib/machines ID 2998 gen 203277 top level 5 path chroot/multilib-devel/root ID 2999 gen 203273 top level 2998 path chroot/multilib-devel/root/var/lib/portables ID 3000 gen 203274 top level 2998 path chroot/multilib-devel/root/var/lib/machines ID 3001 gen 203281 top level 5 path chroot/base/root ID 3002 gen 203278 top level 3001 path chroot/base/root/var/lib/portables ID 3003 gen 203279 top level 3001 path chroot/base/root/var/lib/machines ID 3004 gen 203286 top level 5 path chroot/twm/root ID 3005 gen 203283 top level 3004 path chroot/twm/root/var/lib/portables ID 3006 gen 203284 top level 3004 path chroot/twm/root/var/lib/machines ID 3007 gen 203291 top level 5 path chroot/lxde/root ID 3008 gen 203288 top level 3007 path chroot/lxde/root/var/lib/portables ID 3009 gen 203289 top level 3007 path chroot/lxde/root/var/lib/machines ID 3100 gen 238034 top level 5 path chroot/base-devel/dshub # btrfs subvolume list -o /chroot/ ID 2993 gen 203267 top level 5 path var/lib/portables ID 2994 gen 203268 top level 5 path var/lib/machines ID 2995 gen 238032 top level 5 path chroot/base-devel/root ID 2998 gen 203277 top level 5 path chroot/multilib-devel/root ID 3001 gen 203281 top level 5 path chroot/base/root ID 3004 gen 203286 top level 5 path chroot/twm/root ID 3007 gen 203291 top level 5 path chroot/lxde/root ID 3100 gen 238034 top level 5 path chroot/base-devel/dshub With the -o option I expect to see all the subvolumes with paths of /chroot and below and none of the subvolumes with paths that do not start with /chroot.