Commit 1006c21b authored by Joe Thornber's avatar Joe Thornber Committed by Trond Myklebust

[PATCH] dm: printk tgt->error if dm_table_add_target() fails.

printk tgt->error if dm_table_add_target() fails.
parent 20bf21d4
...@@ -578,9 +578,8 @@ static int split_args(int max, int *argc, char **argv, char *input) ...@@ -578,9 +578,8 @@ static int split_args(int max, int *argc, char **argv, char *input)
int dm_table_add_target(struct dm_table *t, const char *type, int dm_table_add_target(struct dm_table *t, const char *type,
sector_t start, sector_t len, char *params) sector_t start, sector_t len, char *params)
{ {
int r, argc; int r = -EINVAL, argc;
char *argv[32]; char *argv[32];
struct target_type *tt;
struct dm_target *tgt; struct dm_target *tgt;
if ((r = check_space(t))) if ((r = check_space(t)))
...@@ -589,14 +588,13 @@ int dm_table_add_target(struct dm_table *t, const char *type, ...@@ -589,14 +588,13 @@ int dm_table_add_target(struct dm_table *t, const char *type,
tgt = t->targets + t->num_targets; tgt = t->targets + t->num_targets;
memset(tgt, 0, sizeof(*tgt)); memset(tgt, 0, sizeof(*tgt));
tt = dm_get_target_type(type); tgt->type = dm_get_target_type(type);
if (!tt) { if (!tgt->type) {
tgt->error = "unknown target type"; tgt->error = "unknown target type";
return -EINVAL; goto bad;
} }
tgt->table = t; tgt->table = t;
tgt->type = tt;
tgt->begin = start; tgt->begin = start;
tgt->len = len; tgt->len = len;
tgt->error = "Unknown error"; tgt->error = "Unknown error";
...@@ -605,23 +603,19 @@ int dm_table_add_target(struct dm_table *t, const char *type, ...@@ -605,23 +603,19 @@ int dm_table_add_target(struct dm_table *t, const char *type,
* Does this target adjoin the previous one ? * Does this target adjoin the previous one ?
*/ */
if (!adjoin(t, tgt)) { if (!adjoin(t, tgt)) {
DMERR("Gap in table"); tgt->error = "Gap in table";
dm_put_target_type(tt); goto bad;
return -EINVAL;
} }
r = split_args(ARRAY_SIZE(argv), &argc, argv, params); r = split_args(ARRAY_SIZE(argv), &argc, argv, params);
if (r) { if (r) {
tgt->error = "couldn't split parameters"; tgt->error = "couldn't split parameters";
dm_put_target_type(tt); goto bad;
return r;
} }
r = tt->ctr(tgt, argc, argv); r = tgt->type->ctr(tgt, argc, argv);
if (r) { if (r)
dm_put_target_type(tt); goto bad;
return r;
}
t->highs[t->num_targets++] = tgt->begin + tgt->len - 1; t->highs[t->num_targets++] = tgt->begin + tgt->len - 1;
...@@ -629,6 +623,11 @@ int dm_table_add_target(struct dm_table *t, const char *type, ...@@ -629,6 +623,11 @@ int dm_table_add_target(struct dm_table *t, const char *type,
* the merge fn apply the target level restrictions. */ * the merge fn apply the target level restrictions. */
combine_restrictions_low(&t->limits, &tgt->limits); combine_restrictions_low(&t->limits, &tgt->limits);
return 0; return 0;
bad:
printk(KERN_ERR DM_NAME ": %s\n", tgt->error);
dm_put_target_type(tgt->type);
return r;
} }
static int setup_indexes(struct dm_table *t) static int setup_indexes(struct dm_table *t)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment