aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-lib.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/block/blk-lib.c b/block/blk-lib.c
index 5677fd33d7d2..b3a1f2b70b31 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -48,6 +48,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
48 struct bio_batch bb; 48 struct bio_batch bb;
49 struct bio *bio; 49 struct bio *bio;
50 int ret = 0; 50 int ret = 0;
51 struct blk_plug plug;
51 52
52 if (!q) 53 if (!q)
53 return -ENXIO; 54 return -ENXIO;
@@ -82,6 +83,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
82 bb.flags = 1 << BIO_UPTODATE; 83 bb.flags = 1 << BIO_UPTODATE;
83 bb.wait = &wait; 84 bb.wait = &wait;
84 85
86 blk_start_plug(&plug);
85 while (nr_sects) { 87 while (nr_sects) {
86 unsigned int req_sects; 88 unsigned int req_sects;
87 sector_t end_sect, tmp; 89 sector_t end_sect, tmp;
@@ -120,6 +122,7 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
120 atomic_inc(&bb.done); 122 atomic_inc(&bb.done);
121 submit_bio(type, bio); 123 submit_bio(type, bio);
122 } 124 }
125 blk_finish_plug(&plug);
123 126
124 /* Wait for bios in-flight */ 127 /* Wait for bios in-flight */
125 if (!atomic_dec_and_test(&bb.done)) 128 if (!atomic_dec_and_test(&bb.done))