]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
dm: factor out helper function from dm_get_device
authorBenjamin Marzinski <bmarzins@redhat.com>
Thu, 4 Jul 2024 14:17:15 +0000 (16:17 +0200)
committerMikulas Patocka <mpatocka@redhat.com>
Wed, 10 Jul 2024 11:10:06 +0000 (13:10 +0200)
Factor out a helper function, dm_devt_from_path(), from dm_get_device()
for use in dm targets.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
drivers/md/dm-table.c
include/linux/device-mapper.h

index 33b7a1844ed4788daf16f11257517fbe685f4ea4..eea41e38d87e2d811d0fb183106f0a97c39828b6 100644 (file)
@@ -331,23 +331,15 @@ static int upgrade_mode(struct dm_dev_internal *dd, blk_mode_t new_mode,
 }
 
 /*
- * Add a device to the list, or just increment the usage count if
- * it's already present.
- *
  * Note: the __ref annotation is because this function can call the __init
  * marked early_lookup_bdev when called during early boot code from dm-init.c.
  */
-int __ref dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
-                 struct dm_dev **result)
+int __ref dm_devt_from_path(const char *path, dev_t *dev_p)
 {
        int r;
        dev_t dev;
        unsigned int major, minor;
        char dummy;
-       struct dm_dev_internal *dd;
-       struct dm_table *t = ti->table;
-
-       BUG_ON(!t);
 
        if (sscanf(path, "%u:%u%c", &major, &minor, &dummy) == 2) {
                /* Extract the major/minor numbers */
@@ -363,6 +355,29 @@ int __ref dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
                if (r)
                        return r;
        }
+       *dev_p = dev;
+       return 0;
+}
+EXPORT_SYMBOL(dm_devt_from_path);
+
+/*
+ * Add a device to the list, or just increment the usage count if
+ * it's already present.
+ */
+int dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
+                 struct dm_dev **result)
+{
+       int r;
+       dev_t dev;
+       struct dm_dev_internal *dd;
+       struct dm_table *t = ti->table;
+
+       BUG_ON(!t);
+
+       r = dm_devt_from_path(path, &dev);
+       if (r)
+               return r;
+
        if (dev == disk_devt(t->md->disk))
                return -EINVAL;
 
index 4ba2e73993bd9a6db3fb41bbe507367e23d75dfd..384649a61bfa116989b712cba09436f636ade4fb 100644 (file)
@@ -179,6 +179,11 @@ int dm_get_device(struct dm_target *ti, const char *path, blk_mode_t mode,
                  struct dm_dev **result);
 void dm_put_device(struct dm_target *ti, struct dm_dev *d);
 
+/*
+ * Helper function for getting devices
+ */
+int dm_devt_from_path(const char *path, dev_t *dev_p);
+
 /*
  * Information about a target type
  */