diff options
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 07ab2f0108bb..3ff70e744ad3 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2316,8 +2316,9 @@ int generic_direct_IO(int rw, struct inode *inode, struct kiobuf *iobuf, unsigned long blocknr, int blocksize, get_block_t *get_block) { - int i, nr_blocks, retval; + int i, nr_blocks, retval = 0; sector_t *blocks = iobuf->blocks; + struct block_device *bdev = NULL; nr_blocks = iobuf->length / blocksize; /* build the blocklist */ @@ -2347,11 +2348,12 @@ int generic_direct_IO(int rw, struct inode *inode, BUG(); } blocks[i] = bh.b_blocknr; + bdev = bh.b_bdev; } /* This does not understand multi-device filesystems currently */ - retval = brw_kiovec(rw, 1, &iobuf, - inode->i_sb->s_bdev, blocks, blocksize); + if (bdev) + retval = brw_kiovec(rw, 1, &iobuf, bdev, blocks, blocksize); out: return retval; |
