aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext2/inode.c4
-rw-r--r--fs/ext3/inode.c5
-rw-r--r--fs/ext4/inode.c12
-rw-r--r--fs/fat/inode.c4
-rw-r--r--fs/hfs/inode.c4
-rw-r--r--fs/hfsplus/inode.c4
-rw-r--r--fs/jfs/inode.c4
-rw-r--r--fs/nilfs2/inode.c4
-rw-r--r--fs/reiserfs/inode.c5
-rw-r--r--include/linux/fs.h9
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
1818retry: 1818retry:
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
2420static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, 2420static 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