aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/drbd/drbd_receiver.c5
-rw-r--r--drivers/block/floppy.c2
-rw-r--r--drivers/block/null_blk.c7
-rw-r--r--drivers/block/rbd.c10
-rw-r--r--drivers/block/zram/zram_drv.c5
5 files changed, 23 insertions, 6 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index b6c8aaf4931b..5b17ec88ea05 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -1337,8 +1337,11 @@ int drbd_submit_peer_request(struct drbd_device *device,
1337 return 0; 1337 return 0;
1338 } 1338 }
1339 1339
1340 /* Discards don't have any payload.
1341 * But the scsi layer still expects a bio_vec it can use internally,
1342 * see sd_setup_discard_cmnd() and blk_add_request_payload(). */
1340 if (peer_req->flags & EE_IS_TRIM) 1343 if (peer_req->flags & EE_IS_TRIM)
1341 nr_pages = 0; /* discards don't have any payload. */ 1344 nr_pages = 1;
1342 1345
1343 /* In most cases, we will only need one bio. But in case the lower 1346 /* In most cases, we will only need one bio. But in case the lower
1344 * level restrictions happen to be different at this offset on this 1347 * level restrictions happen to be different at this offset on this
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 677db049f55a..56d46ffb08e1 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3777,7 +3777,7 @@ static void floppy_rb0_cb(struct bio *bio, int err)
3777 int drive = cbdata->drive; 3777 int drive = cbdata->drive;
3778 3778
3779 if (err) { 3779 if (err) {
3780 pr_info("floppy: error %d while reading block 0", err); 3780 pr_info("floppy: error %d while reading block 0\n", err);
3781 set_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags); 3781 set_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
3782 } 3782 }
3783 complete(&cbdata->complete); 3783 complete(&cbdata->complete);
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
index 77087a29b127..a3b042c4d448 100644
--- a/drivers/block/null_blk.c
+++ b/drivers/block/null_blk.c
@@ -79,7 +79,7 @@ MODULE_PARM_DESC(home_node, "Home node for the device");
79 79
80static int queue_mode = NULL_Q_MQ; 80static int queue_mode = NULL_Q_MQ;
81module_param(queue_mode, int, S_IRUGO); 81module_param(queue_mode, int, S_IRUGO);
82MODULE_PARM_DESC(use_mq, "Use blk-mq interface (0=bio,1=rq,2=multiqueue)"); 82MODULE_PARM_DESC(queue_mode, "Block interface to use (0=bio,1=rq,2=multiqueue)");
83 83
84static int gb = 250; 84static int gb = 250;
85module_param(gb, int, S_IRUGO); 85module_param(gb, int, S_IRUGO);
@@ -227,7 +227,10 @@ static void null_cmd_end_timer(struct nullb_cmd *cmd)
227 227
228static void null_softirq_done_fn(struct request *rq) 228static void null_softirq_done_fn(struct request *rq)
229{ 229{
230 end_cmd(blk_mq_rq_to_pdu(rq)); 230 if (queue_mode == NULL_Q_MQ)
231 end_cmd(blk_mq_rq_to_pdu(rq));
232 else
233 end_cmd(rq->special);
231} 234}
232 235
233static inline void null_handle_cmd(struct nullb_cmd *cmd) 236static inline void null_handle_cmd(struct nullb_cmd *cmd)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index bbeb404b3a07..b2c98c1bc037 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1431,6 +1431,14 @@ static bool obj_request_exists_test(struct rbd_obj_request *obj_request)
1431 return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0; 1431 return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0;
1432} 1432}
1433 1433
1434static bool obj_request_overlaps_parent(struct rbd_obj_request *obj_request)
1435{
1436 struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev;
1437
1438 return obj_request->img_offset <
1439 round_up(rbd_dev->parent_overlap, rbd_obj_bytes(&rbd_dev->header));
1440}
1441
1434static void rbd_obj_request_get(struct rbd_obj_request *obj_request) 1442static void rbd_obj_request_get(struct rbd_obj_request *obj_request)
1435{ 1443{
1436 dout("%s: obj %p (was %d)\n", __func__, obj_request, 1444 dout("%s: obj %p (was %d)\n", __func__, obj_request,
@@ -2748,7 +2756,7 @@ static int rbd_img_obj_request_submit(struct rbd_obj_request *obj_request)
2748 */ 2756 */
2749 if (!img_request_write_test(img_request) || 2757 if (!img_request_write_test(img_request) ||
2750 !img_request_layered_test(img_request) || 2758 !img_request_layered_test(img_request) ||
2751 rbd_dev->parent_overlap <= obj_request->img_offset || 2759 !obj_request_overlaps_parent(obj_request) ||
2752 ((known = obj_request_known_test(obj_request)) && 2760 ((known = obj_request_known_test(obj_request)) &&
2753 obj_request_exists_test(obj_request))) { 2761 obj_request_exists_test(obj_request))) {
2754 2762
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 48eccb350180..089e72cd37be 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -622,8 +622,10 @@ static void zram_reset_device(struct zram *zram, bool reset_capacity)
622 memset(&zram->stats, 0, sizeof(zram->stats)); 622 memset(&zram->stats, 0, sizeof(zram->stats));
623 623
624 zram->disksize = 0; 624 zram->disksize = 0;
625 if (reset_capacity) 625 if (reset_capacity) {
626 set_capacity(zram->disk, 0); 626 set_capacity(zram->disk, 0);
627 revalidate_disk(zram->disk);
628 }
627 up_write(&zram->init_lock); 629 up_write(&zram->init_lock);
628} 630}
629 631
@@ -664,6 +666,7 @@ static ssize_t disksize_store(struct device *dev,
664 zram->comp = comp; 666 zram->comp = comp;
665 zram->disksize = disksize; 667 zram->disksize = disksize;
666 set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); 668 set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);
669 revalidate_disk(zram->disk);
667 up_write(&zram->init_lock); 670 up_write(&zram->init_lock);
668 return len; 671 return len;
669 672