aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-flush.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/blk-flush.c')
-rw-r--r--block/blk-flush.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/block/blk-flush.c b/block/blk-flush.c
index 62b7df9bca9d..54b123d6563e 100644
--- a/block/blk-flush.c
+++ b/block/blk-flush.c
@@ -205,7 +205,6 @@ static void bio_end_flush(struct bio *bio, int err)
205 * @bdev: blockdev to issue flush for 205 * @bdev: blockdev to issue flush for
206 * @gfp_mask: memory allocation flags (for bio_alloc) 206 * @gfp_mask: memory allocation flags (for bio_alloc)
207 * @error_sector: error sector 207 * @error_sector: error sector
208 * @flags: BLKDEV_IFL_* flags to control behaviour
209 * 208 *
210 * Description: 209 * Description:
211 * Issue a flush for the block device in question. Caller can supply 210 * Issue a flush for the block device in question. Caller can supply
@@ -214,7 +213,7 @@ static void bio_end_flush(struct bio *bio, int err)
214 * request was pushed in some internal queue for later handling. 213 * request was pushed in some internal queue for later handling.
215 */ 214 */
216int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask, 215int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
217 sector_t *error_sector, unsigned long flags) 216 sector_t *error_sector)
218{ 217{
219 DECLARE_COMPLETION_ONSTACK(wait); 218 DECLARE_COMPLETION_ONSTACK(wait);
220 struct request_queue *q; 219 struct request_queue *q;
@@ -240,21 +239,19 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
240 bio = bio_alloc(gfp_mask, 0); 239 bio = bio_alloc(gfp_mask, 0);
241 bio->bi_end_io = bio_end_flush; 240 bio->bi_end_io = bio_end_flush;
242 bio->bi_bdev = bdev; 241 bio->bi_bdev = bdev;
243 if (test_bit(BLKDEV_WAIT, &flags)) 242 bio->bi_private = &wait;
244 bio->bi_private = &wait;
245 243
246 bio_get(bio); 244 bio_get(bio);
247 submit_bio(WRITE_FLUSH, bio); 245 submit_bio(WRITE_FLUSH, bio);
248 if (test_bit(BLKDEV_WAIT, &flags)) { 246 wait_for_completion(&wait);
249 wait_for_completion(&wait); 247
250 /* 248 /*
251 * The driver must store the error location in ->bi_sector, if 249 * The driver must store the error location in ->bi_sector, if
252 * it supports it. For non-stacked drivers, this should be 250 * it supports it. For non-stacked drivers, this should be
253 * copied from blk_rq_pos(rq). 251 * copied from blk_rq_pos(rq).
254 */ 252 */
255 if (error_sector) 253 if (error_sector)
256 *error_sector = bio->bi_sector; 254 *error_sector = bio->bi_sector;
257 }
258 255
259 if (!bio_flagged(bio, BIO_UPTODATE)) 256 if (!bio_flagged(bio, BIO_UPTODATE))
260 ret = -EIO; 257 ret = -EIO;