The output of mount options such as "metadata_target" in `/proc/mounts`
uses the full path to the device.

mount(8) from util-linux uses the output from `/proc/mounts` to pass
existing mount options when performing a remount, so bcachefs should
accept as input the same form that it prints as output.

Without this change:

$ mount -t bcachefs -o metadata_target=vdb /dev/vdb /mnt
$ strace mount -o remount /mnt
...
fsconfig(4, FSCONFIG_SET_STRING, "metadata_target", "/dev/vdb", 0) = -1 EINVAL 
(Invalid argument)
...

Signed-off-by: Thomas Bertschinger <[email protected]>
---
 fs/bcachefs/super.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
index 2206a8dee693..864c216346a5 100644
--- a/fs/bcachefs/super.c
+++ b/fs/bcachefs/super.c
@@ -2029,6 +2029,9 @@ int bch2_dev_resize(struct bch_fs *c, struct bch_dev *ca, 
u64 nbuckets)
 /* return with ref on ca->ref: */
 struct bch_dev *bch2_dev_lookup(struct bch_fs *c, const char *name)
 {
+       if (!strncmp(name, "/dev/", strlen("/dev/")))
+               name += strlen("/dev/");
+
        for_each_member_device(c, ca)
                if (!strcmp(name, ca->name))
                        return ca;
-- 
2.45.0


Reply via email to