diff options
author | Jens Axboe <axboe@fb.com> | 2015-11-10 12:14:38 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-10 12:14:38 -0500 |
commit | c1c534609fe8a859f9c8108a5591e6e8a97e34d1 (patch) | |
tree | f064a2591788be8ac0fcaf4315ed38f8e33bff3a /fs/direct-io.c | |
parent | 15c4f638f3d41bae52105ca4c0c8760afbcbeaab (diff) |
direct-io: be sure to assign dio->bio_bdev for both paths
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>
Diffstat (limited to 'fs/direct-io.c')
-rw-r--r-- | fs/direct-io.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c index 7025029c666f..15381c474a11 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -399,14 +399,14 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio) | |||
399 | if (dio->is_async && dio->rw == READ && dio->should_dirty) | 399 | if (dio->is_async && dio->rw == READ && dio->should_dirty) |
400 | bio_set_pages_dirty(bio); | 400 | bio_set_pages_dirty(bio); |
401 | 401 | ||
402 | dio->bio_bdev = bio->bi_bdev; | ||
403 | |||
402 | if (sdio->submit_io) { | 404 | if (sdio->submit_io) { |
403 | sdio->submit_io(dio->rw, bio, dio->inode, | 405 | sdio->submit_io(dio->rw, bio, dio->inode, |
404 | sdio->logical_offset_in_bio); | 406 | sdio->logical_offset_in_bio); |
405 | dio->bio_cookie = BLK_QC_T_NONE; | 407 | dio->bio_cookie = BLK_QC_T_NONE; |
406 | } else { | 408 | } else |
407 | dio->bio_cookie = submit_bio(dio->rw, bio); | 409 | dio->bio_cookie = submit_bio(dio->rw, bio); |
408 | dio->bio_bdev = bio->bi_bdev; | ||
409 | } | ||
410 | 410 | ||
411 | sdio->bio = NULL; | 411 | sdio->bio = NULL; |
412 | sdio->boundary = 0; | 412 | sdio->boundary = 0; |