diff options
-rw-r--r-- | fs/ext2/inode.c | 4 | ||||
-rw-r--r-- | fs/ext3/inode.c | 5 | ||||
-rw-r--r-- | fs/ext4/inode.c | 12 | ||||
-rw-r--r-- | fs/fat/inode.c | 4 | ||||
-rw-r--r-- | fs/hfs/inode.c | 4 | ||||
-rw-r--r-- | fs/hfsplus/inode.c | 4 | ||||
-rw-r--r-- | fs/jfs/inode.c | 4 | ||||
-rw-r--r-- | fs/nilfs2/inode.c | 4 | ||||
-rw-r--r-- | fs/reiserfs/inode.c | 5 | ||||
-rw-r--r-- | include/linux/fs.h | 9 |
10 files changed, 26 insertions, 29 deletions
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 06e7c767ab35..a8a58f63f07c 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -843,8 +843,8 @@ ext2_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
843 | struct inode *inode = mapping->host; | 843 | struct inode *inode = mapping->host; |
844 | ssize_t ret; | 844 | ssize_t ret; |
845 | 845 | ||
846 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, | 846 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
847 | iov, offset, nr_segs, ext2_get_block, NULL); | 847 | ext2_get_block); |
848 | if (ret < 0 && (rw & WRITE)) | 848 | if (ret < 0 && (rw & WRITE)) |
849 | ext2_write_failed(mapping, offset + iov_length(iov, nr_segs)); | 849 | ext2_write_failed(mapping, offset + iov_length(iov, nr_segs)); |
850 | return ret; | 850 | return ret; |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 99c28b246b89..2978a2a17a59 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -1816,9 +1816,8 @@ static ssize_t ext3_direct_IO(int rw, struct kiocb *iocb, | |||
1816 | } | 1816 | } |
1817 | 1817 | ||
1818 | retry: | 1818 | retry: |
1819 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 1819 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
1820 | offset, nr_segs, | 1820 | ext3_get_block); |
1821 | ext3_get_block, NULL); | ||
1822 | /* | 1821 | /* |
1823 | * In case of error extending write may have instantiated a few | 1822 | * In case of error extending write may have instantiated a few |
1824 | * blocks outside i_size. Trim these off again. | 1823 | * blocks outside i_size. Trim these off again. |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 9ec0a2ba2502..1f35573a34e1 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -3501,10 +3501,8 @@ retry: | |||
3501 | offset, nr_segs, | 3501 | offset, nr_segs, |
3502 | ext4_get_block, NULL, NULL, 0); | 3502 | ext4_get_block, NULL, NULL, 0); |
3503 | else { | 3503 | else { |
3504 | ret = blockdev_direct_IO(rw, iocb, inode, | 3504 | ret = blockdev_direct_IO(rw, iocb, inode, iov, |
3505 | inode->i_sb->s_bdev, iov, | 3505 | offset, nr_segs, ext4_get_block); |
3506 | offset, nr_segs, | ||
3507 | ext4_get_block, NULL); | ||
3508 | 3506 | ||
3509 | if (unlikely((rw & WRITE) && ret < 0)) { | 3507 | if (unlikely((rw & WRITE) && ret < 0)) { |
3510 | loff_t isize = i_size_read(inode); | 3508 | loff_t isize = i_size_read(inode); |
@@ -3748,11 +3746,13 @@ static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | |||
3748 | EXT4_I(inode)->cur_aio_dio = iocb->private; | 3746 | EXT4_I(inode)->cur_aio_dio = iocb->private; |
3749 | } | 3747 | } |
3750 | 3748 | ||
3751 | ret = blockdev_direct_IO(rw, iocb, inode, | 3749 | ret = __blockdev_direct_IO(rw, iocb, inode, |
3752 | inode->i_sb->s_bdev, iov, | 3750 | inode->i_sb->s_bdev, iov, |
3753 | offset, nr_segs, | 3751 | offset, nr_segs, |
3754 | ext4_get_block_write, | 3752 | ext4_get_block_write, |
3755 | ext4_end_io_dio); | 3753 | ext4_end_io_dio, |
3754 | NULL, | ||
3755 | DIO_LOCKING | DIO_SKIP_HOLES); | ||
3756 | if (iocb->private) | 3756 | if (iocb->private) |
3757 | EXT4_I(inode)->cur_aio_dio = NULL; | 3757 | EXT4_I(inode)->cur_aio_dio = NULL; |
3758 | /* | 3758 | /* |
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 3decce46c38f..5942fec22c65 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -211,8 +211,8 @@ static ssize_t fat_direct_IO(int rw, struct kiocb *iocb, | |||
211 | * FAT need to use the DIO_LOCKING for avoiding the race | 211 | * FAT need to use the DIO_LOCKING for avoiding the race |
212 | * condition of fat_get_block() and ->truncate(). | 212 | * condition of fat_get_block() and ->truncate(). |
213 | */ | 213 | */ |
214 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, | 214 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
215 | iov, offset, nr_segs, fat_get_block, NULL); | 215 | fat_get_block); |
216 | if (ret < 0 && (rw & WRITE)) | 216 | if (ret < 0 && (rw & WRITE)) |
217 | fat_write_failed(mapping, offset + iov_length(iov, nr_segs)); | 217 | fat_write_failed(mapping, offset + iov_length(iov, nr_segs)); |
218 | 218 | ||
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index 48d567cc203e..5e7c3f309617 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c | |||
@@ -123,8 +123,8 @@ static ssize_t hfs_direct_IO(int rw, struct kiocb *iocb, | |||
123 | struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host; | 123 | struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host; |
124 | ssize_t ret; | 124 | ssize_t ret; |
125 | 125 | ||
126 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 126 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
127 | offset, nr_segs, hfs_get_block, NULL); | 127 | hfs_get_block); |
128 | 128 | ||
129 | /* | 129 | /* |
130 | * In case of error extending write may have instantiated a few | 130 | * In case of error extending write may have instantiated a few |
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c index b0a0a4b621eb..5b1cb98741cc 100644 --- a/fs/hfsplus/inode.c +++ b/fs/hfsplus/inode.c | |||
@@ -119,8 +119,8 @@ static ssize_t hfsplus_direct_IO(int rw, struct kiocb *iocb, | |||
119 | struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host; | 119 | struct inode *inode = file->f_path.dentry->d_inode->i_mapping->host; |
120 | ssize_t ret; | 120 | ssize_t ret; |
121 | 121 | ||
122 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 122 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
123 | offset, nr_segs, hfsplus_get_block, NULL); | 123 | hfsplus_get_block); |
124 | 124 | ||
125 | /* | 125 | /* |
126 | * In case of error extending write may have instantiated a few | 126 | * In case of error extending write may have instantiated a few |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 109655904bbc..77b69b27f825 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
@@ -329,8 +329,8 @@ static ssize_t jfs_direct_IO(int rw, struct kiocb *iocb, | |||
329 | struct inode *inode = file->f_mapping->host; | 329 | struct inode *inode = file->f_mapping->host; |
330 | ssize_t ret; | 330 | ssize_t ret; |
331 | 331 | ||
332 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 332 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
333 | offset, nr_segs, jfs_get_block, NULL); | 333 | jfs_get_block); |
334 | 334 | ||
335 | /* | 335 | /* |
336 | * In case of error extending write may have instantiated a few | 336 | * In case of error extending write may have instantiated a few |
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 13f113154a9f..666628b395f1 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -259,8 +259,8 @@ nilfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, | |||
259 | return 0; | 259 | return 0; |
260 | 260 | ||
261 | /* Needs synchronization with the cleaner */ | 261 | /* Needs synchronization with the cleaner */ |
262 | size = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 262 | size = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
263 | offset, nr_segs, nilfs_get_block, NULL); | 263 | nilfs_get_block); |
264 | 264 | ||
265 | /* | 265 | /* |
266 | * In case of error extending write may have instantiated a few | 266 | * In case of error extending write may have instantiated a few |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index dcf543d8caf1..2922b90ceac1 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -3068,9 +3068,8 @@ static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb, | |||
3068 | struct inode *inode = file->f_mapping->host; | 3068 | struct inode *inode = file->f_mapping->host; |
3069 | ssize_t ret; | 3069 | ssize_t ret; |
3070 | 3070 | ||
3071 | ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, | 3071 | ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, |
3072 | offset, nr_segs, | 3072 | reiserfs_get_blocks_direct_io); |
3073 | reiserfs_get_blocks_direct_io, NULL); | ||
3074 | 3073 | ||
3075 | /* | 3074 | /* |
3076 | * In case of error extending write may have instantiated a few | 3075 | * In case of error extending write may have instantiated a few |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 2fe920774abf..824453be9fee 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2418,12 +2418,11 @@ ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, | |||
2418 | dio_submit_t submit_io, int flags); | 2418 | dio_submit_t submit_io, int flags); |
2419 | 2419 | ||
2420 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, | 2420 | static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, |
2421 | struct inode *inode, struct block_device *bdev, const struct iovec *iov, | 2421 | struct inode *inode, const struct iovec *iov, loff_t offset, |
2422 | loff_t offset, unsigned long nr_segs, get_block_t get_block, | 2422 | unsigned long nr_segs, get_block_t get_block) |
2423 | dio_iodone_t end_io) | ||
2424 | { | 2423 | { |
2425 | return __blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, | 2424 | return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, |
2426 | nr_segs, get_block, end_io, NULL, | 2425 | offset, nr_segs, get_block, NULL, NULL, |
2427 | DIO_LOCKING | DIO_SKIP_HOLES); | 2426 | DIO_LOCKING | DIO_SKIP_HOLES); |
2428 | } | 2427 | } |
2429 | #endif | 2428 | #endif |