From: Kent Overstreet Date: Wed, 16 Feb 2022 11:23:06 +0000 (-0500) Subject: bcachefs: Change bch2_dev_lookup() to not use lookup_bdev() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=bf7e49a4ae564108d08d314e514a6f802748d73b;p=linux.git 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 --- diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index d35547fbefdb3..6a32b9a5dc0ed 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: