diff --git a/[refs] b/[refs] index 51fa7f6fd71d..d091c75ce561 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2669b19fa4debcdd6a660ace1a124c0900f113e6 +refs/heads/master: f10d9f617a65905c556c3b37c9b9646ae7d04ed7 diff --git a/trunk/block/blk-barrier.c b/trunk/block/blk-barrier.c index eefbde835308..557f69360b6a 100644 --- a/trunk/block/blk-barrier.c +++ b/trunk/block/blk-barrier.c @@ -310,6 +310,15 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask, if (!q) return -ENXIO; + /* + * some block devices may not have their queue correctly set up here + * (e.g. loop device without a backing file) and so issuing a flush + * here will panic. Ensure there is a request function before issuing + * the barrier. + */ + if (!q->make_request_fn) + return -ENXIO; + bio = bio_alloc(gfp_mask, 0); bio->bi_end_io = bio_end_empty_barrier; bio->bi_bdev = bdev;