aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-raid.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-12 19:36:31 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-12 19:36:31 -0500
commit802ea9d8645d33d24b7b4cd4537c14f3e698bde0 (patch)
tree9a51a21025fa9a38263aa44883ea2b6af823ea05 /drivers/md/dm-raid.c
parent8494bcf5b7c4b2416687e233dd34d4c6b6fe5653 (diff)
parenta4afe76b2b922e6197944d7be0be7a18b53175ae (diff)
Merge tag 'dm-3.20-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper changes from Mike Snitzer: - The most significant change this cycle is request-based DM now supports stacking ontop of blk-mq devices. This blk-mq support changes the model request-based DM uses for cloning a request to relying on calling blk_get_request() directly from the underlying blk-mq device. An early consumer of this code is Intel's emerging NVMe hardware; thanks to Keith Busch for working on, and pushing for, these changes. - A few other small fixes and cleanups across other DM targets. * tag 'dm-3.20-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm: inherit QUEUE_FLAG_SG_GAPS flags from underlying queues dm snapshot: remove unnecessary NULL checks before vfree() calls dm mpath: simplify failure path of dm_multipath_init() dm thin metadata: remove unused dm_pool_get_data_block_size() dm ioctl: fix stale comment above dm_get_inactive_table() dm crypt: update url in CONFIG_DM_CRYPT help text dm bufio: fix time comparison to use time_after_eq() dm: use time_in_range() and time_after() dm raid: fix a couple integer overflows dm table: train hybrid target type detection to select blk-mq if appropriate dm: allocate requests in target when stacking on blk-mq devices dm: prepare for allocating blk-mq clone requests in target dm: submit stacked requests in irq enabled context dm: split request structure out from dm_rq_target_io structure dm: remove exports for request-based interfaces without external callers
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r--drivers/md/dm-raid.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 777d9ba2acad..88e4c7f24986 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -1237,7 +1237,7 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv)
1237 argv++; 1237 argv++;
1238 1238
1239 /* Skip over RAID params for now and find out # of devices */ 1239 /* Skip over RAID params for now and find out # of devices */
1240 if (num_raid_params + 1 > argc) { 1240 if (num_raid_params >= argc) {
1241 ti->error = "Arguments do not agree with counts given"; 1241 ti->error = "Arguments do not agree with counts given";
1242 return -EINVAL; 1242 return -EINVAL;
1243 } 1243 }
@@ -1248,6 +1248,12 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv)
1248 return -EINVAL; 1248 return -EINVAL;
1249 } 1249 }
1250 1250
1251 argc -= num_raid_params + 1; /* +1: we already have num_raid_devs */
1252 if (argc != (num_raid_devs * 2)) {
1253 ti->error = "Supplied RAID devices does not match the count given";
1254 return -EINVAL;
1255 }
1256
1251 rs = context_alloc(ti, rt, (unsigned)num_raid_devs); 1257 rs = context_alloc(ti, rt, (unsigned)num_raid_devs);
1252 if (IS_ERR(rs)) 1258 if (IS_ERR(rs))
1253 return PTR_ERR(rs); 1259 return PTR_ERR(rs);
@@ -1256,16 +1262,8 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv)
1256 if (ret) 1262 if (ret)
1257 goto bad; 1263 goto bad;
1258 1264
1259 ret = -EINVAL;
1260
1261 argc -= num_raid_params + 1; /* +1: we already have num_raid_devs */
1262 argv += num_raid_params + 1; 1265 argv += num_raid_params + 1;
1263 1266
1264 if (argc != (num_raid_devs * 2)) {
1265 ti->error = "Supplied RAID devices does not match the count given";
1266 goto bad;
1267 }
1268
1269 ret = dev_parms(rs, argv); 1267 ret = dev_parms(rs, argv);
1270 if (ret) 1268 if (ret)
1271 goto bad; 1269 goto bad;