dm ioctl: introduce __get_dev_cell
Mikulas Patocka [Tue, 2 Aug 2011 11:32:06 +0000 (12:32 +0100)]
Move logic to find device based on major/minor number to a separate
function __get_dev_cell (similar to __get_uuid_cell and __get_name_cell).
This makes the function __find_device_hash_cell more straightforward.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>

drivers/md/dm-ioctl.c

index 99d38a6..4c35091 100644 (file)
@@ -128,6 +128,24 @@ static struct hash_cell *__get_uuid_cell(const char *str)
        return NULL;
 }
 
+static struct hash_cell *__get_dev_cell(uint64_t dev)
+{
+       struct mapped_device *md;
+       struct hash_cell *hc;
+
+       md = dm_get_md(huge_decode_dev(dev));
+       if (!md)
+               return NULL;
+
+       hc = dm_get_mdptr(md);
+       if (!hc) {
+               dm_put(md);
+               return NULL;
+       }
+
+       return hc;
+}
+
 /*-----------------------------------------------------------------
  * Inserting, removing and renaming a device.
  *---------------------------------------------------------------*/
@@ -718,34 +736,23 @@ static int dev_create(struct dm_ioctl *param, size_t param_size)
  */
 static struct hash_cell *__find_device_hash_cell(struct dm_ioctl *param)
 {
-       struct mapped_device *md;
        struct hash_cell *hc = NULL;
 
        if (*param->uuid) {
                hc = __get_uuid_cell(param->uuid);
                if (!hc)
                        return NULL;
-               goto fill_params;
-       }
-
-       if (*param->name) {
+       } else if (*param->name) {
                hc = __get_name_cell(param->name);
                if (!hc)
                        return NULL;
-               goto fill_params;
-       }
-
-       md = dm_get_md(huge_decode_dev(param->dev));
-       if (!md)
-               return NULL;
-
-       hc = dm_get_mdptr(md);
-       if (!hc) {
-               dm_put(md);
+       } else if (param->dev) {
+               hc = __get_dev_cell(param->dev);
+               if (!hc)
+                       return NULL;
+       } else
                return NULL;
-       }
 
-fill_params:
        /*
         * Sneakily write in both the name and the uuid
         * while we have the cell.