|
@@ -129,6 +129,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
|
|
struct delay_c *dc;
|
|
|
unsigned long long tmpll;
|
|
|
char dummy;
|
|
|
+ int ret;
|
|
|
|
|
|
if (argc != 3 && argc != 6) {
|
|
|
ti->error = "requires exactly 3 or 6 arguments";
|
|
@@ -143,6 +144,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
|
|
|
|
|
dc->reads = dc->writes = 0;
|
|
|
|
|
|
+ ret = -EINVAL;
|
|
|
if (sscanf(argv[1], "%llu%c", &tmpll, &dummy) != 1) {
|
|
|
ti->error = "Invalid device sector";
|
|
|
goto bad;
|
|
@@ -154,12 +156,14 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
|
|
goto bad;
|
|
|
}
|
|
|
|
|
|
- if (dm_get_device(ti, argv[0], dm_table_get_mode(ti->table),
|
|
|
- &dc->dev_read)) {
|
|
|
+ ret = dm_get_device(ti, argv[0], dm_table_get_mode(ti->table),
|
|
|
+ &dc->dev_read);
|
|
|
+ if (ret) {
|
|
|
ti->error = "Device lookup failed";
|
|
|
goto bad;
|
|
|
}
|
|
|
|
|
|
+ ret = -EINVAL;
|
|
|
dc->dev_write = NULL;
|
|
|
if (argc == 3)
|
|
|
goto out;
|
|
@@ -175,13 +179,15 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
|
|
goto bad_dev_read;
|
|
|
}
|
|
|
|
|
|
- if (dm_get_device(ti, argv[3], dm_table_get_mode(ti->table),
|
|
|
- &dc->dev_write)) {
|
|
|
+ ret = dm_get_device(ti, argv[3], dm_table_get_mode(ti->table),
|
|
|
+ &dc->dev_write);
|
|
|
+ if (ret) {
|
|
|
ti->error = "Write device lookup failed";
|
|
|
goto bad_dev_read;
|
|
|
}
|
|
|
|
|
|
out:
|
|
|
+ ret = -EINVAL;
|
|
|
dc->kdelayd_wq = alloc_workqueue("kdelayd", WQ_MEM_RECLAIM, 0);
|
|
|
if (!dc->kdelayd_wq) {
|
|
|
DMERR("Couldn't start kdelayd");
|
|
@@ -208,7 +214,7 @@ bad_dev_read:
|
|
|
dm_put_device(ti, dc->dev_read);
|
|
|
bad:
|
|
|
kfree(dc);
|
|
|
- return -EINVAL;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void delay_dtr(struct dm_target *ti)
|