diff options
Diffstat (limited to 'drivers/md/dm-mpath.c')
-rw-r--r-- | drivers/md/dm-mpath.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 826bce7343b3..487ecda90ad4 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -706,6 +706,7 @@ static struct priority_group *parse_priority_group(struct arg_set *as, | |||
706 | 706 | ||
707 | if (as->argc < nr_params) { | 707 | if (as->argc < nr_params) { |
708 | ti->error = "not enough path parameters"; | 708 | ti->error = "not enough path parameters"; |
709 | r = -EINVAL; | ||
709 | goto bad; | 710 | goto bad; |
710 | } | 711 | } |
711 | 712 | ||
@@ -892,6 +893,7 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc, | |||
892 | } | 893 | } |
893 | 894 | ||
894 | ti->num_flush_requests = 1; | 895 | ti->num_flush_requests = 1; |
896 | ti->num_discard_requests = 1; | ||
895 | 897 | ||
896 | return 0; | 898 | return 0; |
897 | 899 | ||
@@ -1271,6 +1273,15 @@ static int do_end_io(struct multipath *m, struct request *clone, | |||
1271 | if (error == -EOPNOTSUPP) | 1273 | if (error == -EOPNOTSUPP) |
1272 | return error; | 1274 | return error; |
1273 | 1275 | ||
1276 | if (clone->cmd_flags & REQ_DISCARD) | ||
1277 | /* | ||
1278 | * Pass all discard request failures up. | ||
1279 | * FIXME: only fail_path if the discard failed due to a | ||
1280 | * transport problem. This requires precise understanding | ||
1281 | * of the underlying failure (e.g. the SCSI sense). | ||
1282 | */ | ||
1283 | return error; | ||
1284 | |||
1274 | if (mpio->pgpath) | 1285 | if (mpio->pgpath) |
1275 | fail_path(mpio->pgpath); | 1286 | fail_path(mpio->pgpath); |
1276 | 1287 | ||