diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-02-16 06:23:06 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:24 -0400 |
commit | bf7e49a4ae564108d08d314e514a6f802748d73b (patch) | |
tree | 230e1732d8563db748119f68bc787fff8cfce918 /fs/bcachefs | |
parent | 2232fa397c2be92ed80ee48d52de98a1a2916b06 (diff) |
bcachefs: Change bch2_dev_lookup() to not use lookup_bdev()
bch2_dev_lookup() is used from the extended attribute set methods, for
setting the target options, where we're already holding an inode lock -
it turns out pathname lookups also take inode locks, so that was
susceptible to deadlocks.
Fortunately we already stash the device name in ca->name. This does
change user-visible behaviour though: instead of specifying e.g.
/dev/sda1, user must now specify sda1.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r-- | fs/bcachefs/super.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index d35547fbefdb..6a32b9a5dc0e 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -1883,20 +1883,14 @@ err: } /* return with ref on ca->ref: */ -struct bch_dev *bch2_dev_lookup(struct bch_fs *c, const char *path) +struct bch_dev *bch2_dev_lookup(struct bch_fs *c, const char *name) { struct bch_dev *ca; - dev_t dev; unsigned i; - int ret; - - ret = lookup_bdev(path, &dev); - if (ret) - return ERR_PTR(ret); rcu_read_lock(); for_each_member_device_rcu(ca, c, i, NULL) - if (ca->dev == dev) + if (!strcmp(name, ca->name)) goto found; ca = ERR_PTR(-ENOENT); found: |