Skip to content

Commit 711848c

Browse files
committed
dax/bus.c: replace WARN_ON_ONCE() with lockdep asserts
JIRA: https://issues.redhat.com/browse/RHEL-23824 commit c14c647 Author: Vishal Verma <vishal.l.verma@intel.com> Date: Tue Apr 30 11:44:23 2024 -0600 dax/bus.c: replace WARN_ON_ONCE() with lockdep asserts Patch series "dax/bus.c: Fixups for dax-bus locking", v3. Commit Fixes: c05ae9d ("dax/bus.c: replace driver-core lock usage by a local rwsem") introduced a few problems that this series aims to fix. Add back device_lock() where it was correctly used (during device manipulation operations), remove conditional locking in unregister_dax_dev() and unregister_dax_mapping(), use non-interruptible versions of rwsem locks when not called from a user process, and fix up a write vs. read usage of an rwsem. This patch (of 4): In [1], Dan points out that all of the WARN_ON_ONCE() usage in the referenced patch should be replaced with lockdep_assert_held, or lockdep_held_assert_write(). Replace these as appropriate. Link: https://lkml.kernel.org/r/20240430-vv-dax_abi_fixes-v3-0-e3dcd755774c@intel.com Link: https://lore.kernel.org/r/65f0b5ef41817_aa222941a@dwillia2-mobl3.amr.corp.intel.com.notmuch [1] Link: https://lkml.kernel.org/r/20240430-vv-dax_abi_fixes-v3-1-e3dcd755774c@intel.com Fixes: c05ae9d ("dax/bus.c: replace driver-core lock usage by a local rwsem") Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> Reported-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Cc: Alison Schofield <alison.schofield@intel.com> Cc: Dave Jiang <dave.jiang@intel.com> Cc: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
1 parent 6c95b6a commit 711848c

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

drivers/dax/bus.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ static u64 dev_dax_size(struct dev_dax *dev_dax)
194194
u64 size = 0;
195195
int i;
196196

197-
WARN_ON_ONCE(!rwsem_is_locked(&dax_dev_rwsem));
197+
lockdep_assert_held(&dax_dev_rwsem);
198198

199199
for (i = 0; i < dev_dax->nr_range; i++)
200200
size += range_len(&dev_dax->ranges[i].range);
@@ -304,7 +304,7 @@ static unsigned long long dax_region_avail_size(struct dax_region *dax_region)
304304
resource_size_t size = resource_size(&dax_region->res);
305305
struct resource *res;
306306

307-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
307+
lockdep_assert_held(&dax_region_rwsem);
308308

309309
for_each_dax_region_resource(dax_region, res)
310310
size -= resource_size(res);
@@ -449,7 +449,7 @@ static void trim_dev_dax_range(struct dev_dax *dev_dax)
449449
struct range *range = &dev_dax->ranges[i].range;
450450
struct dax_region *dax_region = dev_dax->region;
451451

452-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
452+
lockdep_assert_held_write(&dax_region_rwsem);
453453
dev_dbg(&dev_dax->dev, "delete range[%d]: %#llx:%#llx\n", i,
454454
(unsigned long long)range->start,
455455
(unsigned long long)range->end);
@@ -509,7 +509,7 @@ static int __free_dev_dax_id(struct dev_dax *dev_dax)
509509
struct dax_region *dax_region;
510510
int rc = dev_dax->id;
511511

512-
WARN_ON_ONCE(!rwsem_is_locked(&dax_dev_rwsem));
512+
lockdep_assert_held_write(&dax_dev_rwsem);
513513

514514
if (!dev_dax->dyn_id || dev_dax->id < 0)
515515
return -1;
@@ -715,7 +715,7 @@ static void __unregister_dax_mapping(void *data)
715715

716716
dev_dbg(dev, "%s\n", __func__);
717717

718-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
718+
lockdep_assert_held_write(&dax_region_rwsem);
719719

720720
dev_dax->ranges[mapping->range_id].mapping = NULL;
721721
mapping->range_id = -1;
@@ -832,7 +832,7 @@ static int devm_register_dax_mapping(struct dev_dax *dev_dax, int range_id)
832832
struct device *dev;
833833
int rc;
834834

835-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
835+
lockdep_assert_held_write(&dax_region_rwsem);
836836

837837
if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver,
838838
"region disabled\n"))
@@ -878,7 +878,7 @@ static int alloc_dev_dax_range(struct dev_dax *dev_dax, u64 start,
878878
struct resource *alloc;
879879
int i, rc;
880880

881-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
881+
lockdep_assert_held_write(&dax_region_rwsem);
882882

883883
/* handle the seed alloc special case */
884884
if (!size) {
@@ -937,7 +937,7 @@ static int adjust_dev_dax_range(struct dev_dax *dev_dax, struct resource *res, r
937937
struct device *dev = &dev_dax->dev;
938938
int rc;
939939

940-
WARN_ON_ONCE(!rwsem_is_locked(&dax_region_rwsem));
940+
lockdep_assert_held_write(&dax_region_rwsem);
941941

942942
if (dev_WARN_ONCE(dev, !size, "deletion is handled by dev_dax_shrink\n"))
943943
return -EINVAL;

0 commit comments

Comments
 (0)