Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pass iov_iter to ->direct_IO()

unmodified, for now

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro d8d3d94b cb66a7a1

+117 -126
+1 -2
Documentation/filesystems/Locking
··· 196 196 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 197 197 int (*releasepage) (struct page *, int); 198 198 void (*freepage)(struct page *); 199 - int (*direct_IO)(int, struct kiocb *, const struct iovec *iov, 200 - loff_t offset, unsigned long nr_segs); 199 + int (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); 201 200 int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **, 202 201 unsigned long *); 203 202 int (*migratepage)(struct address_space *, struct page *, struct page *);
+1 -2
Documentation/filesystems/vfs.txt
··· 589 589 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 590 590 int (*releasepage) (struct page *, int); 591 591 void (*freepage)(struct page *); 592 - ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, 593 - loff_t offset, unsigned long nr_segs); 592 + ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); 594 593 struct page* (*get_xip_page)(struct address_space *, sector_t, 595 594 int); 596 595 /* migrate the contents of a page to the specified target */
+8 -9
drivers/staging/lustre/lustre/llite/rw26.c
··· 363 363 #define MAX_DIO_SIZE ((MAX_MALLOC / sizeof(struct brw_page) * PAGE_CACHE_SIZE) & \ 364 364 ~(DT_MAX_BRW_SIZE - 1)) 365 365 static ssize_t ll_direct_IO_26(int rw, struct kiocb *iocb, 366 - const struct iovec *iov, loff_t file_offset, 367 - unsigned long nr_segs) 366 + struct iov_iter *iter, loff_t file_offset) 368 367 { 369 368 struct lu_env *env; 370 369 struct cl_io *io; 371 370 struct file *file = iocb->ki_filp; 372 371 struct inode *inode = file->f_mapping->host; 373 372 struct ccc_object *obj = cl_inode2ccc(inode); 374 - long count = iov_length(iov, nr_segs); 373 + long count = iov_length(iter->iov, iter->nr_segs); 375 374 long tot_bytes = 0, result = 0; 376 375 struct ll_inode_info *lli = ll_i2info(inode); 377 376 unsigned long seg = 0; ··· 391 392 MAX_DIO_SIZE >> PAGE_CACHE_SHIFT); 392 393 393 394 /* Check that all user buffers are aligned as well */ 394 - for (seg = 0; seg < nr_segs; seg++) { 395 - if (((unsigned long)iov[seg].iov_base & ~CFS_PAGE_MASK) || 396 - (iov[seg].iov_len & ~CFS_PAGE_MASK)) 395 + for (seg = 0; seg < iter->nr_segs; seg++) { 396 + if (((unsigned long)iter->iov[seg].iov_base & ~CFS_PAGE_MASK) || 397 + (iter->iov[seg].iov_len & ~CFS_PAGE_MASK)) 397 398 return -EINVAL; 398 399 } 399 400 ··· 410 411 mutex_lock(&inode->i_mutex); 411 412 412 413 LASSERT(obj->cob_transient_pages == 0); 413 - for (seg = 0; seg < nr_segs; seg++) { 414 - long iov_left = iov[seg].iov_len; 415 - unsigned long user_addr = (unsigned long)iov[seg].iov_base; 414 + for (seg = 0; seg < iter->nr_segs; seg++) { 415 + long iov_left = iter->iov[seg].iov_len; 416 + unsigned long user_addr = (unsigned long)iter->iov[seg].iov_base; 416 417 417 418 if (rw == READ) { 418 419 if (file_offset >= i_size_read(inode))
+2 -3
fs/9p/vfs_addr.c
··· 259 259 * 260 260 */ 261 261 static ssize_t 262 - v9fs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 263 - loff_t pos, unsigned long nr_segs) 262 + v9fs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, loff_t pos) 264 263 { 265 264 /* 266 265 * FIXME ··· 268 269 */ 269 270 p9_debug(P9_DEBUG_VFS, "v9fs_direct_IO: v9fs_direct_IO (%s) off/no(%lld/%lu) EINVAL\n", 270 271 iocb->ki_filp->f_path.dentry->d_name.name, 271 - (long long)pos, nr_segs); 272 + (long long)pos, iter->nr_segs); 272 273 273 274 return -EINVAL; 274 275 }
+5 -4
fs/block_dev.c
··· 165 165 } 166 166 167 167 static ssize_t 168 - blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 169 - loff_t offset, unsigned long nr_segs) 168 + blkdev_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 169 + loff_t offset) 170 170 { 171 171 struct file *file = iocb->ki_filp; 172 172 struct inode *inode = file->f_mapping->host; 173 173 174 - return __blockdev_direct_IO(rw, iocb, inode, I_BDEV(inode), iov, offset, 175 - nr_segs, blkdev_get_block, NULL, NULL, 0); 174 + return __blockdev_direct_IO(rw, iocb, inode, I_BDEV(inode), iter->iov, 175 + offset, iter->nr_segs, blkdev_get_block, 176 + NULL, NULL, 0); 176 177 } 177 178 178 179 int __sync_blockdev(struct block_device *bdev, int wait)
+6 -6
fs/btrfs/inode.c
··· 7433 7433 } 7434 7434 7435 7435 static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, 7436 - const struct iovec *iov, loff_t offset, 7437 - unsigned long nr_segs) 7436 + struct iov_iter *iter, loff_t offset) 7438 7437 { 7439 7438 struct file *file = iocb->ki_filp; 7440 7439 struct inode *inode = file->f_mapping->host; ··· 7443 7444 bool relock = false; 7444 7445 ssize_t ret; 7445 7446 7446 - if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov, 7447 - offset, nr_segs)) 7447 + if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iter->iov, 7448 + offset, iter->nr_segs)) 7448 7449 return 0; 7449 7450 7450 7451 atomic_inc(&inode->i_dio_count); ··· 7456 7457 * we need to flush the dirty pages again to make absolutely sure 7457 7458 * that any outstanding dirty pages are on disk. 7458 7459 */ 7459 - count = iov_length(iov, nr_segs); 7460 + count = iov_length(iter->iov, iter->nr_segs); 7460 7461 if (test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, 7461 7462 &BTRFS_I(inode)->runtime_flags)) 7462 7463 filemap_fdatawrite_range(inode->i_mapping, offset, count); ··· 7483 7484 7484 7485 ret = __blockdev_direct_IO(rw, iocb, inode, 7485 7486 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev, 7486 - iov, offset, nr_segs, btrfs_get_blocks_direct, NULL, 7487 + iter->iov, offset, iter->nr_segs, 7488 + btrfs_get_blocks_direct, NULL, 7487 7489 btrfs_submit_direct, flags); 7488 7490 if (rw & WRITE) { 7489 7491 if (ret < 0 && ret != -EIOCBQUEUED)
+2 -2
fs/ceph/addr.c
··· 1187 1187 * never get called. 1188 1188 */ 1189 1189 static ssize_t ceph_direct_io(int rw, struct kiocb *iocb, 1190 - const struct iovec *iov, 1191 - loff_t pos, unsigned long nr_segs) 1190 + struct iov_iter *iter, 1191 + loff_t pos) 1192 1192 { 1193 1193 WARN_ON(1); 1194 1194 return -EINVAL;
+2 -2
fs/cifs/file.c
··· 3702 3702 * Direct IO is not yet supported in the cached mode. 3703 3703 */ 3704 3704 static ssize_t 3705 - cifs_direct_io(int rw, struct kiocb *iocb, const struct iovec *iov, 3706 - loff_t pos, unsigned long nr_segs) 3705 + cifs_direct_io(int rw, struct kiocb *iocb, struct iov_iter *iter, 3706 + loff_t pos) 3707 3707 { 3708 3708 /* 3709 3709 * FIXME
+1 -1
fs/exofs/inode.c
··· 964 964 965 965 /* TODO: Should be easy enough to do proprly */ 966 966 static ssize_t exofs_direct_IO(int rw, struct kiocb *iocb, 967 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 967 + struct iov_iter *iter, loff_t offset) 968 968 { 969 969 return 0; 970 970 }
+6 -5
fs/ext2/inode.c
··· 850 850 } 851 851 852 852 static ssize_t 853 - ext2_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 854 - loff_t offset, unsigned long nr_segs) 853 + ext2_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 854 + loff_t offset) 855 855 { 856 856 struct file *file = iocb->ki_filp; 857 857 struct address_space *mapping = file->f_mapping; 858 858 struct inode *inode = mapping->host; 859 859 ssize_t ret; 860 860 861 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 862 - ext2_get_block); 861 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 862 + iter->nr_segs, ext2_get_block); 863 863 if (ret < 0 && (rw & WRITE)) 864 - ext2_write_failed(mapping, offset + iov_length(iov, nr_segs)); 864 + ext2_write_failed(mapping, offset + 865 + iov_length(iter->iov, iter->nr_segs)); 865 866 return ret; 866 867 } 867 868
+7 -9
fs/ext3/inode.c
··· 1820 1820 * VFS code falls back into buffered path in that case so we are safe. 1821 1821 */ 1822 1822 static ssize_t ext3_direct_IO(int rw, struct kiocb *iocb, 1823 - const struct iovec *iov, loff_t offset, 1824 - unsigned long nr_segs) 1823 + struct iov_iter *iter, loff_t offset) 1825 1824 { 1826 1825 struct file *file = iocb->ki_filp; 1827 1826 struct inode *inode = file->f_mapping->host; ··· 1828 1829 handle_t *handle; 1829 1830 ssize_t ret; 1830 1831 int orphan = 0; 1831 - size_t count = iov_length(iov, nr_segs); 1832 + size_t count = iov_length(iter->iov, iter->nr_segs); 1832 1833 int retries = 0; 1833 1834 1834 - trace_ext3_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); 1835 + trace_ext3_direct_IO_enter(inode, offset, count, rw); 1835 1836 1836 1837 if (rw == WRITE) { 1837 1838 loff_t final_size = offset + count; ··· 1855 1856 } 1856 1857 1857 1858 retry: 1858 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 1859 - ext3_get_block); 1859 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 1860 + iter->nr_segs, ext3_get_block); 1860 1861 /* 1861 1862 * In case of error extending write may have instantiated a few 1862 1863 * blocks outside i_size. Trim these off again. 1863 1864 */ 1864 1865 if (unlikely((rw & WRITE) && ret < 0)) { 1865 1866 loff_t isize = i_size_read(inode); 1866 - loff_t end = offset + iov_length(iov, nr_segs); 1867 + loff_t end = offset + count; 1867 1868 1868 1869 if (end > isize) 1869 1870 ext3_truncate_failed_direct_write(inode); ··· 1908 1909 ret = err; 1909 1910 } 1910 1911 out: 1911 - trace_ext3_direct_IO_exit(inode, offset, 1912 - iov_length(iov, nr_segs), rw, ret); 1912 + trace_ext3_direct_IO_exit(inode, offset, count, rw, ret); 1913 1913 return ret; 1914 1914 } 1915 1915
+5 -6
fs/ext4/inode.c
··· 3222 3222 } 3223 3223 3224 3224 static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, 3225 - const struct iovec *iov, loff_t offset, 3226 - unsigned long nr_segs) 3225 + struct iov_iter *iter, loff_t offset) 3227 3226 { 3228 3227 struct file *file = iocb->ki_filp; 3229 3228 struct inode *inode = file->f_mapping->host; ··· 3238 3239 if (ext4_has_inline_data(inode)) 3239 3240 return 0; 3240 3241 3241 - trace_ext4_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); 3242 + trace_ext4_direct_IO_enter(inode, offset, iov_length(iter->iov, iter->nr_segs), rw); 3242 3243 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) 3243 - ret = ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); 3244 + ret = ext4_ext_direct_IO(rw, iocb, iter->iov, offset, iter->nr_segs); 3244 3245 else 3245 - ret = ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); 3246 + ret = ext4_ind_direct_IO(rw, iocb, iter->iov, offset, iter->nr_segs); 3246 3247 trace_ext4_direct_IO_exit(inode, offset, 3247 - iov_length(iov, nr_segs), rw, ret); 3248 + iov_length(iter->iov, iter->nr_segs), rw, ret); 3248 3249 return ret; 3249 3250 } 3250 3251
+4 -4
fs/f2fs/data.c
··· 1010 1010 } 1011 1011 1012 1012 static ssize_t f2fs_direct_IO(int rw, struct kiocb *iocb, 1013 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 1013 + struct iov_iter *iter, loff_t offset) 1014 1014 { 1015 1015 struct file *file = iocb->ki_filp; 1016 1016 struct inode *inode = file->f_mapping->host; ··· 1019 1019 if (f2fs_has_inline_data(inode)) 1020 1020 return 0; 1021 1021 1022 - if (check_direct_IO(inode, rw, iov, offset, nr_segs)) 1022 + if (check_direct_IO(inode, rw, iter->iov, offset, iter->nr_segs)) 1023 1023 return 0; 1024 1024 1025 - return blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 1026 - get_data_block); 1025 + return blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 1026 + iter->nr_segs, get_data_block); 1027 1027 } 1028 1028 1029 1029 static void f2fs_invalidate_data_page(struct page *page, unsigned int offset,
+7 -6
fs/fat/inode.c
··· 185 185 } 186 186 187 187 static ssize_t fat_direct_IO(int rw, struct kiocb *iocb, 188 - const struct iovec *iov, 189 - loff_t offset, unsigned long nr_segs) 188 + struct iov_iter *iter, 189 + loff_t offset) 190 190 { 191 191 struct file *file = iocb->ki_filp; 192 192 struct address_space *mapping = file->f_mapping; ··· 203 203 * 204 204 * Return 0, and fallback to normal buffered write. 205 205 */ 206 - loff_t size = offset + iov_length(iov, nr_segs); 206 + loff_t size = offset + iov_length(iter->iov, iter->nr_segs); 207 207 if (MSDOS_I(inode)->mmu_private < size) 208 208 return 0; 209 209 } ··· 212 212 * FAT need to use the DIO_LOCKING for avoiding the race 213 213 * condition of fat_get_block() and ->truncate(). 214 214 */ 215 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 216 - fat_get_block); 215 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 216 + iter->nr_segs, fat_get_block); 217 217 if (ret < 0 && (rw & WRITE)) 218 - fat_write_failed(mapping, offset + iov_length(iov, nr_segs)); 218 + fat_write_failed(mapping, offset + 219 + iov_length(iter->iov, iter->nr_segs)); 219 220 220 221 return ret; 221 222 }
+5 -5
fs/fuse/file.c
··· 2890 2890 } 2891 2891 2892 2892 static ssize_t 2893 - fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 2894 - loff_t offset, unsigned long nr_segs) 2893 + fuse_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 2894 + loff_t offset) 2895 2895 { 2896 2896 ssize_t ret = 0; 2897 2897 struct file *file = iocb->ki_filp; ··· 2900 2900 loff_t pos = 0; 2901 2901 struct inode *inode; 2902 2902 loff_t i_size; 2903 - size_t count = iov_length(iov, nr_segs); 2903 + size_t count = iov_length(iter->iov, iter->nr_segs); 2904 2904 struct fuse_io_priv *io; 2905 2905 2906 2906 pos = offset; ··· 2944 2944 io->async = false; 2945 2945 2946 2946 if (rw == WRITE) 2947 - ret = __fuse_direct_write(io, iov, nr_segs, &pos); 2947 + ret = __fuse_direct_write(io, iter->iov, iter->nr_segs, &pos); 2948 2948 else 2949 - ret = __fuse_direct_read(io, iov, nr_segs, &pos, count); 2949 + ret = __fuse_direct_read(io, iter->iov, iter->nr_segs, &pos, count); 2950 2950 2951 2951 if (io->async) { 2952 2952 fuse_aio_complete(io, ret < 0 ? ret : 0, -1);
+5 -6
fs/gfs2/aops.c
··· 1041 1041 1042 1042 1043 1043 static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb, 1044 - const struct iovec *iov, loff_t offset, 1045 - unsigned long nr_segs) 1044 + struct iov_iter *iter, loff_t offset) 1046 1045 { 1047 1046 struct file *file = iocb->ki_filp; 1048 1047 struct inode *inode = file->f_mapping->host; ··· 1081 1082 */ 1082 1083 if (mapping->nrpages) { 1083 1084 loff_t lstart = offset & (PAGE_CACHE_SIZE - 1); 1084 - loff_t len = iov_length(iov, nr_segs); 1085 + loff_t len = iov_length(iter->iov, iter->nr_segs); 1085 1086 loff_t end = PAGE_ALIGN(offset + len) - 1; 1086 1087 1087 1088 rv = 0; ··· 1096 1097 truncate_inode_pages_range(mapping, lstart, end); 1097 1098 } 1098 1099 1099 - rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, 1100 - offset, nr_segs, gfs2_get_block_direct, 1101 - NULL, NULL, 0); 1100 + rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, 1101 + iter->iov, offset, iter->nr_segs, 1102 + gfs2_get_block_direct, NULL, NULL, 0); 1102 1103 out: 1103 1104 gfs2_glock_dq(&gh); 1104 1105 gfs2_holder_uninit(&gh);
+4 -4
fs/hfs/inode.c
··· 125 125 } 126 126 127 127 static ssize_t hfs_direct_IO(int rw, struct kiocb *iocb, 128 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 128 + struct iov_iter *iter, loff_t offset) 129 129 { 130 130 struct file *file = iocb->ki_filp; 131 131 struct address_space *mapping = file->f_mapping; 132 132 struct inode *inode = file_inode(file)->i_mapping->host; 133 133 ssize_t ret; 134 134 135 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 136 - hfs_get_block); 135 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 136 + iter->nr_segs, hfs_get_block); 137 137 138 138 /* 139 139 * In case of error extending write may have instantiated a few ··· 141 141 */ 142 142 if (unlikely((rw & WRITE) && ret < 0)) { 143 143 loff_t isize = i_size_read(inode); 144 - loff_t end = offset + iov_length(iov, nr_segs); 144 + loff_t end = offset + iov_length(iter->iov, iter->nr_segs); 145 145 146 146 if (end > isize) 147 147 hfs_write_failed(mapping, end);
+3 -3
fs/hfsplus/inode.c
··· 123 123 } 124 124 125 125 static ssize_t hfsplus_direct_IO(int rw, struct kiocb *iocb, 126 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 126 + struct iov_iter *iter, loff_t offset) 127 127 { 128 128 struct file *file = iocb->ki_filp; 129 129 struct address_space *mapping = file->f_mapping; 130 130 struct inode *inode = file_inode(file)->i_mapping->host; 131 131 ssize_t ret; 132 132 133 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 133 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, iter->nr_segs, 134 134 hfsplus_get_block); 135 135 136 136 /* ··· 139 139 */ 140 140 if (unlikely((rw & WRITE) && ret < 0)) { 141 141 loff_t isize = i_size_read(inode); 142 - loff_t end = offset + iov_length(iov, nr_segs); 142 + loff_t end = offset + iov_length(iter->iov, iter->nr_segs); 143 143 144 144 if (end > isize) 145 145 hfsplus_write_failed(mapping, end);
+4 -4
fs/jfs/inode.c
··· 331 331 } 332 332 333 333 static ssize_t jfs_direct_IO(int rw, struct kiocb *iocb, 334 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 334 + struct iov_iter *iter, loff_t offset) 335 335 { 336 336 struct file *file = iocb->ki_filp; 337 337 struct address_space *mapping = file->f_mapping; 338 338 struct inode *inode = file->f_mapping->host; 339 339 ssize_t ret; 340 340 341 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 342 - jfs_get_block); 341 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 342 + iter->nr_segs, jfs_get_block); 343 343 344 344 /* 345 345 * In case of error extending write may have instantiated a few ··· 347 347 */ 348 348 if (unlikely((rw & WRITE) && ret < 0)) { 349 349 loff_t isize = i_size_read(inode); 350 - loff_t end = offset + iov_length(iov, nr_segs); 350 + loff_t end = offset + iov_length(iter->iov, iter->nr_segs); 351 351 352 352 if (end > isize) 353 353 jfs_write_failed(mapping, end);
+4 -4
fs/nfs/direct.c
··· 121 121 * shunt off direct read and write requests before the VFS gets them, 122 122 * so this method is only ever called for swap. 123 123 */ 124 - ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, loff_t pos, unsigned long nr_segs) 124 + ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, loff_t pos) 125 125 { 126 126 #ifndef CONFIG_NFS_SWAP 127 127 dprintk("NFS: nfs_direct_IO (%pD) off/no(%Ld/%lu) EINVAL\n", 128 - iocb->ki_filp, (long long) pos, nr_segs); 128 + iocb->ki_filp, (long long) pos, iter->nr_segs); 129 129 130 130 return -EINVAL; 131 131 #else 132 132 VM_BUG_ON(iocb->ki_nbytes != PAGE_SIZE); 133 133 134 134 if (rw == READ || rw == KERNEL_READ) 135 - return nfs_file_direct_read(iocb, iov, nr_segs, pos, 135 + return nfs_file_direct_read(iocb, iter->iov, iter->nr_segs, pos, 136 136 rw == READ ? true : false); 137 - return nfs_file_direct_write(iocb, iov, nr_segs, pos, 137 + return nfs_file_direct_write(iocb, iter->iov, iter->nr_segs, pos, 138 138 rw == WRITE ? true : false); 139 139 #endif /* CONFIG_NFS_SWAP */ 140 140 }
+5 -5
fs/nilfs2/inode.c
··· 298 298 } 299 299 300 300 static ssize_t 301 - nilfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 302 - loff_t offset, unsigned long nr_segs) 301 + nilfs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 302 + loff_t offset) 303 303 { 304 304 struct file *file = iocb->ki_filp; 305 305 struct address_space *mapping = file->f_mapping; ··· 310 310 return 0; 311 311 312 312 /* Needs synchronization with the cleaner */ 313 - size = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 314 - nilfs_get_block); 313 + size = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 314 + iter->nr_segs, nilfs_get_block); 315 315 316 316 /* 317 317 * In case of error extending write may have instantiated a few ··· 319 319 */ 320 320 if (unlikely((rw & WRITE) && size < 0)) { 321 321 loff_t isize = i_size_read(inode); 322 - loff_t end = offset + iov_length(iov, nr_segs); 322 + loff_t end = offset + iov_length(iter->iov, iter->nr_segs); 323 323 324 324 if (end > isize) 325 325 nilfs_write_failed(mapping, end);
+3 -4
fs/ocfs2/aops.c
··· 599 599 600 600 static ssize_t ocfs2_direct_IO(int rw, 601 601 struct kiocb *iocb, 602 - const struct iovec *iov, 603 - loff_t offset, 604 - unsigned long nr_segs) 602 + struct iov_iter *iter, 603 + loff_t offset) 605 604 { 606 605 struct file *file = iocb->ki_filp; 607 606 struct inode *inode = file_inode(file)->i_mapping->host; ··· 617 618 return 0; 618 619 619 620 return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, 620 - iov, offset, nr_segs, 621 + iter->iov, offset, iter->nr_segs, 621 622 ocfs2_direct_IO_get_blocks, 622 623 ocfs2_dio_end_io, NULL, 0); 623 624 }
+4 -5
fs/reiserfs/inode.c
··· 3083 3083 /* We thank Mingming Cao for helping us understand in great detail what 3084 3084 to do in this section of the code. */ 3085 3085 static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb, 3086 - const struct iovec *iov, loff_t offset, 3087 - unsigned long nr_segs) 3086 + struct iov_iter *iter, loff_t offset) 3088 3087 { 3089 3088 struct file *file = iocb->ki_filp; 3090 3089 struct inode *inode = file->f_mapping->host; 3091 3090 ssize_t ret; 3092 3091 3093 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 3094 - reiserfs_get_blocks_direct_io); 3092 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, 3093 + iter->nr_segs, reiserfs_get_blocks_direct_io); 3095 3094 3096 3095 /* 3097 3096 * In case of error extending write may have instantiated a few ··· 3098 3099 */ 3099 3100 if (unlikely((rw & WRITE) && ret < 0)) { 3100 3101 loff_t isize = i_size_read(inode); 3101 - loff_t end = offset + iov_length(iov, nr_segs); 3102 + loff_t end = offset + iov_length(iter->iov, iter->nr_segs); 3102 3103 3103 3104 if ((end > isize) && inode_newsize_ok(inode, isize) == 0) { 3104 3105 truncate_setsize(inode, isize);
+2 -2
fs/udf/file.c
··· 119 119 } 120 120 121 121 static ssize_t udf_adinicb_direct_IO(int rw, struct kiocb *iocb, 122 - const struct iovec *iov, 123 - loff_t offset, unsigned long nr_segs) 122 + struct iov_iter *iter, 123 + loff_t offset) 124 124 { 125 125 /* Fallback to buffered I/O. */ 126 126 return 0;
+4 -4
fs/udf/inode.c
··· 217 217 } 218 218 219 219 static ssize_t udf_direct_IO(int rw, struct kiocb *iocb, 220 - const struct iovec *iov, 221 - loff_t offset, unsigned long nr_segs) 220 + struct iov_iter *iter, 221 + loff_t offset) 222 222 { 223 223 struct file *file = iocb->ki_filp; 224 224 struct address_space *mapping = file->f_mapping; 225 225 struct inode *inode = mapping->host; 226 226 ssize_t ret; 227 227 228 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 228 + ret = blockdev_direct_IO(rw, iocb, inode, iter->iov, offset, iter->nr_segs, 229 229 udf_get_block); 230 230 if (unlikely(ret < 0 && (rw & WRITE))) 231 - udf_write_failed(mapping, offset + iov_length(iov, nr_segs)); 231 + udf_write_failed(mapping, offset + iov_length(iter->iov, iter->nr_segs)); 232 232 return ret; 233 233 } 234 234
+7 -8
fs/xfs/xfs_aops.c
··· 1449 1449 xfs_vm_direct_IO( 1450 1450 int rw, 1451 1451 struct kiocb *iocb, 1452 - const struct iovec *iov, 1453 - loff_t offset, 1454 - unsigned long nr_segs) 1452 + struct iov_iter *iter, 1453 + loff_t offset) 1455 1454 { 1456 1455 struct inode *inode = iocb->ki_filp->f_mapping->host; 1457 1456 struct block_device *bdev = xfs_find_bdev_for_inode(inode); ··· 1458 1459 ssize_t ret; 1459 1460 1460 1461 if (rw & WRITE) { 1461 - size_t size = iov_length(iov, nr_segs); 1462 + size_t size = iov_length(iter->iov, iter->nr_segs); 1462 1463 1463 1464 /* 1464 1465 * We cannot preallocate a size update transaction here as we ··· 1470 1471 if (offset + size > XFS_I(inode)->i_d.di_size) 1471 1472 ioend->io_isdirect = 1; 1472 1473 1473 - ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, 1474 - offset, nr_segs, 1474 + ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iter->iov, 1475 + offset, iter->nr_segs, 1475 1476 xfs_get_blocks_direct, 1476 1477 xfs_end_io_direct_write, NULL, 1477 1478 DIO_ASYNC_EXTEND); 1478 1479 if (ret != -EIOCBQUEUED && iocb->private) 1479 1480 goto out_destroy_ioend; 1480 1481 } else { 1481 - ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, 1482 - offset, nr_segs, 1482 + ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iter->iov, 1483 + offset, iter->nr_segs, 1483 1484 xfs_get_blocks_direct, 1484 1485 NULL, NULL, 0); 1485 1486 }
+1 -2
include/linux/fs.h
··· 343 343 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 344 344 int (*releasepage) (struct page *, gfp_t); 345 345 void (*freepage)(struct page *); 346 - ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, 347 - loff_t offset, unsigned long nr_segs); 346 + ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); 348 347 int (*get_xip_mem)(struct address_space *, pgoff_t, int, 349 348 void **, unsigned long *); 350 349 /*
+1 -2
include/linux/nfs_fs.h
··· 459 459 /* 460 460 * linux/fs/nfs/direct.c 461 461 */ 462 - extern ssize_t nfs_direct_IO(int, struct kiocb *, const struct iovec *, loff_t, 463 - unsigned long); 462 + extern ssize_t nfs_direct_IO(int, struct kiocb *, struct iov_iter *, loff_t); 464 463 extern ssize_t nfs_file_direct_read(struct kiocb *iocb, 465 464 const struct iovec *iov, unsigned long nr_segs, 466 465 loff_t pos, bool uio);
+4 -5
mm/filemap.c
··· 1699 1699 size = i_size_read(inode); 1700 1700 retval = filemap_write_and_wait_range(mapping, pos, 1701 1701 pos + iov_length(iov, nr_segs) - 1); 1702 - if (!retval) { 1703 - retval = mapping->a_ops->direct_IO(READ, iocb, 1704 - iov, pos, nr_segs); 1705 - } 1702 + if (!retval) 1703 + retval = mapping->a_ops->direct_IO(READ, iocb, &i, pos); 1704 + 1706 1705 if (retval > 0) { 1707 1706 *ppos = pos + retval; 1708 1707 count -= retval; ··· 2382 2383 } 2383 2384 } 2384 2385 2385 - written = mapping->a_ops->direct_IO(WRITE, iocb, from->iov, pos, from->nr_segs); 2386 + written = mapping->a_ops->direct_IO(WRITE, iocb, from, pos); 2386 2387 2387 2388 /* 2388 2389 * Finally, try again to invalidate clean pages which might have been
+4 -2
mm/page_io.c
··· 263 263 .iov_base = kmap(page), 264 264 .iov_len = PAGE_SIZE, 265 265 }; 266 + struct iov_iter from; 266 267 267 268 init_sync_kiocb(&kiocb, swap_file); 268 269 kiocb.ki_pos = page_file_offset(page); 269 270 kiocb.ki_nbytes = PAGE_SIZE; 271 + iov_iter_init(&from, &iov, 1, PAGE_SIZE, 0); 270 272 271 273 set_page_writeback(page); 272 274 unlock_page(page); 273 275 ret = mapping->a_ops->direct_IO(KERNEL_WRITE, 274 - &kiocb, &iov, 275 - kiocb.ki_pos, 1); 276 + &kiocb, &from, 277 + kiocb.ki_pos); 276 278 kunmap(page); 277 279 if (ret == PAGE_SIZE) { 278 280 count_vm_event(PSWPOUT);