Bug 109861 - btrfs subvolume list -o does not behave as expected
Summary: btrfs subvolume list -o does not behave as expected
Status: REOPENED
Alias: None
Product: File System
Classification: Unclassified
Component: btrfs (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: Josef Bacik
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-12-23 19:22 UTC by daniel.e.shub
Modified: 2019-11-13 15:26 UTC (History)
2 users (show)

See Also:
Kernel Version: 4.2.5
Tree: Mainline
Regression: No


Attachments

Description daniel.e.shub 2015-12-23 19:22:36 UTC
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.
Comment 1 Marcos Souza 2019-11-13 02:33:35 UTC
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 :) )
Comment 2 daniel.e.shub 2019-11-13 15:26:29 UTC
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.

Note You need to log in before you can comment on or make changes to this bug.