[BLOCK] Don't allow empty barriers to be passed down to queues that don't grok them
authorJens Axboe <jens.axboe@oracle.com>
Fri, 2 Nov 2007 07:49:08 +0000 (08:49 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Fri, 2 Nov 2007 07:49:08 +0000 (08:49 +0100)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/ll_rw_blk.c

index 56f2646612e604c2599b3ba8589f99adbf752fcb..3e4e8bfbe856f49dbfa8d909a2945dc2333acade 100644 (file)
@@ -3221,6 +3221,7 @@ static inline void __generic_make_request(struct bio *bio)
        sector_t old_sector;
        int ret, nr_sectors = bio_sectors(bio);
        dev_t old_dev;
+       int err = -EIO;
 
        might_sleep();
 
@@ -3248,7 +3249,7 @@ static inline void __generic_make_request(struct bio *bio)
                                bdevname(bio->bi_bdev, b),
                                (long long) bio->bi_sector);
 end_io:
-                       bio_endio(bio, -EIO);
+                       bio_endio(bio, err);
                        break;
                }
 
@@ -3283,6 +3284,10 @@ end_io:
 
                if (bio_check_eod(bio, nr_sectors))
                        goto end_io;
+               if (bio_empty_barrier(bio) && !q->prepare_flush_fn) {
+                       err = -EOPNOTSUPP;
+                       goto end_io;
+               }
 
                ret = q->make_request_fn(q, bio);
        } while (ret);