1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Let dmsetup store the uuid on device creation.

This commit is contained in:
Alasdair Kergon 2002-03-11 22:44:36 +00:00
parent 251502f9a1
commit ad21a5585c
5 changed files with 47 additions and 17 deletions

View File

@ -40,6 +40,9 @@ void dm_task_destroy(struct dm_task *dmt)
if (dmt->dmi) if (dmt->dmi)
free(dmt->dmi); free(dmt->dmi);
if (dmt->uuid)
free(dmt->uuid);
free(dmt); free(dmt);
} }
@ -225,6 +228,9 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt)
dmi->dev = MKDEV(0, dmt->minor); dmi->dev = MKDEV(0, dmt->minor);
} }
if (dmt->uuid)
strncpy(dmi->uuid, dmt->uuid, sizeof(dmi->uuid));
dmi->target_count = count; dmi->target_count = count;
b = (void *) (dmi + 1); b = (void *) (dmi + 1);

View File

@ -23,5 +23,7 @@ struct dm_task {
int minor; int minor;
struct dm_ioctl *dmi; struct dm_ioctl *dmi;
char *newname; char *newname;
char *uuid;
}; };

View File

@ -52,6 +52,7 @@ struct dm_task *dm_task_create(int type);
void dm_task_destroy(struct dm_task *dmt); void dm_task_destroy(struct dm_task *dmt);
int dm_task_set_name(struct dm_task *dmt, const char *name); 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. * Retrieve attributes after an info.

View File

@ -86,8 +86,10 @@ int dm_task_set_name(struct dm_task *dmt, const char *name)
char path[PATH_MAX]; char path[PATH_MAX];
struct stat st1, st2; struct stat st1, st2;
if (dmt->dev_name) if (dmt->dev_name) {
free(dmt->dev_name); free(dmt->dev_name);
dmt->dev_name = NULL;
}
/* If path was supplied, remove it if it points to the same device /* If path was supplied, remove it if it points to the same device
* as its last component. * as its last component.
@ -112,6 +114,21 @@ int dm_task_set_name(struct dm_task *dmt, const char *name)
return 1; 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) int dm_task_set_minor(struct dm_task *dmt, int minor)
{ {
dmt->minor = minor; dmt->minor = minor;

View File

@ -89,7 +89,7 @@ static int _parse_file(struct dm_task *dmt, const char *file)
return r; 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; int r = 0;
struct dm_task *dmt; 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)) if (!dm_task_set_name(dmt, name))
goto out; goto out;
if (uuid && !dm_task_set_uuid(dmt, uuid))
goto out;
if (!_parse_file(dmt, file)) if (!_parse_file(dmt, file))
goto out; goto out;
@ -122,12 +125,12 @@ static int _load(int task, const char *name, const char *file)
static int _create(int argc, char **argv) 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) 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) static int _rename(int argc, char **argv)
@ -321,22 +324,23 @@ typedef int (*command_fn) (int argc, char **argv);
struct command { struct command {
char *name; char *name;
char *help; char *help;
int num_args; int min_args;
int max_args;
command_fn fn; command_fn fn;
}; };
static struct command _commands[] = { static struct command _commands[] = {
{"create", "<dev_name> <table_file>", 2, _create}, {"create", "<dev_name> <table_file> [<uuid>]", 2, 3, _create},
{"remove", "<dev_name>", 1, _remove}, {"remove", "<dev_name>", 1, 1, _remove},
{"remove_all", "", 0, _remove_all}, {"remove_all", "", 0, 0, _remove_all},
{"suspend", "<dev_name>", 1, _suspend}, {"suspend", "<dev_name>", 1, 1, _suspend},
{"resume", "<dev_name>", 1, _resume}, {"resume", "<dev_name>", 1, 1, _resume},
{"reload", "<dev_name> <table_file>", 2, _reload}, {"reload", "<dev_name> <table_file>", 2, 2, _reload},
{"info", "<dev_name>", 1, _info}, {"info", "<dev_name>", 1, 1, _info},
{"deps", "<dev_name>", 1, _deps}, {"deps", "<dev_name>", 1, 1, _deps},
{"rename", "<dev_name> <new_name>", 2, _rename}, {"rename", "<dev_name> <new_name>", 2, 2, _rename},
{"version", "", 0, _version}, {"version", "", 0, 0, _version},
{NULL, NULL, 0, NULL} {NULL, NULL, 0, 0, NULL}
}; };
static void _usage(FILE * out) static void _usage(FILE * out)
@ -412,7 +416,7 @@ int main(int argc, char **argv)
exit(1); 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"); fprintf(stderr, "Incorrect number of arguments\n");
_usage(stderr); _usage(stderr);
exit(1); exit(1);