direct-io: be sure to assign dio->bio_bdev for both paths
authorJens Axboe <axboe@fb.com>
Tue, 10 Nov 2015 17:14:38 +0000 (10:14 -0700)
committerJens Axboe <axboe@fb.com>
Tue, 10 Nov 2015 17:14:38 +0000 (10:14 -0700)
btrfs sets ->submit_io(), and we failed to set the block dev for
that path. That resulted in a potential NULL dereference when
we later wait for IO in dio_await_one().

Reported-by: kernel test robot <ying.huang@linux.intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
fs/direct-io.c

index 7025029c666f5f6e7099c3b6a7dcf0f12687138b..15381c474a118e6b8a62c4d3fc242593a0c0e36a 100644 (file)
@@ -399,14 +399,14 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio)
        if (dio->is_async && dio->rw == READ && dio->should_dirty)
                bio_set_pages_dirty(bio);
 
+       dio->bio_bdev = bio->bi_bdev;
+
        if (sdio->submit_io) {
                sdio->submit_io(dio->rw, bio, dio->inode,
                               sdio->logical_offset_in_bio);
                dio->bio_cookie = BLK_QC_T_NONE;
-       } else {
+       } else
                dio->bio_cookie = submit_bio(dio->rw, bio);
-               dio->bio_bdev = bio->bi_bdev;
-       }
 
        sdio->bio = NULL;
        sdio->boundary = 0;