aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
Diffstat (limited to 'block')
-rw-r--r--block/blk-core.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index f9255815a5bb..b850bedad229 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1361,14 +1361,9 @@ static int __init setup_fail_make_request(char *str)
1361} 1361}
1362__setup("fail_make_request=", setup_fail_make_request); 1362__setup("fail_make_request=", setup_fail_make_request);
1363 1363
1364static int should_fail_request(struct bio *bio) 1364static bool should_fail_request(struct hd_struct *part, unsigned int bytes)
1365{ 1365{
1366 struct hd_struct *part = bio->bi_bdev->bd_part; 1366 return part->make_it_fail && should_fail(&fail_make_request, bytes);
1367
1368 if (part_to_disk(part)->part0.make_it_fail || part->make_it_fail)
1369 return should_fail(&fail_make_request, bio->bi_size);
1370
1371 return 0;
1372} 1367}
1373 1368
1374static int __init fail_make_request_debugfs(void) 1369static int __init fail_make_request_debugfs(void)
@@ -1381,9 +1376,10 @@ late_initcall(fail_make_request_debugfs);
1381 1376
1382#else /* CONFIG_FAIL_MAKE_REQUEST */ 1377#else /* CONFIG_FAIL_MAKE_REQUEST */
1383 1378
1384static inline int should_fail_request(struct bio *bio) 1379static inline bool should_fail_request(struct hd_struct *part,
1380 unsigned int bytes)
1385{ 1381{
1386 return 0; 1382 return false;
1387} 1383}
1388 1384
1389#endif /* CONFIG_FAIL_MAKE_REQUEST */ 1385#endif /* CONFIG_FAIL_MAKE_REQUEST */
@@ -1466,6 +1462,7 @@ static inline void __generic_make_request(struct bio *bio)
1466 old_dev = 0; 1462 old_dev = 0;
1467 do { 1463 do {
1468 char b[BDEVNAME_SIZE]; 1464 char b[BDEVNAME_SIZE];
1465 struct hd_struct *part;
1469 1466
1470 q = bdev_get_queue(bio->bi_bdev); 1467 q = bdev_get_queue(bio->bi_bdev);
1471 if (unlikely(!q)) { 1468 if (unlikely(!q)) {
@@ -1489,7 +1486,10 @@ static inline void __generic_make_request(struct bio *bio)
1489 if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags))) 1486 if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
1490 goto end_io; 1487 goto end_io;
1491 1488
1492 if (should_fail_request(bio)) 1489 part = bio->bi_bdev->bd_part;
1490 if (should_fail_request(part, bio->bi_size) ||
1491 should_fail_request(&part_to_disk(part)->part0,
1492 bio->bi_size))
1493 goto end_io; 1493 goto end_io;
1494 1494
1495 /* 1495 /*
@@ -1704,11 +1704,9 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq)
1704 if (blk_rq_check_limits(q, rq)) 1704 if (blk_rq_check_limits(q, rq))
1705 return -EIO; 1705 return -EIO;
1706 1706
1707#ifdef CONFIG_FAIL_MAKE_REQUEST 1707 if (rq->rq_disk &&
1708 if (rq->rq_disk && rq->rq_disk->part0.make_it_fail && 1708 should_fail_request(&rq->rq_disk->part0, blk_rq_bytes(rq)))
1709 should_fail(&fail_make_request, blk_rq_bytes(rq)))
1710 return -EIO; 1709 return -EIO;
1711#endif
1712 1710
1713 spin_lock_irqsave(q->queue_lock, flags); 1711 spin_lock_irqsave(q->queue_lock, flags);
1714 1712