]> sourceware.org Git - dm.git/commitdiff
Let dmsetup store the uuid on device creation.
authorAlasdair Kergon <agk@redhat.com>
Mon, 11 Mar 2002 22:44:35 +0000 (22:44 +0000)
committerAlasdair Kergon <agk@redhat.com>
Mon, 11 Mar 2002 22:44:35 +0000 (22:44 +0000)
dmsetup/dmsetup.c
lib/ioctl/libdevmapper.c
lib/ioctl/libdm-targets.h
lib/libdevmapper.h
lib/libdm-common.c

index fe6e2e1412c7c5b9cdf6ea26f8c7fb134ceb969a..4faf98682290f4eaeae7697cb73b20801148ebd7 100644 (file)
@@ -89,7 +89,7 @@ static int _parse_file(struct dm_task *dmt, const char *file)
        return r;
 }
 
-static int _load(int task, const char *name, const char *file)
+static int _load(int task, const char *name, const char *file, const char *uuid)
 {
        int r = 0;
        struct dm_task *dmt;
@@ -100,6 +100,9 @@ static int _load(int task, const char *name, const char *file)
        if (!dm_task_set_name(dmt, name))
                goto out;
 
+       if (uuid && !dm_task_set_uuid(dmt, uuid))
+               goto out;
+
        if (!_parse_file(dmt, file))
                goto out;
 
@@ -122,12 +125,12 @@ static int _load(int task, const char *name, const char *file)
 
 static int _create(int argc, char **argv)
 {
-       return _load(DM_DEVICE_CREATE, argv[1], argv[2]);
+       return _load(DM_DEVICE_CREATE, argv[1], argv[2], argv[3]);
 }
 
 static int _reload(int argc, char **argv)
 {
-       return _load(DM_DEVICE_RELOAD, argv[1], argv[2]);
+       return _load(DM_DEVICE_RELOAD, argv[1], argv[2], NULL);
 }
 
 static int _rename(int argc, char **argv)
@@ -321,22 +324,23 @@ typedef int (*command_fn) (int argc, char **argv);
 struct command {
        char *name;
        char *help;
-       int num_args;
+       int min_args;
+       int max_args;
        command_fn fn;
 };
 
 static struct command _commands[] = {
-       {"create", "<dev_name> <table_file>", 2, _create},
-       {"remove", "<dev_name>", 1, _remove},
-       {"remove_all", "", 0, _remove_all},
-       {"suspend", "<dev_name>", 1, _suspend},
-       {"resume", "<dev_name>", 1, _resume},
-       {"reload", "<dev_name> <table_file>", 2, _reload},
-       {"info", "<dev_name>", 1, _info},
-       {"deps", "<dev_name>", 1, _deps},
-       {"rename", "<dev_name> <new_name>", 2, _rename},
-       {"version", "", 0, _version},
-       {NULL, NULL, 0, NULL}
+       {"create", "<dev_name> <table_file> [<uuid>]", 2, 3, _create},
+       {"remove", "<dev_name>", 1, 1, _remove},
+       {"remove_all", "", 0, 0, _remove_all},
+       {"suspend", "<dev_name>", 1, 1, _suspend},
+       {"resume", "<dev_name>", 1, 1, _resume},
+       {"reload", "<dev_name> <table_file>", 2, 2, _reload},
+       {"info", "<dev_name>", 1, 1, _info},
+       {"deps", "<dev_name>", 1, 1, _deps},
+       {"rename", "<dev_name> <new_name>", 2, 2, _rename},
+       {"version", "", 0, 0, _version},
+       {NULL, NULL, 0, 0, NULL}
 };
 
 static void _usage(FILE * out)
@@ -412,7 +416,7 @@ int main(int argc, char **argv)
                exit(1);
        }
 
-       if (argc != c->num_args + 1) {
+       if (argc < c->min_args + 1 || argc > c->max_args + 1) {
                fprintf(stderr, "Incorrect number of arguments\n");
                _usage(stderr);
                exit(1);
index 1d9076decd79d06d1d2fb8ea959a22087a3a15f4..3a88a1a801c1e7141267394d95e8a5873e16cc1c 100644 (file)
@@ -40,6 +40,9 @@ void dm_task_destroy(struct dm_task *dmt)
        if (dmt->dmi)
                free(dmt->dmi);
 
+       if (dmt->uuid)
+               free(dmt->uuid);
+
        free(dmt);
 }
 
@@ -225,6 +228,9 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt)
                dmi->dev = MKDEV(0, dmt->minor);
        }
 
+       if (dmt->uuid)
+               strncpy(dmi->uuid, dmt->uuid, sizeof(dmi->uuid));
+
        dmi->target_count = count;
 
        b = (void *) (dmi + 1);
index 5a0e30f03a17450d860c7294f267d8e8dc0f1c05..b8d21a8cc726f8d760d9f87ed7bc539442ec98b0 100644 (file)
@@ -23,5 +23,7 @@ struct dm_task {
        int minor;
        struct dm_ioctl *dmi;
        char *newname;
+
+       char *uuid;
 };
 
index a47e264c23bfcccad37e9283b5359e33267d7960..bc97b8ac16db347e56e3bc4be6106964cf44e903 100644 (file)
@@ -52,6 +52,7 @@ struct dm_task *dm_task_create(int type);
 void dm_task_destroy(struct dm_task *dmt);
 
 int dm_task_set_name(struct dm_task *dmt, const char *name);
+int dm_task_set_uuid(struct dm_task *dmt, const char *uuid);
 
 /*
  * Retrieve attributes after an info.
index b6d61db52b2bd2a2b804798e8437741409bdd37b..5c97e85ae025f11a21a050541c0e3f024fcd9699 100644 (file)
@@ -86,8 +86,10 @@ int dm_task_set_name(struct dm_task *dmt, const char *name)
        char path[PATH_MAX];
        struct stat st1, st2;
 
-        if (dmt->dev_name)
+        if (dmt->dev_name) {
                 free(dmt->dev_name);
+               dmt->dev_name = NULL;
+       }
 
        /* If path was supplied, remove it if it points to the same device
         * as its last component.
@@ -112,6 +114,21 @@ int dm_task_set_name(struct dm_task *dmt, const char *name)
         return 1;
 }
 
+int dm_task_set_uuid(struct dm_task *dmt, const char *uuid)
+{
+       if (dmt->uuid) {
+               free(dmt->uuid);
+               dmt->uuid = NULL;
+       }
+
+       if (!(dmt->uuid = strdup(uuid))) {
+               log_error("dm_task_set_uuid: strdup(%s) failed", uuid);
+               return 0;
+       }
+
+       return 1;
+}
+
 int dm_task_set_minor(struct dm_task *dmt, int minor)
 {
         dmt->minor = minor;
This page took 0.036999 seconds and 5 git commands to generate.