Bug 66702

Summary: g_udev_client_query_by_device_number fails on disks with subvolumes
Product: systemd Reporter: Jussi Pakkanen <jpakkane>
Component: generalAssignee: systemd-bugs
Status: RESOLVED NOTABUG QA Contact: systemd-bugs
Severity: normal    
Priority: medium    
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: Source code to demonstrate the issue

Description Jussi Pakkanen 2013-07-08 14:48:43 UTC
Created attachment 82191 [details]
Source code to demonstrate the issue

Sorry if this bug is filed in the wrong place. Information on GUdev is sparse and as far as I can tell, systemd is the upstream.

Anyway, the g_udev_client_query_by_device_number function fails on directories that are in subvolumes. An example is a btrfs file system with two subvolumes, @ (mounted as root) and @home (mounted as /home). This also happens when using encrypted home directories.

Having a subvolume might not be the real reason it fails, but that is what seems to be triggering the issue.

To replicate, download the attached source code. Compile it with "gcc -Wall -o idnum idnum.c `pkg-config --cflags --libs glib-2.0 gio-2.0 gudev-1.0`".

When run on a plain ext4 volume, the output is this:

./idnum
Device id is 2065.

Whereas on btrfs the output is this:

./idnum
Device id is 25.
Could not get device from num.

Originally filed here: https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1197796
Comment 1 Kay Sievers 2013-07-08 20:48:00 UTC
Btrfs volumes are like NFS or tmpfs, a superblock without any associated
device. The behavior is expected and intentional.

Btrfs volumes might be constructed of many volumes, there cannot be the
concept of *that* device, like the "dumb" filesystems use.

There is no way for the udev API to find out which device is behind
a btrfs volume. Btrfs specific command need to be used to determine that,
no generic interface exists for that task.
Comment 2 Jussi Pakkanen 2013-07-09 07:28:01 UTC
Would it be possible for you to add a comment to the reference documentation about this so other people don't have to spend time with this issue? The page on GUdevClient does not mention subvolumes.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.