diff options
Diffstat (limited to 'drivers/block/drbd/drbd_req.c')
-rw-r--r-- | drivers/block/drbd/drbd_req.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index c24379ffd4e3..fec7bef44994 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c | |||
@@ -1306,6 +1306,7 @@ int drbd_merge_bvec(struct request_queue *q, struct bvec_merge_data *bvm, struct | |||
1306 | int backing_limit; | 1306 | int backing_limit; |
1307 | 1307 | ||
1308 | if (bio_size && get_ldev(mdev)) { | 1308 | if (bio_size && get_ldev(mdev)) { |
1309 | unsigned int max_hw_sectors = queue_max_hw_sectors(q); | ||
1309 | struct request_queue * const b = | 1310 | struct request_queue * const b = |
1310 | mdev->ldev->backing_bdev->bd_disk->queue; | 1311 | mdev->ldev->backing_bdev->bd_disk->queue; |
1311 | if (b->merge_bvec_fn) { | 1312 | if (b->merge_bvec_fn) { |
@@ -1313,6 +1314,8 @@ int drbd_merge_bvec(struct request_queue *q, struct bvec_merge_data *bvm, struct | |||
1313 | limit = min(limit, backing_limit); | 1314 | limit = min(limit, backing_limit); |
1314 | } | 1315 | } |
1315 | put_ldev(mdev); | 1316 | put_ldev(mdev); |
1317 | if ((limit >> 9) > max_hw_sectors) | ||
1318 | limit = max_hw_sectors << 9; | ||
1316 | } | 1319 | } |
1317 | return limit; | 1320 | return limit; |
1318 | } | 1321 | } |