From: Kent Overstreet Date: Tue, 24 Dec 2024 10:16:56 +0000 (-0500) Subject: bcachefs: bch2_inum_path() now crosses subvolumes correctly X-Git-Tag: v6.14-rc1~204^2~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bdedae70f51f570381095a59740d6a9df1262668;p=thirdparty%2Fkernel%2Flinux.git bcachefs: bch2_inum_path() now crosses subvolumes correctly The dirent that points to a subvolume root is in the parent subvolume. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/fs-common.c b/fs/bcachefs/fs-common.c index 63619318c64a9..2c3d46ac70c61 100644 --- a/fs/bcachefs/fs-common.c +++ b/fs/bcachefs/fs-common.c @@ -608,6 +608,9 @@ int bch2_inum_to_path(struct btree_trans *trans, subvol_inum inum, struct printb goto disconnected; } + inum.subvol = inode.bi_parent_subvol ?: inum.subvol; + inum.inum = inode.bi_dir; + u32 snapshot; ret = bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot); if (ret) @@ -626,10 +629,6 @@ int bch2_inum_to_path(struct btree_trans *trans, subvol_inum inum, struct printb prt_char(path, '/'); - if (d.v->d_type == DT_SUBVOL) - inum.subvol = le32_to_cpu(d.v->d_parent_subvol); - inum.inum = d.k->p.inode; - bch2_trans_iter_exit(trans, &d_iter); }