Skip to content

Commit

Permalink
mtab: Use mount IDs instead of dev_t for bfs_fstype()
Browse files Browse the repository at this point in the history
This fixes -fstype on btrfs subvolumes, which previously reported
"unknown" due to their dev_t being potentially different from the mount
point.

Link: https://savannah.gnu.org/bugs/?50859
Link: https://lwn.net/Articles/866582/
  • Loading branch information
tavianator committed Feb 6, 2025
1 parent 5fee84b commit 0dccdae
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/mtab.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ static int bfs_mtab_fill_types(struct bfs_mtab *mtab) {
continue;
}

if (trie_set_mem(&mtab->types, &sb.dev, sizeof(sb.dev), mount->type) != 0) {
if (trie_set_mem(&mtab->types, &sb.mnt_id, sizeof(sb.mnt_id), mount->type) != 0) {
goto fail;
}
}
Expand All @@ -279,7 +279,7 @@ const char *bfs_fstype(const struct bfs_mtab *mtab, const struct bfs_stat *statb
}
}

const char *type = trie_get_mem(&mtab->types, &statbuf->dev, sizeof(statbuf->dev));
const char *type = trie_get_mem(&mtab->types, &statbuf->mnt_id, sizeof(statbuf->mnt_id));
if (type) {
return type;
} else {
Expand Down
4 changes: 4 additions & 0 deletions tests/gnu/fstype_btrfs_subvol.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
mnt
mnt/file
mnt/subvol
mnt/subvol/file
25 changes: 25 additions & 0 deletions tests/gnu/fstype_btrfs_subvol.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Test that -fstype works in btrfs subvolumes

command -v btrfs &>/dev/null || skip

cd "$TEST"

# Make a btrfs filesystem image
truncate -s128M img
mkfs.btrfs img >&2

# Mount it
mkdir mnt
bfs_sudo mount img mnt || skip
defer bfs_sudo umount mnt

# Make it owned by us
bfs_sudo chown "$(id -u):$(id -g)" mnt

# Create a subvolume inside it
btrfs subvolume create mnt/subvol >&2

# Make a file in and outside the subvolume
"$XTOUCH" mnt/file mnt/subvol/file

bfs_diff mnt -fstype btrfs -print -o -printf '%p %F\n'

0 comments on commit 0dccdae

Please sign in to comment.