aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-03-30 01:27:12 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-03-30 01:27:12 -0400
commitc2a9838452a4d71f76103c18c926468a9ea05713 (patch)
treefb576ef0004322e030cd406307169536cfb34bb8
parentd89b9f50291a214f9d670594c9fc35483b6d87a4 (diff)
parentda5dadb4f11660ca67580cd4a7420161266d6254 (diff)
Merge tag 'for-4.16/dm-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fixes from Mike Snitzer: - Fix a DM multipath regression introduced in a v4.16-rc6 commit: restore support for loading, and attaching, scsi_dh modules during multipath table load. Otherwise some users may find themselves unable to boot, as was reported today: https://marc.info/?l=linux-scsi&m=152231276114962&w=2 - Fix a DM core ioctl permission check regression introduced in a v4.16-rc5 commit. * tag 'for-4.16/dm-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm: fix dropped return code from dm_get_bdev_for_ioctl dm mpath: fix support for loading scsi_dh modules during table load
-rw-r--r--drivers/md/dm-mpath.c2
-rw-r--r--drivers/md/dm.c8
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index a05a560d3cba..a6b7baf31cdd 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -887,7 +887,7 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
887 887
888 q = bdev_get_queue(p->path.dev->bdev); 888 q = bdev_get_queue(p->path.dev->bdev);
889 attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL); 889 attached_handler_name = scsi_dh_attached_handler_name(q, GFP_KERNEL);
890 if (attached_handler_name) { 890 if (attached_handler_name || m->hw_handler_name) {
891 INIT_DELAYED_WORK(&p->activate_path, activate_path_work); 891 INIT_DELAYED_WORK(&p->activate_path, activate_path_work);
892 r = setup_scsi_dh(p->path.dev->bdev, m, attached_handler_name, &ti->error); 892 r = setup_scsi_dh(p->path.dev->bdev, m, attached_handler_name, &ti->error);
893 if (r) { 893 if (r) {
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 45328d8b2859..353ea0ede091 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -466,7 +466,7 @@ static int dm_get_bdev_for_ioctl(struct mapped_device *md,
466{ 466{
467 struct dm_target *tgt; 467 struct dm_target *tgt;
468 struct dm_table *map; 468 struct dm_table *map;
469 int srcu_idx, r; 469 int srcu_idx, r, r2;
470 470
471retry: 471retry:
472 r = -ENOTTY; 472 r = -ENOTTY;
@@ -492,9 +492,11 @@ retry:
492 goto out; 492 goto out;
493 493
494 bdgrab(*bdev); 494 bdgrab(*bdev);
495 r = blkdev_get(*bdev, *mode, _dm_claim_ptr); 495 r2 = blkdev_get(*bdev, *mode, _dm_claim_ptr);
496 if (r < 0) 496 if (r2 < 0) {
497 r = r2;
497 goto out; 498 goto out;
499 }
498 500
499 dm_put_live_table(md, srcu_idx); 501 dm_put_live_table(md, srcu_idx);
500 return r; 502 return r;