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
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.
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.