summaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-ioctl.c
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2011-08-02 13:32:06 +0200
committerAlasdair G Kergon <agk@redhat.com>2011-08-02 13:32:06 +0200
commitba2e19b0f4ccd6920fe175a86521ff18ede260cb (patch)
tree25a9533cfbd1946da36483c3172914b9ea1f51cb /drivers/md/dm-ioctl.c
parentdm ioctl: fill in device parameters in more ioctls (diff)
downloadlinux-ba2e19b0f4ccd6920fe175a86521ff18ede260cb.tar.xz
linux-ba2e19b0f4ccd6920fe175a86521ff18ede260cb.zip
dm ioctl: introduce __get_dev_cell
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>
Diffstat (limited to 'drivers/md/dm-ioctl.c')
-rw-r--r--drivers/md/dm-ioctl.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 99d38a6925a4..4c350914f4a0 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -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.