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

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull vfs updates from Al Viro:
"This the bunch that sat in -next + lock_parent() fix. This is the
minimal set; there's more pending stuff.

In particular, I really hope to get acct.c fixes merged this cycle -
we need that to deal sanely with delayed-mntput stuff. In the next
pile, hopefully - that series is fairly short and localized
(kernel/acct.c, fs/super.c and fs/namespace.c). In this pile: more
iov_iter work. Most of prereqs for ->splice_write with sane locking
order are there and Kent's dio rewrite would also fit nicely on top of
this pile"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (70 commits)
lock_parent: don't step on stale ->d_parent of all-but-freed one
kill generic_file_splice_write()
ceph: switch to iter_file_splice_write()
shmem: switch to iter_file_splice_write()
nfs: switch to iter_splice_write_file()
fs/splice.c: remove unneeded exports
ocfs2: switch to iter_file_splice_write()
->splice_write() via ->write_iter()
bio_vec-backed iov_iter
optimize copy_page_{to,from}_iter()
bury generic_file_aio_{read,write}
lustre: get rid of messing with iovecs
ceph: switch to ->write_iter()
ceph_sync_direct_write: stop poking into iov_iter guts
ceph_sync_read: stop poking into iov_iter guts
new helper: copy_page_from_iter()
fuse: switch to ->write_iter()
btrfs: switch to ->write_iter()
ocfs2: switch to ->write_iter()
xfs: switch to ->write_iter()
...

+1799 -2031
+3 -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 *); ··· 430 431 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 431 432 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 432 433 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 434 + ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 435 + ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 433 436 int (*iterate) (struct file *, struct dir_context *); 434 437 unsigned int (*poll) (struct file *, struct poll_table_struct *); 435 438 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+9 -4
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 */ ··· 806 807 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 807 808 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 808 809 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 810 + ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 811 + ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 809 812 int (*iterate) (struct file *, struct dir_context *); 810 813 unsigned int (*poll) (struct file *, struct poll_table_struct *); 811 814 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); ··· 838 837 839 838 read: called by read(2) and related system calls 840 839 841 - aio_read: called by io_submit(2) and other asynchronous I/O operations 840 + aio_read: vectored, possibly asynchronous read 841 + 842 + read_iter: possibly asynchronous read with iov_iter as destination 842 843 843 844 write: called by write(2) and related system calls 844 845 845 - aio_write: called by io_submit(2) and other asynchronous I/O operations 846 + aio_write: vectored, possibly asynchronous write 847 + 848 + write_iter: possibly asynchronous write with iov_iter as source 846 849 847 850 iterate: called when the VFS needs to read the directory contents 848 851
+4 -4
drivers/char/raw.c
··· 284 284 #endif 285 285 286 286 static const struct file_operations raw_fops = { 287 - .read = do_sync_read, 288 - .aio_read = generic_file_aio_read, 289 - .write = do_sync_write, 290 - .aio_write = blkdev_aio_write, 287 + .read = new_sync_read, 288 + .read_iter = generic_file_read_iter, 289 + .write = new_sync_write, 290 + .write_iter = blkdev_write_iter, 291 291 .fsync = blkdev_fsync, 292 292 .open = raw_open, 293 293 .release = raw_release,
+2 -2
drivers/mtd/nand/nandsim.c
··· 575 575 cfile = filp_open(cache_file, O_CREAT | O_RDWR | O_LARGEFILE, 0600); 576 576 if (IS_ERR(cfile)) 577 577 return PTR_ERR(cfile); 578 - if (!cfile->f_op->read && !cfile->f_op->aio_read) { 578 + if (!(cfile->f_mode & FMODE_CAN_READ)) { 579 579 NS_ERR("alloc_device: cache file not readable\n"); 580 580 err = -EINVAL; 581 581 goto err_close; 582 582 } 583 - if (!cfile->f_op->write && !cfile->f_op->aio_write) { 583 + if (!(cfile->f_mode & FMODE_CAN_WRITE)) { 584 584 NS_ERR("alloc_device: cache file not writeable\n"); 585 585 err = -EINVAL; 586 586 goto err_close;
+1 -10
drivers/staging/lustre/lustre/include/lclient.h
··· 82 82 /** 83 83 * I/O vector information to or from which read/write is going. 84 84 */ 85 - struct iovec *cui_iov; 86 - unsigned long cui_nrsegs; 87 - /** 88 - * Total iov count for left IO. 89 - */ 90 - unsigned long cui_tot_nrsegs; 91 - /** 92 - * Old length for iov that was truncated partially. 93 - */ 94 - size_t cui_iov_olen; 85 + struct iov_iter *cui_iter; 95 86 /** 96 87 * Total size for the left IO. 97 88 */
+3 -45
drivers/staging/lustre/lustre/lclient/lcommon_cl.c
··· 720 720 void ccc_io_update_iov(const struct lu_env *env, 721 721 struct ccc_io *cio, struct cl_io *io) 722 722 { 723 - int i; 724 723 size_t size = io->u.ci_rw.crw_count; 725 724 726 - cio->cui_iov_olen = 0; 727 - if (!cl_is_normalio(env, io) || cio->cui_tot_nrsegs == 0) 725 + if (!cl_is_normalio(env, io) || cio->cui_iter == NULL) 728 726 return; 729 727 730 - for (i = 0; i < cio->cui_tot_nrsegs; i++) { 731 - struct iovec *iv = &cio->cui_iov[i]; 732 - 733 - if (iv->iov_len < size) 734 - size -= iv->iov_len; 735 - else { 736 - if (iv->iov_len > size) { 737 - cio->cui_iov_olen = iv->iov_len; 738 - iv->iov_len = size; 739 - } 740 - break; 741 - } 742 - } 743 - 744 - cio->cui_nrsegs = i + 1; 745 - LASSERTF(cio->cui_tot_nrsegs >= cio->cui_nrsegs, 746 - "tot_nrsegs: %lu, nrsegs: %lu\n", 747 - cio->cui_tot_nrsegs, cio->cui_nrsegs); 728 + iov_iter_truncate(cio->cui_iter, size); 748 729 } 749 730 750 731 int ccc_io_one_lock(const struct lu_env *env, struct cl_io *io, ··· 756 775 if (!cl_is_normalio(env, io)) 757 776 return; 758 777 759 - LASSERT(cio->cui_tot_nrsegs >= cio->cui_nrsegs); 760 - LASSERT(cio->cui_tot_count >= nob); 761 - 762 - cio->cui_iov += cio->cui_nrsegs; 763 - cio->cui_tot_nrsegs -= cio->cui_nrsegs; 764 - cio->cui_tot_count -= nob; 765 - 766 - /* update the iov */ 767 - if (cio->cui_iov_olen > 0) { 768 - struct iovec *iv; 769 - 770 - cio->cui_iov--; 771 - cio->cui_tot_nrsegs++; 772 - iv = &cio->cui_iov[0]; 773 - if (io->ci_continue) { 774 - iv->iov_base += iv->iov_len; 775 - LASSERT(cio->cui_iov_olen > iv->iov_len); 776 - iv->iov_len = cio->cui_iov_olen - iv->iov_len; 777 - } else { 778 - /* restore the iov_len, in case of restart io. */ 779 - iv->iov_len = cio->cui_iov_olen; 780 - } 781 - cio->cui_iov_olen = 0; 782 - } 778 + iov_iter_reexpand(cio->cui_iter, cio->cui_tot_count -= nob); 783 779 } 784 780 785 781 /**
+19 -93
drivers/staging/lustre/lustre/llite/file.c
··· 1114 1114 1115 1115 switch (vio->cui_io_subtype) { 1116 1116 case IO_NORMAL: 1117 - cio->cui_iov = args->u.normal.via_iov; 1118 - cio->cui_nrsegs = args->u.normal.via_nrsegs; 1119 - cio->cui_tot_nrsegs = cio->cui_nrsegs; 1117 + cio->cui_iter = args->u.normal.via_iter; 1120 1118 cio->cui_iocb = args->u.normal.via_iocb; 1121 1119 if ((iot == CIT_WRITE) && 1122 1120 !(cio->cui_fd->fd_flags & LL_FILE_GROUP_LOCKED)) { ··· 1178 1180 return result; 1179 1181 } 1180 1182 1181 - static ssize_t ll_file_aio_read(struct kiocb *iocb, const struct iovec *iov, 1182 - unsigned long nr_segs, loff_t pos) 1183 + static ssize_t ll_file_read_iter(struct kiocb *iocb, struct iov_iter *to) 1183 1184 { 1184 1185 struct lu_env *env; 1185 1186 struct vvp_io_args *args; 1186 - size_t count = 0; 1187 1187 ssize_t result; 1188 1188 int refcheck; 1189 - 1190 - result = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE); 1191 - if (result) 1192 - return result; 1193 1189 1194 1190 env = cl_env_get(&refcheck); 1195 1191 if (IS_ERR(env)) 1196 1192 return PTR_ERR(env); 1197 1193 1198 1194 args = vvp_env_args(env, IO_NORMAL); 1199 - args->u.normal.via_iov = (struct iovec *)iov; 1200 - args->u.normal.via_nrsegs = nr_segs; 1195 + args->u.normal.via_iter = to; 1201 1196 args->u.normal.via_iocb = iocb; 1202 1197 1203 1198 result = ll_file_io_generic(env, args, iocb->ki_filp, CIT_READ, 1204 - &iocb->ki_pos, count); 1205 - cl_env_put(env, &refcheck); 1206 - return result; 1207 - } 1208 - 1209 - static ssize_t ll_file_read(struct file *file, char *buf, size_t count, 1210 - loff_t *ppos) 1211 - { 1212 - struct lu_env *env; 1213 - struct iovec *local_iov; 1214 - struct kiocb *kiocb; 1215 - ssize_t result; 1216 - int refcheck; 1217 - 1218 - env = cl_env_get(&refcheck); 1219 - if (IS_ERR(env)) 1220 - return PTR_ERR(env); 1221 - 1222 - local_iov = &vvp_env_info(env)->vti_local_iov; 1223 - kiocb = &vvp_env_info(env)->vti_kiocb; 1224 - local_iov->iov_base = (void __user *)buf; 1225 - local_iov->iov_len = count; 1226 - init_sync_kiocb(kiocb, file); 1227 - kiocb->ki_pos = *ppos; 1228 - kiocb->ki_nbytes = count; 1229 - 1230 - result = ll_file_aio_read(kiocb, local_iov, 1, kiocb->ki_pos); 1231 - *ppos = kiocb->ki_pos; 1232 - 1199 + &iocb->ki_pos, iov_iter_count(to)); 1233 1200 cl_env_put(env, &refcheck); 1234 1201 return result; 1235 1202 } ··· 1202 1239 /* 1203 1240 * Write to a file (through the page cache). 1204 1241 */ 1205 - static ssize_t ll_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 1206 - unsigned long nr_segs, loff_t pos) 1242 + static ssize_t ll_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 1207 1243 { 1208 1244 struct lu_env *env; 1209 1245 struct vvp_io_args *args; 1210 - size_t count = 0; 1211 1246 ssize_t result; 1212 1247 int refcheck; 1213 - 1214 - result = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ); 1215 - if (result) 1216 - return result; 1217 1248 1218 1249 env = cl_env_get(&refcheck); 1219 1250 if (IS_ERR(env)) 1220 1251 return PTR_ERR(env); 1221 1252 1222 1253 args = vvp_env_args(env, IO_NORMAL); 1223 - args->u.normal.via_iov = (struct iovec *)iov; 1224 - args->u.normal.via_nrsegs = nr_segs; 1254 + args->u.normal.via_iter = from; 1225 1255 args->u.normal.via_iocb = iocb; 1226 1256 1227 1257 result = ll_file_io_generic(env, args, iocb->ki_filp, CIT_WRITE, 1228 - &iocb->ki_pos, count); 1258 + &iocb->ki_pos, iov_iter_count(from)); 1229 1259 cl_env_put(env, &refcheck); 1230 1260 return result; 1231 1261 } 1232 - 1233 - static ssize_t ll_file_write(struct file *file, const char *buf, size_t count, 1234 - loff_t *ppos) 1235 - { 1236 - struct lu_env *env; 1237 - struct iovec *local_iov; 1238 - struct kiocb *kiocb; 1239 - ssize_t result; 1240 - int refcheck; 1241 - 1242 - env = cl_env_get(&refcheck); 1243 - if (IS_ERR(env)) 1244 - return PTR_ERR(env); 1245 - 1246 - local_iov = &vvp_env_info(env)->vti_local_iov; 1247 - kiocb = &vvp_env_info(env)->vti_kiocb; 1248 - local_iov->iov_base = (void __user *)buf; 1249 - local_iov->iov_len = count; 1250 - init_sync_kiocb(kiocb, file); 1251 - kiocb->ki_pos = *ppos; 1252 - kiocb->ki_nbytes = count; 1253 - 1254 - result = ll_file_aio_write(kiocb, local_iov, 1, kiocb->ki_pos); 1255 - *ppos = kiocb->ki_pos; 1256 - 1257 - cl_env_put(env, &refcheck); 1258 - return result; 1259 - } 1260 - 1261 - 1262 1262 1263 1263 /* 1264 1264 * Send file content (through pagecache) somewhere with helper ··· 3069 3143 3070 3144 /* -o localflock - only provides locally consistent flock locks */ 3071 3145 struct file_operations ll_file_operations = { 3072 - .read = ll_file_read, 3073 - .aio_read = ll_file_aio_read, 3074 - .write = ll_file_write, 3075 - .aio_write = ll_file_aio_write, 3146 + .read = new_sync_read, 3147 + .read_iter = ll_file_read_iter, 3148 + .write = new_sync_write, 3149 + .write_iter = ll_file_write_iter, 3076 3150 .unlocked_ioctl = ll_file_ioctl, 3077 3151 .open = ll_file_open, 3078 3152 .release = ll_file_release, ··· 3084 3158 }; 3085 3159 3086 3160 struct file_operations ll_file_operations_flock = { 3087 - .read = ll_file_read, 3088 - .aio_read = ll_file_aio_read, 3089 - .write = ll_file_write, 3090 - .aio_write = ll_file_aio_write, 3161 + .read = new_sync_read, 3162 + .read_iter = ll_file_read_iter, 3163 + .write = new_sync_write, 3164 + .write_iter = ll_file_write_iter, 3091 3165 .unlocked_ioctl = ll_file_ioctl, 3092 3166 .open = ll_file_open, 3093 3167 .release = ll_file_release, ··· 3102 3176 3103 3177 /* These are for -o noflock - to return ENOSYS on flock calls */ 3104 3178 struct file_operations ll_file_operations_noflock = { 3105 - .read = ll_file_read, 3106 - .aio_read = ll_file_aio_read, 3107 - .write = ll_file_write, 3108 - .aio_write = ll_file_aio_write, 3179 + .read = new_sync_read, 3180 + .read_iter = ll_file_read_iter, 3181 + .write = new_sync_write, 3182 + .write_iter = ll_file_write_iter, 3109 3183 .unlocked_ioctl = ll_file_ioctl, 3110 3184 .open = ll_file_open, 3111 3185 .release = ll_file_release,
+1 -2
drivers/staging/lustre/lustre/llite/llite_internal.h
··· 917 917 union { 918 918 struct { 919 919 struct kiocb *via_iocb; 920 - struct iovec *via_iov; 921 - unsigned long via_nrsegs; 920 + struct iov_iter *via_iter; 922 921 } normal; 923 922 struct { 924 923 struct pipe_inode_info *via_pipe;
+1 -2
drivers/staging/lustre/lustre/llite/rw.c
··· 151 151 result = cl_io_rw_init(env, io, CIT_WRITE, pos, PAGE_CACHE_SIZE); 152 152 if (result == 0) { 153 153 cio->cui_fd = LUSTRE_FPRIVATE(file); 154 - cio->cui_iov = NULL; 155 - cio->cui_nrsegs = 0; 154 + cio->cui_iter = NULL; 156 155 result = cl_io_iter_init(env, io); 157 156 if (result == 0) { 158 157 result = cl_io_lock(env, io);
+42 -64
drivers/staging/lustre/lustre/llite/rw26.c
··· 218 218 int i; 219 219 220 220 for (i = 0; i < npages; i++) { 221 - if (pages[i] == NULL) 222 - break; 223 221 if (do_dirty) 224 222 set_page_dirty_lock(pages[i]); 225 223 page_cache_release(pages[i]); 226 224 } 227 - 228 - OBD_FREE_LARGE(pages, npages * sizeof(*pages)); 225 + kvfree(pages); 229 226 } 230 227 231 228 ssize_t ll_direct_rw_pages(const struct lu_env *env, struct cl_io *io, ··· 360 363 #define MAX_DIO_SIZE ((MAX_MALLOC / sizeof(struct brw_page) * PAGE_CACHE_SIZE) & \ 361 364 ~(DT_MAX_BRW_SIZE - 1)) 362 365 static ssize_t ll_direct_IO_26(int rw, struct kiocb *iocb, 363 - const struct iovec *iov, loff_t file_offset, 364 - unsigned long nr_segs) 366 + struct iov_iter *iter, loff_t file_offset) 365 367 { 366 368 struct lu_env *env; 367 369 struct cl_io *io; 368 370 struct file *file = iocb->ki_filp; 369 371 struct inode *inode = file->f_mapping->host; 370 372 struct ccc_object *obj = cl_inode2ccc(inode); 371 - long count = iov_length(iov, nr_segs); 372 - long tot_bytes = 0, result = 0; 373 + ssize_t count = iov_iter_count(iter); 374 + ssize_t tot_bytes = 0, result = 0; 373 375 struct ll_inode_info *lli = ll_i2info(inode); 374 - unsigned long seg = 0; 375 376 long size = MAX_DIO_SIZE; 376 377 int refcheck; 377 378 ··· 387 392 MAX_DIO_SIZE >> PAGE_CACHE_SHIFT); 388 393 389 394 /* Check that all user buffers are aligned as well */ 390 - for (seg = 0; seg < nr_segs; seg++) { 391 - if (((unsigned long)iov[seg].iov_base & ~CFS_PAGE_MASK) || 392 - (iov[seg].iov_len & ~CFS_PAGE_MASK)) 393 - return -EINVAL; 394 - } 395 + if (iov_iter_alignment(iter) & ~CFS_PAGE_MASK) 396 + return -EINVAL; 395 397 396 398 env = cl_env_get(&refcheck); 397 399 LASSERT(!IS_ERR(env)); ··· 403 411 mutex_lock(&inode->i_mutex); 404 412 405 413 LASSERT(obj->cob_transient_pages == 0); 406 - for (seg = 0; seg < nr_segs; seg++) { 407 - long iov_left = iov[seg].iov_len; 408 - unsigned long user_addr = (unsigned long)iov[seg].iov_base; 414 + while (iov_iter_count(iter)) { 415 + struct page **pages; 416 + size_t offs; 409 417 418 + count = min_t(size_t, iov_iter_count(iter), size); 410 419 if (rw == READ) { 411 420 if (file_offset >= i_size_read(inode)) 412 421 break; 413 - if (file_offset + iov_left > i_size_read(inode)) 414 - iov_left = i_size_read(inode) - file_offset; 422 + if (file_offset + count > i_size_read(inode)) 423 + count = i_size_read(inode) - file_offset; 415 424 } 416 425 417 - while (iov_left > 0) { 418 - struct page **pages; 419 - int page_count, max_pages = 0; 420 - long bytes; 421 - 422 - bytes = min(size, iov_left); 423 - page_count = ll_get_user_pages(rw, user_addr, bytes, 424 - &pages, &max_pages); 425 - if (likely(page_count > 0)) { 426 - if (unlikely(page_count < max_pages)) 427 - bytes = page_count << PAGE_CACHE_SHIFT; 428 - result = ll_direct_IO_26_seg(env, io, rw, inode, 429 - file->f_mapping, 430 - bytes, file_offset, 431 - pages, page_count); 432 - ll_free_user_pages(pages, max_pages, rw==READ); 433 - } else if (page_count == 0) { 434 - GOTO(out, result = -EFAULT); 435 - } else { 436 - result = page_count; 437 - } 438 - if (unlikely(result <= 0)) { 439 - /* If we can't allocate a large enough buffer 440 - * for the request, shrink it to a smaller 441 - * PAGE_SIZE multiple and try again. 442 - * We should always be able to kmalloc for a 443 - * page worth of page pointers = 4MB on i386. */ 444 - if (result == -ENOMEM && 445 - size > (PAGE_CACHE_SIZE / sizeof(*pages)) * 446 - PAGE_CACHE_SIZE) { 447 - size = ((((size / 2) - 1) | 448 - ~CFS_PAGE_MASK) + 1) & 449 - CFS_PAGE_MASK; 450 - CDEBUG(D_VFSTRACE,"DIO size now %lu\n", 451 - size); 452 - continue; 453 - } 454 - 455 - GOTO(out, result); 456 - } 457 - 458 - tot_bytes += result; 459 - file_offset += result; 460 - iov_left -= result; 461 - user_addr += result; 426 + result = iov_iter_get_pages_alloc(iter, &pages, count, &offs); 427 + if (likely(result > 0)) { 428 + int n = (result + offs + PAGE_SIZE - 1) / PAGE_SIZE; 429 + result = ll_direct_IO_26_seg(env, io, rw, inode, 430 + file->f_mapping, 431 + result, file_offset, 432 + pages, n); 433 + ll_free_user_pages(pages, n, rw==READ); 462 434 } 435 + if (unlikely(result <= 0)) { 436 + /* If we can't allocate a large enough buffer 437 + * for the request, shrink it to a smaller 438 + * PAGE_SIZE multiple and try again. 439 + * We should always be able to kmalloc for a 440 + * page worth of page pointers = 4MB on i386. */ 441 + if (result == -ENOMEM && 442 + size > (PAGE_CACHE_SIZE / sizeof(*pages)) * 443 + PAGE_CACHE_SIZE) { 444 + size = ((((size / 2) - 1) | 445 + ~CFS_PAGE_MASK) + 1) & 446 + CFS_PAGE_MASK; 447 + CDEBUG(D_VFSTRACE,"DIO size now %lu\n", 448 + size); 449 + continue; 450 + } 451 + 452 + GOTO(out, result); 453 + } 454 + iov_iter_advance(iter, result); 455 + tot_bytes += result; 456 + file_offset += result; 463 457 } 464 458 out: 465 459 LASSERT(obj->cob_transient_pages == 0);
+12 -17
drivers/staging/lustre/lustre/llite/vvp_io.c
··· 211 211 struct cl_lock_descr *descr = &cti->cti_descr; 212 212 ldlm_policy_data_t policy; 213 213 unsigned long addr; 214 - unsigned long seg; 215 214 ssize_t count; 216 215 int result; 216 + struct iov_iter i; 217 + struct iovec iov; 217 218 218 219 LASSERT(io->ci_type == CIT_READ || io->ci_type == CIT_WRITE); 219 220 220 221 if (!cl_is_normalio(env, io)) 221 222 return 0; 222 223 223 - if (vio->cui_iov == NULL) /* nfs or loop back device write */ 224 + if (vio->cui_iter == NULL) /* nfs or loop back device write */ 224 225 return 0; 225 226 226 227 /* No MM (e.g. NFS)? No vmas too. */ 227 228 if (mm == NULL) 228 229 return 0; 229 230 230 - for (seg = 0; seg < vio->cui_nrsegs; seg++) { 231 - const struct iovec *iv = &vio->cui_iov[seg]; 232 - 233 - addr = (unsigned long)iv->iov_base; 234 - count = iv->iov_len; 231 + iov_for_each(iov, i, *(vio->cui_iter)) { 232 + addr = (unsigned long)iov.iov_base; 233 + count = iov.iov_len; 235 234 if (count == 0) 236 235 continue; 237 236 ··· 526 527 switch (vio->cui_io_subtype) { 527 528 case IO_NORMAL: 528 529 LASSERT(cio->cui_iocb->ki_pos == pos); 529 - result = generic_file_aio_read(cio->cui_iocb, 530 - cio->cui_iov, cio->cui_nrsegs, 531 - cio->cui_iocb->ki_pos); 530 + result = generic_file_read_iter(cio->cui_iocb, cio->cui_iter); 532 531 break; 533 532 case IO_SPLICE: 534 533 result = generic_file_splice_read(file, &pos, ··· 592 595 593 596 CDEBUG(D_VFSTRACE, "write: [%lli, %lli)\n", pos, pos + (long long)cnt); 594 597 595 - if (cio->cui_iov == NULL) /* from a temp io in ll_cl_init(). */ 598 + if (cio->cui_iter == NULL) /* from a temp io in ll_cl_init(). */ 596 599 result = 0; 597 600 else 598 - result = generic_file_aio_write(cio->cui_iocb, 599 - cio->cui_iov, cio->cui_nrsegs, 600 - cio->cui_iocb->ki_pos); 601 + result = generic_file_write_iter(cio->cui_iocb, cio->cui_iter); 602 + 601 603 if (result > 0) { 602 604 if (result < cnt) 603 605 io->ci_continue = 0; ··· 1158 1162 * results." -- Single Unix Spec */ 1159 1163 if (count == 0) 1160 1164 result = 1; 1161 - else { 1165 + else 1162 1166 cio->cui_tot_count = count; 1163 - cio->cui_tot_nrsegs = 0; 1164 - } 1167 + 1165 1168 /* for read/write, we store the jobid in the inode, and 1166 1169 * it'll be fetched by osc when building RPC. 1167 1170 *
+2 -2
drivers/usb/gadget/storage_common.c
··· 220 220 * If we can't read the file, it's no good. 221 221 * If we can't write the file, use it read-only. 222 222 */ 223 - if (!(filp->f_op->read || filp->f_op->aio_read)) { 223 + if (!(filp->f_mode & FMODE_CAN_READ)) { 224 224 LINFO(curlun, "file not readable: %s\n", filename); 225 225 goto out; 226 226 } 227 - if (!(filp->f_op->write || filp->f_op->aio_write)) 227 + if (!(filp->f_mode & FMODE_CAN_WRITE)) 228 228 ro = 1; 229 229 230 230 size = i_size_read(inode->i_mapping->host);
+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 }
+7 -7
fs/9p/vfs_file.c
··· 692 692 { 693 693 if (filp->f_flags & O_DIRECT) 694 694 return v9fs_direct_read(filp, data, count, offset); 695 - return do_sync_read(filp, data, count, offset); 695 + return new_sync_read(filp, data, count, offset); 696 696 } 697 697 698 698 /** ··· 760 760 761 761 buff_write: 762 762 mutex_unlock(&inode->i_mutex); 763 - return do_sync_write(filp, data, count, offsetp); 763 + return new_sync_write(filp, data, count, offsetp); 764 764 } 765 765 766 766 /** ··· 778 778 779 779 if (filp->f_flags & O_DIRECT) 780 780 return v9fs_direct_write(filp, data, count, offset); 781 - return do_sync_write(filp, data, count, offset); 781 + return new_sync_write(filp, data, count, offset); 782 782 } 783 783 784 784 ··· 847 847 .llseek = generic_file_llseek, 848 848 .read = v9fs_cached_file_read, 849 849 .write = v9fs_cached_file_write, 850 - .aio_read = generic_file_aio_read, 851 - .aio_write = generic_file_aio_write, 850 + .read_iter = generic_file_read_iter, 851 + .write_iter = generic_file_write_iter, 852 852 .open = v9fs_file_open, 853 853 .release = v9fs_dir_release, 854 854 .lock = v9fs_file_lock, ··· 860 860 .llseek = generic_file_llseek, 861 861 .read = v9fs_cached_file_read, 862 862 .write = v9fs_cached_file_write, 863 - .aio_read = generic_file_aio_read, 864 - .aio_write = generic_file_aio_write, 863 + .read_iter = generic_file_read_iter, 864 + .write_iter = generic_file_write_iter, 865 865 .open = v9fs_file_open, 866 866 .release = v9fs_dir_release, 867 867 .lock = v9fs_file_lock_dotl,
+4 -4
fs/adfs/file.c
··· 23 23 24 24 const struct file_operations adfs_file_operations = { 25 25 .llseek = generic_file_llseek, 26 - .read = do_sync_read, 27 - .aio_read = generic_file_aio_read, 26 + .read = new_sync_read, 27 + .read_iter = generic_file_read_iter, 28 28 .mmap = generic_file_mmap, 29 29 .fsync = generic_file_fsync, 30 - .write = do_sync_write, 31 - .aio_write = generic_file_aio_write, 30 + .write = new_sync_write, 31 + .write_iter = generic_file_write_iter, 32 32 .splice_read = generic_file_splice_read, 33 33 }; 34 34
+4 -4
fs/affs/file.c
··· 27 27 28 28 const struct file_operations affs_file_operations = { 29 29 .llseek = generic_file_llseek, 30 - .read = do_sync_read, 31 - .aio_read = generic_file_aio_read, 32 - .write = do_sync_write, 33 - .aio_write = generic_file_aio_write, 30 + .read = new_sync_read, 31 + .read_iter = generic_file_read_iter, 32 + .write = new_sync_write, 33 + .write_iter = generic_file_write_iter, 34 34 .mmap = generic_file_mmap, 35 35 .open = affs_file_open, 36 36 .release = affs_file_release,
+4 -4
fs/afs/file.c
··· 31 31 .open = afs_open, 32 32 .release = afs_release, 33 33 .llseek = generic_file_llseek, 34 - .read = do_sync_read, 35 - .write = do_sync_write, 36 - .aio_read = generic_file_aio_read, 37 - .aio_write = afs_file_write, 34 + .read = new_sync_read, 35 + .write = new_sync_write, 36 + .read_iter = generic_file_read_iter, 37 + .write_iter = afs_file_write, 38 38 .mmap = generic_file_readonly_mmap, 39 39 .splice_read = generic_file_splice_read, 40 40 .fsync = afs_fsync,
+1 -2
fs/afs/internal.h
··· 747 747 extern int afs_writepage(struct page *, struct writeback_control *); 748 748 extern int afs_writepages(struct address_space *, struct writeback_control *); 749 749 extern void afs_pages_written_back(struct afs_vnode *, struct afs_call *); 750 - extern ssize_t afs_file_write(struct kiocb *, const struct iovec *, 751 - unsigned long, loff_t); 750 + extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *); 752 751 extern int afs_writeback_all(struct afs_vnode *); 753 752 extern int afs_fsync(struct file *, loff_t, loff_t, int); 754 753
+5 -6
fs/afs/write.c
··· 625 625 /* 626 626 * write to an AFS file 627 627 */ 628 - ssize_t afs_file_write(struct kiocb *iocb, const struct iovec *iov, 629 - unsigned long nr_segs, loff_t pos) 628 + ssize_t afs_file_write(struct kiocb *iocb, struct iov_iter *from) 630 629 { 631 630 struct afs_vnode *vnode = AFS_FS_I(file_inode(iocb->ki_filp)); 632 631 ssize_t result; 633 - size_t count = iov_length(iov, nr_segs); 632 + size_t count = iov_iter_count(from); 634 633 635 - _enter("{%x.%u},{%zu},%lu,", 636 - vnode->fid.vid, vnode->fid.vnode, count, nr_segs); 634 + _enter("{%x.%u},{%zu},", 635 + vnode->fid.vid, vnode->fid.vnode, count); 637 636 638 637 if (IS_SWAPFILE(&vnode->vfs_inode)) { 639 638 printk(KERN_INFO ··· 643 644 if (!count) 644 645 return 0; 645 646 646 - result = generic_file_aio_write(iocb, iov, nr_segs, pos); 647 + result = generic_file_write_iter(iocb, from); 647 648 if (IS_ERR_VALUE(result)) { 648 649 _leave(" = %zd", result); 649 650 return result;
+12 -2
fs/aio.c
··· 1241 1241 1242 1242 typedef ssize_t (aio_rw_op)(struct kiocb *, const struct iovec *, 1243 1243 unsigned long, loff_t); 1244 + typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *); 1244 1245 1245 1246 static ssize_t aio_setup_vectored_rw(struct kiocb *kiocb, 1246 1247 int rw, char __user *buf, ··· 1299 1298 int rw; 1300 1299 fmode_t mode; 1301 1300 aio_rw_op *rw_op; 1301 + rw_iter_op *iter_op; 1302 1302 struct iovec inline_vec, *iovec = &inline_vec; 1303 + struct iov_iter iter; 1303 1304 1304 1305 switch (opcode) { 1305 1306 case IOCB_CMD_PREAD: ··· 1309 1306 mode = FMODE_READ; 1310 1307 rw = READ; 1311 1308 rw_op = file->f_op->aio_read; 1309 + iter_op = file->f_op->read_iter; 1312 1310 goto rw_common; 1313 1311 1314 1312 case IOCB_CMD_PWRITE: ··· 1317 1313 mode = FMODE_WRITE; 1318 1314 rw = WRITE; 1319 1315 rw_op = file->f_op->aio_write; 1316 + iter_op = file->f_op->write_iter; 1320 1317 goto rw_common; 1321 1318 rw_common: 1322 1319 if (unlikely(!(file->f_mode & mode))) 1323 1320 return -EBADF; 1324 1321 1325 - if (!rw_op) 1322 + if (!rw_op && !iter_op) 1326 1323 return -EINVAL; 1327 1324 1328 1325 ret = (opcode == IOCB_CMD_PREADV || ··· 1352 1347 if (rw == WRITE) 1353 1348 file_start_write(file); 1354 1349 1355 - ret = rw_op(req, iovec, nr_segs, req->ki_pos); 1350 + if (iter_op) { 1351 + iov_iter_init(&iter, rw, iovec, nr_segs, req->ki_nbytes); 1352 + ret = iter_op(req, &iter); 1353 + } else { 1354 + ret = rw_op(req, iovec, nr_segs, req->ki_pos); 1355 + } 1356 1356 1357 1357 if (rw == WRITE) 1358 1358 file_end_write(file);
+4 -4
fs/bfs/file.c
··· 23 23 24 24 const struct file_operations bfs_file_operations = { 25 25 .llseek = generic_file_llseek, 26 - .read = do_sync_read, 27 - .aio_read = generic_file_aio_read, 28 - .write = do_sync_write, 29 - .aio_write = generic_file_aio_write, 26 + .read = new_sync_read, 27 + .read_iter = generic_file_read_iter, 28 + .write = new_sync_write, 29 + .write_iter = generic_file_write_iter, 30 30 .mmap = generic_file_mmap, 31 31 .splice_read = generic_file_splice_read, 32 32 };
+18 -22
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, 175 + offset, blkdev_get_block, 176 + NULL, NULL, 0); 176 177 } 177 178 178 179 int __sync_blockdev(struct block_device *bdev, int wait) ··· 1572 1571 * Does not take i_mutex for the write and thus is not for general purpose 1573 1572 * use. 1574 1573 */ 1575 - ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, 1576 - unsigned long nr_segs, loff_t pos) 1574 + ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) 1577 1575 { 1578 1576 struct file *file = iocb->ki_filp; 1579 1577 struct blk_plug plug; 1580 1578 ssize_t ret; 1581 1579 1582 - BUG_ON(iocb->ki_pos != pos); 1583 - 1584 1580 blk_start_plug(&plug); 1585 - ret = __generic_file_aio_write(iocb, iov, nr_segs); 1581 + ret = __generic_file_write_iter(iocb, from); 1586 1582 if (ret > 0) { 1587 1583 ssize_t err; 1588 - 1589 - err = generic_write_sync(file, pos, ret); 1584 + err = generic_write_sync(file, iocb->ki_pos - ret, ret); 1590 1585 if (err < 0) 1591 1586 ret = err; 1592 1587 } 1593 1588 blk_finish_plug(&plug); 1594 1589 return ret; 1595 1590 } 1596 - EXPORT_SYMBOL_GPL(blkdev_aio_write); 1591 + EXPORT_SYMBOL_GPL(blkdev_write_iter); 1597 1592 1598 - static ssize_t blkdev_aio_read(struct kiocb *iocb, const struct iovec *iov, 1599 - unsigned long nr_segs, loff_t pos) 1593 + static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) 1600 1594 { 1601 1595 struct file *file = iocb->ki_filp; 1602 1596 struct inode *bd_inode = file->f_mapping->host; 1603 1597 loff_t size = i_size_read(bd_inode); 1598 + loff_t pos = iocb->ki_pos; 1604 1599 1605 1600 if (pos >= size) 1606 1601 return 0; 1607 1602 1608 1603 size -= pos; 1609 - if (size < iocb->ki_nbytes) 1610 - nr_segs = iov_shorten((struct iovec *)iov, nr_segs, size); 1611 - return generic_file_aio_read(iocb, iov, nr_segs, pos); 1604 + iov_iter_truncate(to, size); 1605 + return generic_file_read_iter(iocb, to); 1612 1606 } 1613 1607 1614 1608 /* ··· 1635 1639 .open = blkdev_open, 1636 1640 .release = blkdev_close, 1637 1641 .llseek = block_llseek, 1638 - .read = do_sync_read, 1639 - .write = do_sync_write, 1640 - .aio_read = blkdev_aio_read, 1641 - .aio_write = blkdev_aio_write, 1642 + .read = new_sync_read, 1643 + .write = new_sync_write, 1644 + .read_iter = blkdev_read_iter, 1645 + .write_iter = blkdev_write_iter, 1642 1646 .mmap = generic_file_mmap, 1643 1647 .fsync = blkdev_fsync, 1644 1648 .unlocked_ioctl = block_ioctl, ··· 1646 1650 .compat_ioctl = compat_blkdev_ioctl, 1647 1651 #endif 1648 1652 .splice_read = generic_file_splice_read, 1649 - .splice_write = generic_file_splice_write, 1653 + .splice_write = iter_file_splice_write, 1650 1654 }; 1651 1655 1652 1656 int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
+18 -33
fs/btrfs/file.c
··· 448 448 write_bytes -= copied; 449 449 total_copied += copied; 450 450 451 - /* Return to btrfs_file_aio_write to fault page */ 451 + /* Return to btrfs_file_write_iter to fault page */ 452 452 if (unlikely(copied == 0)) 453 453 break; 454 454 ··· 1675 1675 } 1676 1676 1677 1677 static ssize_t __btrfs_direct_write(struct kiocb *iocb, 1678 - const struct iovec *iov, 1679 - unsigned long nr_segs, loff_t pos, 1680 - size_t count, size_t ocount) 1678 + struct iov_iter *from, 1679 + loff_t pos) 1681 1680 { 1682 1681 struct file *file = iocb->ki_filp; 1683 - struct iov_iter i; 1684 1682 ssize_t written; 1685 1683 ssize_t written_buffered; 1686 1684 loff_t endbyte; 1687 1685 int err; 1688 1686 1689 - written = generic_file_direct_write(iocb, iov, &nr_segs, pos, 1690 - count, ocount); 1687 + written = generic_file_direct_write(iocb, from, pos); 1691 1688 1692 - if (written < 0 || written == count) 1689 + if (written < 0 || !iov_iter_count(from)) 1693 1690 return written; 1694 1691 1695 1692 pos += written; 1696 - count -= written; 1697 - iov_iter_init(&i, iov, nr_segs, count, written); 1698 - written_buffered = __btrfs_buffered_write(file, &i, pos); 1693 + written_buffered = __btrfs_buffered_write(file, from, pos); 1699 1694 if (written_buffered < 0) { 1700 1695 err = written_buffered; 1701 1696 goto out; ··· 1725 1730 inode_inc_iversion(inode); 1726 1731 } 1727 1732 1728 - static ssize_t btrfs_file_aio_write(struct kiocb *iocb, 1729 - const struct iovec *iov, 1730 - unsigned long nr_segs, loff_t pos) 1733 + static ssize_t btrfs_file_write_iter(struct kiocb *iocb, 1734 + struct iov_iter *from) 1731 1735 { 1732 1736 struct file *file = iocb->ki_filp; 1733 1737 struct inode *inode = file_inode(file); ··· 1735 1741 u64 end_pos; 1736 1742 ssize_t num_written = 0; 1737 1743 ssize_t err = 0; 1738 - size_t count, ocount; 1744 + size_t count = iov_iter_count(from); 1739 1745 bool sync = (file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host); 1746 + loff_t pos = iocb->ki_pos; 1740 1747 1741 1748 mutex_lock(&inode->i_mutex); 1742 - 1743 - err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ); 1744 - if (err) { 1745 - mutex_unlock(&inode->i_mutex); 1746 - goto out; 1747 - } 1748 - count = ocount; 1749 1749 1750 1750 current->backing_dev_info = inode->i_mapping->backing_dev_info; 1751 1751 err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); ··· 1752 1764 mutex_unlock(&inode->i_mutex); 1753 1765 goto out; 1754 1766 } 1767 + 1768 + iov_iter_truncate(from, count); 1755 1769 1756 1770 err = file_remove_suid(file); 1757 1771 if (err) { ··· 1796 1806 atomic_inc(&BTRFS_I(inode)->sync_writers); 1797 1807 1798 1808 if (unlikely(file->f_flags & O_DIRECT)) { 1799 - num_written = __btrfs_direct_write(iocb, iov, nr_segs, 1800 - pos, count, ocount); 1809 + num_written = __btrfs_direct_write(iocb, from, pos); 1801 1810 } else { 1802 - struct iov_iter i; 1803 - 1804 - iov_iter_init(&i, iov, nr_segs, count, num_written); 1805 - 1806 - num_written = __btrfs_buffered_write(file, &i, pos); 1811 + num_written = __btrfs_buffered_write(file, from, pos); 1807 1812 if (num_written > 0) 1808 1813 iocb->ki_pos = pos + num_written; 1809 1814 } ··· 2725 2740 2726 2741 const struct file_operations btrfs_file_operations = { 2727 2742 .llseek = btrfs_file_llseek, 2728 - .read = do_sync_read, 2729 - .write = do_sync_write, 2730 - .aio_read = generic_file_aio_read, 2743 + .read = new_sync_read, 2744 + .write = new_sync_write, 2745 + .read_iter = generic_file_read_iter, 2731 2746 .splice_read = generic_file_splice_read, 2732 - .aio_write = btrfs_file_aio_write, 2747 + .write_iter = btrfs_file_write_iter, 2733 2748 .mmap = btrfs_file_mmap, 2734 2749 .open = generic_file_open, 2735 2750 .release = btrfs_release_file,
+18 -29
fs/btrfs/inode.c
··· 7445 7445 } 7446 7446 7447 7447 static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *iocb, 7448 - const struct iovec *iov, loff_t offset, 7449 - unsigned long nr_segs) 7448 + const struct iov_iter *iter, loff_t offset) 7450 7449 { 7451 7450 int seg; 7452 7451 int i; 7453 - size_t size; 7454 - unsigned long addr; 7455 7452 unsigned blocksize_mask = root->sectorsize - 1; 7456 7453 ssize_t retval = -EINVAL; 7457 - loff_t end = offset; 7458 7454 7459 7455 if (offset & blocksize_mask) 7460 7456 goto out; 7461 7457 7462 - /* Check the memory alignment. Blocks cannot straddle pages */ 7463 - for (seg = 0; seg < nr_segs; seg++) { 7464 - addr = (unsigned long)iov[seg].iov_base; 7465 - size = iov[seg].iov_len; 7466 - end += size; 7467 - if ((addr & blocksize_mask) || (size & blocksize_mask)) 7468 - goto out; 7458 + if (iov_iter_alignment(iter) & blocksize_mask) 7459 + goto out; 7469 7460 7470 - /* If this is a write we don't need to check anymore */ 7471 - if (rw & WRITE) 7472 - continue; 7473 - 7474 - /* 7475 - * Check to make sure we don't have duplicate iov_base's in this 7476 - * iovec, if so return EINVAL, otherwise we'll get csum errors 7477 - * when reading back. 7478 - */ 7479 - for (i = seg + 1; i < nr_segs; i++) { 7480 - if (iov[seg].iov_base == iov[i].iov_base) 7461 + /* If this is a write we don't need to check anymore */ 7462 + if (rw & WRITE) 7463 + return 0; 7464 + /* 7465 + * Check to make sure we don't have duplicate iov_base's in this 7466 + * iovec, if so return EINVAL, otherwise we'll get csum errors 7467 + * when reading back. 7468 + */ 7469 + for (seg = 0; seg < iter->nr_segs; seg++) { 7470 + for (i = seg + 1; i < iter->nr_segs; i++) { 7471 + if (iter->iov[seg].iov_base == iter->iov[i].iov_base) 7481 7472 goto out; 7482 7473 } 7483 7474 } ··· 7478 7487 } 7479 7488 7480 7489 static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, 7481 - const struct iovec *iov, loff_t offset, 7482 - unsigned long nr_segs) 7490 + struct iov_iter *iter, loff_t offset) 7483 7491 { 7484 7492 struct file *file = iocb->ki_filp; 7485 7493 struct inode *inode = file->f_mapping->host; ··· 7488 7498 bool relock = false; 7489 7499 ssize_t ret; 7490 7500 7491 - if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov, 7492 - offset, nr_segs)) 7501 + if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iter, offset)) 7493 7502 return 0; 7494 7503 7495 7504 atomic_inc(&inode->i_dio_count); ··· 7500 7511 * we need to flush the dirty pages again to make absolutely sure 7501 7512 * that any outstanding dirty pages are on disk. 7502 7513 */ 7503 - count = iov_length(iov, nr_segs); 7514 + count = iov_iter_count(iter); 7504 7515 if (test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, 7505 7516 &BTRFS_I(inode)->runtime_flags)) 7506 7517 filemap_fdatawrite_range(inode->i_mapping, offset, count); ··· 7527 7538 7528 7539 ret = __blockdev_direct_IO(rw, iocb, inode, 7529 7540 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev, 7530 - iov, offset, nr_segs, btrfs_get_blocks_direct, NULL, 7541 + iter, offset, btrfs_get_blocks_direct, NULL, 7531 7542 btrfs_submit_direct, flags); 7532 7543 if (rw & WRITE) { 7533 7544 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;
+72 -113
fs/ceph/file.c
··· 418 418 struct page **pages; 419 419 u64 off = iocb->ki_pos; 420 420 int num_pages, ret; 421 - size_t len = i->count; 421 + size_t len = iov_iter_count(i); 422 422 423 423 dout("sync_read on file %p %llu~%u %s\n", file, off, 424 424 (unsigned)len, ··· 436 436 437 437 if (file->f_flags & O_DIRECT) { 438 438 while (iov_iter_count(i)) { 439 - void __user *data = i->iov[0].iov_base + i->iov_offset; 440 - size_t len = i->iov[0].iov_len - i->iov_offset; 439 + size_t start; 440 + ssize_t n; 441 441 442 - num_pages = calc_pages_for((unsigned long)data, len); 443 - pages = ceph_get_direct_page_vector(data, 444 - num_pages, true); 445 - if (IS_ERR(pages)) 446 - return PTR_ERR(pages); 442 + n = iov_iter_get_pages_alloc(i, &pages, INT_MAX, &start); 443 + if (n < 0) 444 + return n; 447 445 448 - ret = striped_read(inode, off, len, 446 + num_pages = (n + start + PAGE_SIZE - 1) / PAGE_SIZE; 447 + 448 + ret = striped_read(inode, off, n, 449 449 pages, num_pages, checkeof, 450 - 1, (unsigned long)data & ~PAGE_MASK); 450 + 1, start); 451 + 451 452 ceph_put_page_vector(pages, num_pages, true); 452 453 453 454 if (ret <= 0) 454 455 break; 455 456 off += ret; 456 457 iov_iter_advance(i, ret); 457 - if (ret < len) 458 + if (ret < n) 458 459 break; 459 460 } 460 461 } else { ··· 467 466 num_pages, checkeof, 0, 0); 468 467 if (ret > 0) { 469 468 int l, k = 0; 470 - size_t left = len = ret; 469 + size_t left = ret; 471 470 472 471 while (left) { 473 - void __user *data = i->iov[0].iov_base 474 - + i->iov_offset; 475 - l = min(i->iov[0].iov_len - i->iov_offset, 476 - left); 477 - 478 - ret = ceph_copy_page_vector_to_user(&pages[k], 479 - data, off, 480 - l); 481 - if (ret > 0) { 482 - iov_iter_advance(i, ret); 483 - left -= ret; 484 - off += ret; 485 - k = calc_pages_for(iocb->ki_pos, 486 - len - left + 1) - 1; 487 - BUG_ON(k >= num_pages && left); 488 - } else 472 + int copy = min_t(size_t, PAGE_SIZE, left); 473 + l = copy_page_to_iter(pages[k++], 0, copy, i); 474 + off += l; 475 + left -= l; 476 + if (l < copy) 489 477 break; 490 478 } 491 479 } ··· 531 541 * objects, rollback on failure, etc.) 532 542 */ 533 543 static ssize_t 534 - ceph_sync_direct_write(struct kiocb *iocb, const struct iovec *iov, 535 - unsigned long nr_segs, size_t count) 544 + ceph_sync_direct_write(struct kiocb *iocb, struct iov_iter *from) 536 545 { 537 546 struct file *file = iocb->ki_filp; 538 547 struct inode *inode = file_inode(file); ··· 545 556 int written = 0; 546 557 int flags; 547 558 int check_caps = 0; 548 - int page_align; 549 559 int ret; 550 560 struct timespec mtime = CURRENT_TIME; 551 561 loff_t pos = iocb->ki_pos; 552 - struct iov_iter i; 562 + size_t count = iov_iter_count(from); 553 563 554 564 if (ceph_snap(file_inode(file)) != CEPH_NOSNAP) 555 565 return -EROFS; ··· 570 582 CEPH_OSD_FLAG_ONDISK | 571 583 CEPH_OSD_FLAG_WRITE; 572 584 573 - iov_iter_init(&i, iov, nr_segs, count, 0); 574 - 575 - while (iov_iter_count(&i) > 0) { 576 - void __user *data = i.iov->iov_base + i.iov_offset; 577 - u64 len = i.iov->iov_len - i.iov_offset; 578 - 579 - page_align = (unsigned long)data & ~PAGE_MASK; 585 + while (iov_iter_count(from) > 0) { 586 + u64 len = iov_iter_single_seg_count(from); 587 + size_t start; 588 + ssize_t n; 580 589 581 590 snapc = ci->i_snap_realm->cached_context; 582 591 vino = ceph_vino(inode); ··· 589 604 break; 590 605 } 591 606 592 - num_pages = calc_pages_for(page_align, len); 593 - pages = ceph_get_direct_page_vector(data, num_pages, false); 594 - if (IS_ERR(pages)) { 595 - ret = PTR_ERR(pages); 596 - goto out; 607 + n = iov_iter_get_pages_alloc(from, &pages, len, &start); 608 + if (unlikely(n < 0)) { 609 + ret = n; 610 + ceph_osdc_put_request(req); 611 + break; 597 612 } 598 613 614 + num_pages = (n + start + PAGE_SIZE - 1) / PAGE_SIZE; 599 615 /* 600 616 * throw out any page cache pages in this range. this 601 617 * may block. 602 618 */ 603 619 truncate_inode_pages_range(inode->i_mapping, pos, 604 - (pos+len) | (PAGE_CACHE_SIZE-1)); 605 - osd_req_op_extent_osd_data_pages(req, 0, pages, len, page_align, 620 + (pos+n) | (PAGE_CACHE_SIZE-1)); 621 + osd_req_op_extent_osd_data_pages(req, 0, pages, n, start, 606 622 false, false); 607 623 608 624 /* BUG_ON(vino.snap != CEPH_NOSNAP); */ ··· 615 629 616 630 ceph_put_page_vector(pages, num_pages, false); 617 631 618 - out: 619 632 ceph_osdc_put_request(req); 620 - if (ret == 0) { 621 - pos += len; 622 - written += len; 623 - iov_iter_advance(&i, (size_t)len); 624 - 625 - if (pos > i_size_read(inode)) { 626 - check_caps = ceph_inode_set_size(inode, pos); 627 - if (check_caps) 628 - ceph_check_caps(ceph_inode(inode), 629 - CHECK_CAPS_AUTHONLY, 630 - NULL); 631 - } 632 - } else 633 + if (ret) 633 634 break; 635 + pos += n; 636 + written += n; 637 + iov_iter_advance(from, n); 638 + 639 + if (pos > i_size_read(inode)) { 640 + check_caps = ceph_inode_set_size(inode, pos); 641 + if (check_caps) 642 + ceph_check_caps(ceph_inode(inode), 643 + CHECK_CAPS_AUTHONLY, 644 + NULL); 645 + } 634 646 } 635 647 636 648 if (ret != -EOLDSNAPC && written > 0) { ··· 646 662 * correct atomic write, we should e.g. take write locks on all 647 663 * objects, rollback on failure, etc.) 648 664 */ 649 - static ssize_t ceph_sync_write(struct kiocb *iocb, const struct iovec *iov, 650 - unsigned long nr_segs, size_t count) 665 + static ssize_t ceph_sync_write(struct kiocb *iocb, struct iov_iter *from) 651 666 { 652 667 struct file *file = iocb->ki_filp; 653 668 struct inode *inode = file_inode(file); ··· 664 681 int ret; 665 682 struct timespec mtime = CURRENT_TIME; 666 683 loff_t pos = iocb->ki_pos; 667 - struct iov_iter i; 684 + size_t count = iov_iter_count(from); 668 685 669 686 if (ceph_snap(file_inode(file)) != CEPH_NOSNAP) 670 687 return -EROFS; ··· 686 703 CEPH_OSD_FLAG_WRITE | 687 704 CEPH_OSD_FLAG_ACK; 688 705 689 - iov_iter_init(&i, iov, nr_segs, count, 0); 690 - 691 - while ((len = iov_iter_count(&i)) > 0) { 706 + while ((len = iov_iter_count(from)) > 0) { 692 707 size_t left; 693 708 int n; 694 709 ··· 718 737 left = len; 719 738 for (n = 0; n < num_pages; n++) { 720 739 size_t plen = min_t(size_t, left, PAGE_SIZE); 721 - ret = iov_iter_copy_from_user(pages[n], &i, 0, plen); 740 + ret = copy_page_from_iter(pages[n], 0, plen, from); 722 741 if (ret != plen) { 723 742 ret = -EFAULT; 724 743 break; 725 744 } 726 745 left -= ret; 727 - iov_iter_advance(&i, ret); 728 746 } 729 747 730 748 if (ret < 0) { ··· 776 796 * 777 797 * Hmm, the sync read case isn't actually async... should it be? 778 798 */ 779 - static ssize_t ceph_aio_read(struct kiocb *iocb, const struct iovec *iov, 780 - unsigned long nr_segs, loff_t pos) 799 + static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to) 781 800 { 782 801 struct file *filp = iocb->ki_filp; 783 802 struct ceph_file_info *fi = filp->private_data; ··· 802 823 if ((got & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)) == 0 || 803 824 (iocb->ki_filp->f_flags & O_DIRECT) || 804 825 (fi->flags & CEPH_F_SYNC)) { 805 - struct iov_iter i; 806 826 807 827 dout("aio_sync_read %p %llx.%llx %llu~%u got cap refs on %s\n", 808 828 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 809 829 ceph_cap_string(got)); 810 830 811 - if (!read) { 812 - ret = generic_segment_checks(iov, &nr_segs, 813 - &len, VERIFY_WRITE); 814 - if (ret) 815 - goto out; 816 - } 817 - 818 - iov_iter_init(&i, iov, nr_segs, len, read); 819 - 820 831 /* hmm, this isn't really async... */ 821 - ret = ceph_sync_read(iocb, &i, &checkeof); 832 + ret = ceph_sync_read(iocb, to, &checkeof); 822 833 } else { 823 - /* 824 - * We can't modify the content of iov, 825 - * so we only read from beginning. 826 - */ 827 - if (read) { 828 - iocb->ki_pos = pos; 829 - len = iocb->ki_nbytes; 830 - read = 0; 831 - } 832 834 dout("aio_read %p %llx.%llx %llu~%u got cap refs on %s\n", 833 - inode, ceph_vinop(inode), pos, (unsigned)len, 835 + inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 834 836 ceph_cap_string(got)); 835 837 836 - ret = generic_file_aio_read(iocb, iov, nr_segs, pos); 838 + ret = generic_file_read_iter(iocb, to); 837 839 } 838 - out: 839 840 dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n", 840 841 inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); 841 842 ceph_put_cap_refs(ci, got); ··· 831 872 ", reading more\n", iocb->ki_pos, 832 873 inode->i_size); 833 874 875 + iov_iter_advance(to, ret); 834 876 read += ret; 835 877 len -= ret; 836 878 checkeof = 0; ··· 855 895 * 856 896 * If we are near ENOSPC, write synchronously. 857 897 */ 858 - static ssize_t ceph_aio_write(struct kiocb *iocb, const struct iovec *iov, 859 - unsigned long nr_segs, loff_t pos) 898 + static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from) 860 899 { 861 900 struct file *file = iocb->ki_filp; 862 901 struct ceph_file_info *fi = file->private_data; ··· 863 904 struct ceph_inode_info *ci = ceph_inode(inode); 864 905 struct ceph_osd_client *osdc = 865 906 &ceph_sb_to_client(inode->i_sb)->client->osdc; 866 - ssize_t count, written = 0; 907 + ssize_t count = iov_iter_count(from), written = 0; 867 908 int err, want, got; 909 + loff_t pos = iocb->ki_pos; 868 910 869 911 if (ceph_snap(inode) != CEPH_NOSNAP) 870 912 return -EROFS; 871 913 872 914 mutex_lock(&inode->i_mutex); 873 - 874 - err = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ); 875 - if (err) 876 - goto out; 877 915 878 916 /* We can write back this queue in page reclaim */ 879 917 current->backing_dev_info = file->f_mapping->backing_dev_info; ··· 881 925 882 926 if (count == 0) 883 927 goto out; 928 + iov_iter_truncate(from, count); 884 929 885 930 err = file_remove_suid(file); 886 931 if (err) ··· 913 956 914 957 if ((got & (CEPH_CAP_FILE_BUFFER|CEPH_CAP_FILE_LAZYIO)) == 0 || 915 958 (file->f_flags & O_DIRECT) || (fi->flags & CEPH_F_SYNC)) { 959 + struct iov_iter data; 916 960 mutex_unlock(&inode->i_mutex); 961 + /* we might need to revert back to that point */ 962 + data = *from; 917 963 if (file->f_flags & O_DIRECT) 918 - written = ceph_sync_direct_write(iocb, iov, 919 - nr_segs, count); 964 + written = ceph_sync_direct_write(iocb, &data); 920 965 else 921 - written = ceph_sync_write(iocb, iov, nr_segs, count); 966 + written = ceph_sync_write(iocb, &data); 922 967 if (written == -EOLDSNAPC) { 923 968 dout("aio_write %p %llx.%llx %llu~%u" 924 969 "got EOLDSNAPC, retrying\n", 925 970 inode, ceph_vinop(inode), 926 - pos, (unsigned)iov->iov_len); 971 + pos, (unsigned)count); 927 972 mutex_lock(&inode->i_mutex); 928 973 goto retry_snap; 929 974 } 975 + if (written > 0) 976 + iov_iter_advance(from, written); 930 977 } else { 931 978 loff_t old_size = inode->i_size; 932 - struct iov_iter from; 933 979 /* 934 980 * No need to acquire the i_truncate_mutex. Because 935 981 * the MDS revokes Fwb caps before sending truncate ··· 940 980 * are pending vmtruncate. So write and vmtruncate 941 981 * can not run at the same time 942 982 */ 943 - iov_iter_init(&from, iov, nr_segs, count, 0); 944 - written = generic_perform_write(file, &from, pos); 983 + written = generic_perform_write(file, from, pos); 945 984 if (likely(written >= 0)) 946 985 iocb->ki_pos = pos + written; 947 986 if (inode->i_size > old_size) ··· 958 999 } 959 1000 960 1001 dout("aio_write %p %llx.%llx %llu~%u dropping cap refs on %s\n", 961 - inode, ceph_vinop(inode), pos, (unsigned)iov->iov_len, 1002 + inode, ceph_vinop(inode), pos, (unsigned)count, 962 1003 ceph_cap_string(got)); 963 1004 ceph_put_cap_refs(ci, got); 964 1005 ··· 1235 1276 .open = ceph_open, 1236 1277 .release = ceph_release, 1237 1278 .llseek = ceph_llseek, 1238 - .read = do_sync_read, 1239 - .write = do_sync_write, 1240 - .aio_read = ceph_aio_read, 1241 - .aio_write = ceph_aio_write, 1279 + .read = new_sync_read, 1280 + .write = new_sync_write, 1281 + .read_iter = ceph_read_iter, 1282 + .write_iter = ceph_write_iter, 1242 1283 .mmap = ceph_mmap, 1243 1284 .fsync = ceph_fsync, 1244 1285 .lock = ceph_lock, 1245 1286 .flock = ceph_flock, 1246 1287 .splice_read = generic_file_splice_read, 1247 - .splice_write = generic_file_splice_write, 1288 + .splice_write = iter_file_splice_write, 1248 1289 .unlocked_ioctl = ceph_ioctl, 1249 1290 .compat_ioctl = ceph_ioctl, 1250 1291 .fallocate = ceph_fallocate,
+27 -28
fs/cifs/cifsfs.c
··· 725 725 goto out; 726 726 } 727 727 728 - static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 729 - unsigned long nr_segs, loff_t pos) 728 + static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 730 729 { 731 730 struct inode *inode = file_inode(iocb->ki_filp); 732 731 struct cifsInodeInfo *cinode = CIFS_I(inode); ··· 736 737 if (written) 737 738 return written; 738 739 739 - written = generic_file_aio_write(iocb, iov, nr_segs, pos); 740 + written = generic_file_write_iter(iocb, from); 740 741 741 742 if (CIFS_CACHE_WRITE(CIFS_I(inode))) 742 743 goto out; 743 744 744 745 rc = filemap_fdatawrite(inode->i_mapping); 745 746 if (rc) 746 - cifs_dbg(FYI, "cifs_file_aio_write: %d rc on %p inode\n", 747 + cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n", 747 748 rc, inode); 748 749 749 750 out: ··· 879 880 }; 880 881 881 882 const struct file_operations cifs_file_ops = { 882 - .read = do_sync_read, 883 - .write = do_sync_write, 884 - .aio_read = generic_file_aio_read, 885 - .aio_write = cifs_file_aio_write, 883 + .read = new_sync_read, 884 + .write = new_sync_write, 885 + .read_iter = generic_file_read_iter, 886 + .write_iter = cifs_file_write_iter, 886 887 .open = cifs_open, 887 888 .release = cifs_close, 888 889 .lock = cifs_lock, ··· 898 899 }; 899 900 900 901 const struct file_operations cifs_file_strict_ops = { 901 - .read = do_sync_read, 902 - .write = do_sync_write, 903 - .aio_read = cifs_strict_readv, 904 - .aio_write = cifs_strict_writev, 902 + .read = new_sync_read, 903 + .write = new_sync_write, 904 + .read_iter = cifs_strict_readv, 905 + .write_iter = cifs_strict_writev, 905 906 .open = cifs_open, 906 907 .release = cifs_close, 907 908 .lock = cifs_lock, ··· 918 919 919 920 const struct file_operations cifs_file_direct_ops = { 920 921 /* BB reevaluate whether they can be done with directio, no cache */ 921 - .read = do_sync_read, 922 - .write = do_sync_write, 923 - .aio_read = cifs_user_readv, 924 - .aio_write = cifs_user_writev, 922 + .read = new_sync_read, 923 + .write = new_sync_write, 924 + .read_iter = cifs_user_readv, 925 + .write_iter = cifs_user_writev, 925 926 .open = cifs_open, 926 927 .release = cifs_close, 927 928 .lock = cifs_lock, ··· 937 938 }; 938 939 939 940 const struct file_operations cifs_file_nobrl_ops = { 940 - .read = do_sync_read, 941 - .write = do_sync_write, 942 - .aio_read = generic_file_aio_read, 943 - .aio_write = cifs_file_aio_write, 941 + .read = new_sync_read, 942 + .write = new_sync_write, 943 + .read_iter = generic_file_read_iter, 944 + .write_iter = cifs_file_write_iter, 944 945 .open = cifs_open, 945 946 .release = cifs_close, 946 947 .fsync = cifs_fsync, ··· 955 956 }; 956 957 957 958 const struct file_operations cifs_file_strict_nobrl_ops = { 958 - .read = do_sync_read, 959 - .write = do_sync_write, 960 - .aio_read = cifs_strict_readv, 961 - .aio_write = cifs_strict_writev, 959 + .read = new_sync_read, 960 + .write = new_sync_write, 961 + .read_iter = cifs_strict_readv, 962 + .write_iter = cifs_strict_writev, 962 963 .open = cifs_open, 963 964 .release = cifs_close, 964 965 .fsync = cifs_strict_fsync, ··· 974 975 975 976 const struct file_operations cifs_file_direct_nobrl_ops = { 976 977 /* BB reevaluate whether they can be done with directio, no cache */ 977 - .read = do_sync_read, 978 - .write = do_sync_write, 979 - .aio_read = cifs_user_readv, 980 - .aio_write = cifs_user_writev, 978 + .read = new_sync_read, 979 + .write = new_sync_write, 980 + .read_iter = cifs_user_readv, 981 + .write_iter = cifs_user_writev, 981 982 .open = cifs_open, 982 983 .release = cifs_close, 983 984 .fsync = cifs_fsync,
+4 -8
fs/cifs/cifsfs.h
··· 95 95 extern int cifs_open(struct inode *inode, struct file *file); 96 96 extern int cifs_close(struct inode *inode, struct file *file); 97 97 extern int cifs_closedir(struct inode *inode, struct file *file); 98 - extern ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov, 99 - unsigned long nr_segs, loff_t pos); 100 - extern ssize_t cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov, 101 - unsigned long nr_segs, loff_t pos); 102 - extern ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov, 103 - unsigned long nr_segs, loff_t pos); 104 - extern ssize_t cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov, 105 - unsigned long nr_segs, loff_t pos); 98 + extern ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to); 99 + extern ssize_t cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to); 100 + extern ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from); 101 + extern ssize_t cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from); 106 102 extern int cifs_lock(struct file *, int, struct file_lock *); 107 103 extern int cifs_fsync(struct file *, loff_t, loff_t, int); 108 104 extern int cifs_strict_fsync(struct file *, loff_t, loff_t, int);
+34 -47
fs/cifs/file.c
··· 2385 2385 } 2386 2386 2387 2387 static ssize_t 2388 - cifs_iovec_write(struct file *file, const struct iovec *iov, 2389 - unsigned long nr_segs, loff_t *poffset) 2388 + cifs_iovec_write(struct file *file, struct iov_iter *from, loff_t *poffset) 2390 2389 { 2391 2390 unsigned long nr_pages, i; 2392 2391 size_t bytes, copied, len, cur_len; 2393 2392 ssize_t total_written = 0; 2394 2393 loff_t offset; 2395 - struct iov_iter it; 2396 2394 struct cifsFileInfo *open_file; 2397 2395 struct cifs_tcon *tcon; 2398 2396 struct cifs_sb_info *cifs_sb; ··· 2399 2401 int rc; 2400 2402 pid_t pid; 2401 2403 2402 - len = iov_length(iov, nr_segs); 2403 - if (!len) 2404 - return 0; 2405 - 2404 + len = iov_iter_count(from); 2406 2405 rc = generic_write_checks(file, poffset, &len, 0); 2407 2406 if (rc) 2408 2407 return rc; 2408 + 2409 + if (!len) 2410 + return 0; 2411 + 2412 + iov_iter_truncate(from, len); 2409 2413 2410 2414 INIT_LIST_HEAD(&wdata_list); 2411 2415 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); ··· 2424 2424 else 2425 2425 pid = current->tgid; 2426 2426 2427 - iov_iter_init(&it, iov, nr_segs, len, 0); 2428 2427 do { 2429 2428 size_t save_len; 2430 2429 ··· 2443 2444 2444 2445 save_len = cur_len; 2445 2446 for (i = 0; i < nr_pages; i++) { 2446 - bytes = min_t(const size_t, cur_len, PAGE_SIZE); 2447 - copied = iov_iter_copy_from_user(wdata->pages[i], &it, 2448 - 0, bytes); 2447 + bytes = min_t(size_t, cur_len, PAGE_SIZE); 2448 + copied = copy_page_from_iter(wdata->pages[i], 0, bytes, 2449 + from); 2449 2450 cur_len -= copied; 2450 - iov_iter_advance(&it, copied); 2451 2451 /* 2452 2452 * If we didn't copy as much as we expected, then that 2453 2453 * may mean we trod into an unmapped area. Stop copying ··· 2544 2546 return total_written ? total_written : (ssize_t)rc; 2545 2547 } 2546 2548 2547 - ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov, 2548 - unsigned long nr_segs, loff_t pos) 2549 + ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from) 2549 2550 { 2550 2551 ssize_t written; 2551 2552 struct inode *inode; 2553 + loff_t pos = iocb->ki_pos; 2552 2554 2553 2555 inode = file_inode(iocb->ki_filp); 2554 2556 ··· 2558 2560 * write request. 2559 2561 */ 2560 2562 2561 - written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos); 2563 + written = cifs_iovec_write(iocb->ki_filp, from, &pos); 2562 2564 if (written > 0) { 2563 2565 set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(inode)->flags); 2564 2566 iocb->ki_pos = pos; ··· 2568 2570 } 2569 2571 2570 2572 static ssize_t 2571 - cifs_writev(struct kiocb *iocb, const struct iovec *iov, 2572 - unsigned long nr_segs, loff_t pos) 2573 + cifs_writev(struct kiocb *iocb, struct iov_iter *from) 2573 2574 { 2574 2575 struct file *file = iocb->ki_filp; 2575 2576 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data; ··· 2586 2589 mutex_lock(&inode->i_mutex); 2587 2590 if (file->f_flags & O_APPEND) 2588 2591 lock_pos = i_size_read(inode); 2589 - if (!cifs_find_lock_conflict(cfile, lock_pos, iov_length(iov, nr_segs), 2592 + if (!cifs_find_lock_conflict(cfile, lock_pos, iov_iter_count(from), 2590 2593 server->vals->exclusive_lock_type, NULL, 2591 2594 CIFS_WRITE_OP)) { 2592 - rc = __generic_file_aio_write(iocb, iov, nr_segs); 2595 + rc = __generic_file_write_iter(iocb, from); 2593 2596 mutex_unlock(&inode->i_mutex); 2594 2597 2595 2598 if (rc > 0) { ··· 2607 2610 } 2608 2611 2609 2612 ssize_t 2610 - cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov, 2611 - unsigned long nr_segs, loff_t pos) 2613 + cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from) 2612 2614 { 2613 2615 struct inode *inode = file_inode(iocb->ki_filp); 2614 2616 struct cifsInodeInfo *cinode = CIFS_I(inode); ··· 2625 2629 if (cap_unix(tcon->ses) && 2626 2630 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) 2627 2631 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) { 2628 - written = generic_file_aio_write( 2629 - iocb, iov, nr_segs, pos); 2632 + written = generic_file_write_iter(iocb, from); 2630 2633 goto out; 2631 2634 } 2632 - written = cifs_writev(iocb, iov, nr_segs, pos); 2635 + written = cifs_writev(iocb, from); 2633 2636 goto out; 2634 2637 } 2635 2638 /* ··· 2637 2642 * affected pages because it may cause a error with mandatory locks on 2638 2643 * these pages but not on the region from pos to ppos+len-1. 2639 2644 */ 2640 - written = cifs_user_writev(iocb, iov, nr_segs, pos); 2645 + written = cifs_user_writev(iocb, from); 2641 2646 if (written > 0 && CIFS_CACHE_READ(cinode)) { 2642 2647 /* 2643 2648 * Windows 7 server can delay breaking level2 oplock if a write ··· 2826 2831 return total_read > 0 ? total_read : result; 2827 2832 } 2828 2833 2829 - ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov, 2830 - unsigned long nr_segs, loff_t pos) 2834 + ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to) 2831 2835 { 2832 2836 struct file *file = iocb->ki_filp; 2833 2837 ssize_t rc; 2834 2838 size_t len, cur_len; 2835 2839 ssize_t total_read = 0; 2836 - loff_t offset = pos; 2840 + loff_t offset = iocb->ki_pos; 2837 2841 unsigned int npages; 2838 2842 struct cifs_sb_info *cifs_sb; 2839 2843 struct cifs_tcon *tcon; 2840 2844 struct cifsFileInfo *open_file; 2841 2845 struct cifs_readdata *rdata, *tmp; 2842 2846 struct list_head rdata_list; 2843 - struct iov_iter to; 2844 2847 pid_t pid; 2845 2848 2846 - if (!nr_segs) 2847 - return 0; 2848 - 2849 - len = iov_length(iov, nr_segs); 2849 + len = iov_iter_count(to); 2850 2850 if (!len) 2851 2851 return 0; 2852 - 2853 - iov_iter_init(&to, iov, nr_segs, len, 0); 2854 2852 2855 2853 INIT_LIST_HEAD(&rdata_list); 2856 2854 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb); ··· 2902 2914 if (!list_empty(&rdata_list)) 2903 2915 rc = 0; 2904 2916 2905 - len = iov_iter_count(&to); 2917 + len = iov_iter_count(to); 2906 2918 /* the loop below should proceed in the order of increasing offsets */ 2907 2919 list_for_each_entry_safe(rdata, tmp, &rdata_list, list) { 2908 2920 again: ··· 2919 2931 goto again; 2920 2932 } 2921 2933 } else { 2922 - rc = cifs_readdata_to_iov(rdata, &to); 2934 + rc = cifs_readdata_to_iov(rdata, to); 2923 2935 } 2924 2936 2925 2937 } ··· 2927 2939 kref_put(&rdata->refcount, cifs_uncached_readdata_release); 2928 2940 } 2929 2941 2930 - total_read = len - iov_iter_count(&to); 2942 + total_read = len - iov_iter_count(to); 2931 2943 2932 2944 cifs_stats_bytes_read(tcon, total_read); 2933 2945 ··· 2936 2948 rc = 0; 2937 2949 2938 2950 if (total_read) { 2939 - iocb->ki_pos = pos + total_read; 2951 + iocb->ki_pos += total_read; 2940 2952 return total_read; 2941 2953 } 2942 2954 return rc; 2943 2955 } 2944 2956 2945 2957 ssize_t 2946 - cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov, 2947 - unsigned long nr_segs, loff_t pos) 2958 + cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to) 2948 2959 { 2949 2960 struct inode *inode = file_inode(iocb->ki_filp); 2950 2961 struct cifsInodeInfo *cinode = CIFS_I(inode); ··· 2962 2975 * pos+len-1. 2963 2976 */ 2964 2977 if (!CIFS_CACHE_READ(cinode)) 2965 - return cifs_user_readv(iocb, iov, nr_segs, pos); 2978 + return cifs_user_readv(iocb, to); 2966 2979 2967 2980 if (cap_unix(tcon->ses) && 2968 2981 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) && 2969 2982 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) 2970 - return generic_file_aio_read(iocb, iov, nr_segs, pos); 2983 + return generic_file_read_iter(iocb, to); 2971 2984 2972 2985 /* 2973 2986 * We need to hold the sem to be sure nobody modifies lock list 2974 2987 * with a brlock that prevents reading. 2975 2988 */ 2976 2989 down_read(&cinode->lock_sem); 2977 - if (!cifs_find_lock_conflict(cfile, pos, iov_length(iov, nr_segs), 2990 + if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to), 2978 2991 tcon->ses->server->vals->shared_lock_type, 2979 2992 NULL, CIFS_READ_OP)) 2980 - rc = generic_file_aio_read(iocb, iov, nr_segs, pos); 2993 + rc = generic_file_read_iter(iocb, to); 2981 2994 up_read(&cinode->lock_sem); 2982 2995 return rc; 2983 2996 } ··· 3690 3703 * Direct IO is not yet supported in the cached mode. 3691 3704 */ 3692 3705 static ssize_t 3693 - cifs_direct_io(int rw, struct kiocb *iocb, const struct iovec *iov, 3694 - loff_t pos, unsigned long nr_segs) 3706 + cifs_direct_io(int rw, struct kiocb *iocb, struct iov_iter *iter, 3707 + loff_t pos) 3695 3708 { 3696 3709 /* 3697 3710 * FIXME
+3 -1
fs/dcache.c
··· 532 532 struct dentry *parent = dentry->d_parent; 533 533 if (IS_ROOT(dentry)) 534 534 return NULL; 535 + if (unlikely((int)dentry->d_lockref.count < 0)) 536 + return NULL; 535 537 if (likely(spin_trylock(&parent->d_lock))) 536 538 return parent; 537 - spin_unlock(&dentry->d_lock); 538 539 rcu_read_lock(); 540 + spin_unlock(&dentry->d_lock); 539 541 again: 540 542 parent = ACCESS_ONCE(dentry->d_parent); 541 543 spin_lock(&parent->d_lock);
+51 -113
fs/direct-io.c
··· 77 77 unsigned blocks_available; /* At block_in_file. changes */ 78 78 int reap_counter; /* rate limit reaping */ 79 79 sector_t final_block_in_request;/* doesn't change */ 80 - unsigned first_block_in_page; /* doesn't change, Used only once */ 81 80 int boundary; /* prev block is at a boundary */ 82 81 get_block_t *get_block; /* block mapping function */ 83 82 dio_submit_t *submit_io; /* IO submition function */ ··· 97 98 sector_t cur_page_block; /* Where it starts */ 98 99 loff_t cur_page_fs_offset; /* Offset in file */ 99 100 100 - /* 101 - * Page fetching state. These variables belong to dio_refill_pages(). 102 - */ 103 - int curr_page; /* changes */ 104 - int total_pages; /* doesn't change */ 105 - unsigned long curr_user_address;/* changes */ 106 - 101 + struct iov_iter *iter; 107 102 /* 108 103 * Page queue. These variables belong to dio_refill_pages() and 109 104 * dio_get_page(). 110 105 */ 111 106 unsigned head; /* next page to process */ 112 107 unsigned tail; /* last valid page + 1 */ 108 + size_t from, to; 113 109 }; 114 110 115 111 /* dio_state communicated between submission path and end_io */ ··· 157 163 */ 158 164 static inline int dio_refill_pages(struct dio *dio, struct dio_submit *sdio) 159 165 { 160 - int ret; 161 - int nr_pages; 166 + ssize_t ret; 162 167 163 - nr_pages = min(sdio->total_pages - sdio->curr_page, DIO_PAGES); 164 - ret = get_user_pages_fast( 165 - sdio->curr_user_address, /* Where from? */ 166 - nr_pages, /* How many pages? */ 167 - dio->rw == READ, /* Write to memory? */ 168 - &dio->pages[0]); /* Put results here */ 168 + ret = iov_iter_get_pages(sdio->iter, dio->pages, DIO_PAGES * PAGE_SIZE, 169 + &sdio->from); 169 170 170 171 if (ret < 0 && sdio->blocks_available && (dio->rw & WRITE)) { 171 172 struct page *page = ZERO_PAGE(0); ··· 175 186 dio->pages[0] = page; 176 187 sdio->head = 0; 177 188 sdio->tail = 1; 178 - ret = 0; 179 - goto out; 189 + sdio->from = 0; 190 + sdio->to = PAGE_SIZE; 191 + return 0; 180 192 } 181 193 182 194 if (ret >= 0) { 183 - sdio->curr_user_address += ret * PAGE_SIZE; 184 - sdio->curr_page += ret; 195 + iov_iter_advance(sdio->iter, ret); 196 + ret += sdio->from; 185 197 sdio->head = 0; 186 - sdio->tail = ret; 187 - ret = 0; 198 + sdio->tail = (ret + PAGE_SIZE - 1) / PAGE_SIZE; 199 + sdio->to = ((ret - 1) & (PAGE_SIZE - 1)) + 1; 200 + return 0; 188 201 } 189 - out: 190 202 return ret; 191 203 } 192 204 ··· 198 208 * L1 cache. 199 209 */ 200 210 static inline struct page *dio_get_page(struct dio *dio, 201 - struct dio_submit *sdio) 211 + struct dio_submit *sdio, size_t *from, size_t *to) 202 212 { 213 + int n; 203 214 if (dio_pages_present(sdio) == 0) { 204 215 int ret; 205 216 ··· 209 218 return ERR_PTR(ret); 210 219 BUG_ON(dio_pages_present(sdio) == 0); 211 220 } 212 - return dio->pages[sdio->head++]; 221 + n = sdio->head++; 222 + *from = n ? 0 : sdio->from; 223 + *to = (n == sdio->tail - 1) ? sdio->to : PAGE_SIZE; 224 + return dio->pages[n]; 213 225 } 214 226 215 227 /** ··· 416 422 */ 417 423 static inline void dio_cleanup(struct dio *dio, struct dio_submit *sdio) 418 424 { 419 - while (dio_pages_present(sdio)) 420 - page_cache_release(dio_get_page(dio, sdio)); 425 + while (sdio->head < sdio->tail) 426 + page_cache_release(dio->pages[sdio->head++]); 421 427 } 422 428 423 429 /* ··· 906 912 struct buffer_head *map_bh) 907 913 { 908 914 const unsigned blkbits = sdio->blkbits; 909 - const unsigned blocks_per_page = PAGE_SIZE >> blkbits; 910 - struct page *page; 911 - unsigned block_in_page; 912 915 int ret = 0; 913 916 914 - /* The I/O can start at any block offset within the first page */ 915 - block_in_page = sdio->first_block_in_page; 916 - 917 917 while (sdio->block_in_file < sdio->final_block_in_request) { 918 - page = dio_get_page(dio, sdio); 918 + struct page *page; 919 + size_t from, to; 920 + page = dio_get_page(dio, sdio, &from, &to); 919 921 if (IS_ERR(page)) { 920 922 ret = PTR_ERR(page); 921 923 goto out; 922 924 } 923 925 924 - while (block_in_page < blocks_per_page) { 925 - unsigned offset_in_page = block_in_page << blkbits; 926 + while (from < to) { 926 927 unsigned this_chunk_bytes; /* # of bytes mapped */ 927 928 unsigned this_chunk_blocks; /* # of blocks */ 928 929 unsigned u; ··· 988 999 page_cache_release(page); 989 1000 goto out; 990 1001 } 991 - zero_user(page, block_in_page << blkbits, 992 - 1 << blkbits); 1002 + zero_user(page, from, 1 << blkbits); 993 1003 sdio->block_in_file++; 994 - block_in_page++; 1004 + from += 1 << blkbits; 1005 + dio->result += 1 << blkbits; 995 1006 goto next_block; 996 1007 } 997 1008 ··· 1008 1019 * can add to this page 1009 1020 */ 1010 1021 this_chunk_blocks = sdio->blocks_available; 1011 - u = (PAGE_SIZE - offset_in_page) >> blkbits; 1022 + u = (to - from) >> blkbits; 1012 1023 if (this_chunk_blocks > u) 1013 1024 this_chunk_blocks = u; 1014 1025 u = sdio->final_block_in_request - sdio->block_in_file; ··· 1020 1031 if (this_chunk_blocks == sdio->blocks_available) 1021 1032 sdio->boundary = buffer_boundary(map_bh); 1022 1033 ret = submit_page_section(dio, sdio, page, 1023 - offset_in_page, 1034 + from, 1024 1035 this_chunk_bytes, 1025 1036 sdio->next_block_for_io, 1026 1037 map_bh); ··· 1031 1042 sdio->next_block_for_io += this_chunk_blocks; 1032 1043 1033 1044 sdio->block_in_file += this_chunk_blocks; 1034 - block_in_page += this_chunk_blocks; 1045 + from += this_chunk_bytes; 1046 + dio->result += this_chunk_bytes; 1035 1047 sdio->blocks_available -= this_chunk_blocks; 1036 1048 next_block: 1037 1049 BUG_ON(sdio->block_in_file > sdio->final_block_in_request); ··· 1042 1052 1043 1053 /* Drop the ref which was taken in get_user_pages() */ 1044 1054 page_cache_release(page); 1045 - block_in_page = 0; 1046 1055 } 1047 1056 out: 1048 1057 return ret; ··· 1096 1107 */ 1097 1108 static inline ssize_t 1098 1109 do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, 1099 - struct block_device *bdev, const struct iovec *iov, loff_t offset, 1100 - unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, 1110 + struct block_device *bdev, struct iov_iter *iter, loff_t offset, 1111 + get_block_t get_block, dio_iodone_t end_io, 1101 1112 dio_submit_t submit_io, int flags) 1102 1113 { 1103 - int seg; 1104 - size_t size; 1105 - unsigned long addr; 1106 1114 unsigned i_blkbits = ACCESS_ONCE(inode->i_blkbits); 1107 1115 unsigned blkbits = i_blkbits; 1108 1116 unsigned blocksize_mask = (1 << blkbits) - 1; 1109 1117 ssize_t retval = -EINVAL; 1110 - loff_t end = offset; 1118 + loff_t end = offset + iov_iter_count(iter); 1111 1119 struct dio *dio; 1112 1120 struct dio_submit sdio = { 0, }; 1113 - unsigned long user_addr; 1114 - size_t bytes; 1115 1121 struct buffer_head map_bh = { 0, }; 1116 1122 struct blk_plug plug; 1123 + unsigned long align = offset | iov_iter_alignment(iter); 1117 1124 1118 1125 if (rw & WRITE) 1119 1126 rw = WRITE_ODIRECT; ··· 1119 1134 * the early prefetch in the caller enough time. 1120 1135 */ 1121 1136 1122 - if (offset & blocksize_mask) { 1137 + if (align & blocksize_mask) { 1123 1138 if (bdev) 1124 1139 blkbits = blksize_bits(bdev_logical_block_size(bdev)); 1125 1140 blocksize_mask = (1 << blkbits) - 1; 1126 - if (offset & blocksize_mask) 1141 + if (align & blocksize_mask) 1127 1142 goto out; 1128 1143 } 1129 1144 1130 - /* Check the memory alignment. Blocks cannot straddle pages */ 1131 - for (seg = 0; seg < nr_segs; seg++) { 1132 - addr = (unsigned long)iov[seg].iov_base; 1133 - size = iov[seg].iov_len; 1134 - end += size; 1135 - if (unlikely((addr & blocksize_mask) || 1136 - (size & blocksize_mask))) { 1137 - if (bdev) 1138 - blkbits = blksize_bits( 1139 - bdev_logical_block_size(bdev)); 1140 - blocksize_mask = (1 << blkbits) - 1; 1141 - if ((addr & blocksize_mask) || (size & blocksize_mask)) 1142 - goto out; 1143 - } 1144 - } 1145 - 1146 1145 /* watch out for a 0 len io from a tricksy fs */ 1147 - if (rw == READ && end == offset) 1146 + if (rw == READ && !iov_iter_count(iter)) 1148 1147 return 0; 1149 1148 1150 1149 dio = kmem_cache_alloc(dio_cache, GFP_KERNEL); ··· 1218 1249 spin_lock_init(&dio->bio_lock); 1219 1250 dio->refcount = 1; 1220 1251 1252 + sdio.iter = iter; 1253 + sdio.final_block_in_request = 1254 + (offset + iov_iter_count(iter)) >> blkbits; 1255 + 1221 1256 /* 1222 1257 * In case of non-aligned buffers, we may need 2 more 1223 1258 * pages since we need to zero out first and last block. ··· 1229 1256 if (unlikely(sdio.blkfactor)) 1230 1257 sdio.pages_in_io = 2; 1231 1258 1232 - for (seg = 0; seg < nr_segs; seg++) { 1233 - user_addr = (unsigned long)iov[seg].iov_base; 1234 - sdio.pages_in_io += 1235 - ((user_addr + iov[seg].iov_len + PAGE_SIZE-1) / 1236 - PAGE_SIZE - user_addr / PAGE_SIZE); 1237 - } 1259 + sdio.pages_in_io += iov_iter_npages(iter, INT_MAX); 1238 1260 1239 1261 blk_start_plug(&plug); 1240 1262 1241 - for (seg = 0; seg < nr_segs; seg++) { 1242 - user_addr = (unsigned long)iov[seg].iov_base; 1243 - sdio.size += bytes = iov[seg].iov_len; 1244 - 1245 - /* Index into the first page of the first block */ 1246 - sdio.first_block_in_page = (user_addr & ~PAGE_MASK) >> blkbits; 1247 - sdio.final_block_in_request = sdio.block_in_file + 1248 - (bytes >> blkbits); 1249 - /* Page fetching state */ 1250 - sdio.head = 0; 1251 - sdio.tail = 0; 1252 - sdio.curr_page = 0; 1253 - 1254 - sdio.total_pages = 0; 1255 - if (user_addr & (PAGE_SIZE-1)) { 1256 - sdio.total_pages++; 1257 - bytes -= PAGE_SIZE - (user_addr & (PAGE_SIZE - 1)); 1258 - } 1259 - sdio.total_pages += (bytes + PAGE_SIZE - 1) / PAGE_SIZE; 1260 - sdio.curr_user_address = user_addr; 1261 - 1262 - retval = do_direct_IO(dio, &sdio, &map_bh); 1263 - 1264 - dio->result += iov[seg].iov_len - 1265 - ((sdio.final_block_in_request - sdio.block_in_file) << 1266 - blkbits); 1267 - 1268 - if (retval) { 1269 - dio_cleanup(dio, &sdio); 1270 - break; 1271 - } 1272 - } /* end iovec loop */ 1263 + retval = do_direct_IO(dio, &sdio, &map_bh); 1264 + if (retval) 1265 + dio_cleanup(dio, &sdio); 1273 1266 1274 1267 if (retval == -ENOTBLK) { 1275 1268 /* ··· 1304 1365 1305 1366 ssize_t 1306 1367 __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, 1307 - struct block_device *bdev, const struct iovec *iov, loff_t offset, 1308 - unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, 1368 + struct block_device *bdev, struct iov_iter *iter, loff_t offset, 1369 + get_block_t get_block, dio_iodone_t end_io, 1309 1370 dio_submit_t submit_io, int flags) 1310 1371 { 1311 1372 /* ··· 1320 1381 prefetch(bdev->bd_queue); 1321 1382 prefetch((char *)bdev->bd_queue + SMP_CACHE_BYTES); 1322 1383 1323 - return do_blockdev_direct_IO(rw, iocb, inode, bdev, iov, offset, 1324 - nr_segs, get_block, end_io, 1325 - submit_io, flags); 1384 + return do_blockdev_direct_IO(rw, iocb, inode, bdev, iter, offset, 1385 + get_block, end_io, submit_io, flags); 1326 1386 } 1327 1387 1328 1388 EXPORT_SYMBOL(__blockdev_direct_IO);
+6 -7
fs/ecryptfs/file.c
··· 45 45 * The function to be used for directory reads is ecryptfs_read. 46 46 */ 47 47 static ssize_t ecryptfs_read_update_atime(struct kiocb *iocb, 48 - const struct iovec *iov, 49 - unsigned long nr_segs, loff_t pos) 48 + struct iov_iter *to) 50 49 { 51 50 ssize_t rc; 52 51 struct path *path; 53 52 struct file *file = iocb->ki_filp; 54 53 55 - rc = generic_file_aio_read(iocb, iov, nr_segs, pos); 54 + rc = generic_file_read_iter(iocb, to); 56 55 /* 57 56 * Even though this is a async interface, we need to wait 58 57 * for IO to finish to update atime ··· 351 352 352 353 const struct file_operations ecryptfs_main_fops = { 353 354 .llseek = generic_file_llseek, 354 - .read = do_sync_read, 355 - .aio_read = ecryptfs_read_update_atime, 356 - .write = do_sync_write, 357 - .aio_write = generic_file_aio_write, 355 + .read = new_sync_read, 356 + .read_iter = ecryptfs_read_update_atime, 357 + .write = new_sync_write, 358 + .write_iter = generic_file_write_iter, 358 359 .iterate = ecryptfs_readdir, 359 360 .unlocked_ioctl = ecryptfs_unlocked_ioctl, 360 361 #ifdef CONFIG_COMPAT
+5 -5
fs/exofs/file.c
··· 67 67 68 68 const struct file_operations exofs_file_operations = { 69 69 .llseek = generic_file_llseek, 70 - .read = do_sync_read, 71 - .write = do_sync_write, 72 - .aio_read = generic_file_aio_read, 73 - .aio_write = generic_file_aio_write, 70 + .read = new_sync_read, 71 + .write = new_sync_write, 72 + .read_iter = generic_file_read_iter, 73 + .write_iter = generic_file_write_iter, 74 74 .mmap = generic_file_mmap, 75 75 .open = generic_file_open, 76 76 .release = exofs_release_file, 77 77 .fsync = exofs_file_fsync, 78 78 .flush = exofs_flush, 79 79 .splice_read = generic_file_splice_read, 80 - .splice_write = generic_file_splice_write, 80 + .splice_write = iter_file_splice_write, 81 81 }; 82 82 83 83 const struct inode_operations exofs_file_inode_operations = {
+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 }
+5 -5
fs/ext2/file.c
··· 62 62 */ 63 63 const struct file_operations ext2_file_operations = { 64 64 .llseek = generic_file_llseek, 65 - .read = do_sync_read, 66 - .write = do_sync_write, 67 - .aio_read = generic_file_aio_read, 68 - .aio_write = generic_file_aio_write, 65 + .read = new_sync_read, 66 + .write = new_sync_write, 67 + .read_iter = generic_file_read_iter, 68 + .write_iter = generic_file_write_iter, 69 69 .unlocked_ioctl = ext2_ioctl, 70 70 #ifdef CONFIG_COMPAT 71 71 .compat_ioctl = ext2_compat_ioctl, ··· 75 75 .release = ext2_release_file, 76 76 .fsync = ext2_fsync, 77 77 .splice_read = generic_file_splice_read, 78 - .splice_write = generic_file_splice_write, 78 + .splice_write = iter_file_splice_write, 79 79 }; 80 80 81 81 #ifdef CONFIG_EXT2_FS_XIP
+5 -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 + size_t count = iov_iter_count(iter); 859 860 ssize_t ret; 860 861 861 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 862 - ext2_get_block); 862 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 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 + count); 865 865 return ret; 866 866 } 867 867
+5 -5
fs/ext3/file.c
··· 50 50 51 51 const struct file_operations ext3_file_operations = { 52 52 .llseek = generic_file_llseek, 53 - .read = do_sync_read, 54 - .write = do_sync_write, 55 - .aio_read = generic_file_aio_read, 56 - .aio_write = generic_file_aio_write, 53 + .read = new_sync_read, 54 + .write = new_sync_write, 55 + .read_iter = generic_file_read_iter, 56 + .write_iter = generic_file_write_iter, 57 57 .unlocked_ioctl = ext3_ioctl, 58 58 #ifdef CONFIG_COMPAT 59 59 .compat_ioctl = ext3_compat_ioctl, ··· 63 63 .release = ext3_release_file, 64 64 .fsync = ext3_sync_file, 65 65 .splice_read = generic_file_splice_read, 66 - .splice_write = generic_file_splice_write, 66 + .splice_write = iter_file_splice_write, 67 67 }; 68 68 69 69 const struct inode_operations ext3_file_inode_operations = {
+6 -9
fs/ext3/inode.c
··· 1821 1821 * VFS code falls back into buffered path in that case so we are safe. 1822 1822 */ 1823 1823 static ssize_t ext3_direct_IO(int rw, struct kiocb *iocb, 1824 - const struct iovec *iov, loff_t offset, 1825 - unsigned long nr_segs) 1824 + struct iov_iter *iter, loff_t offset) 1826 1825 { 1827 1826 struct file *file = iocb->ki_filp; 1828 1827 struct inode *inode = file->f_mapping->host; ··· 1829 1830 handle_t *handle; 1830 1831 ssize_t ret; 1831 1832 int orphan = 0; 1832 - size_t count = iov_length(iov, nr_segs); 1833 + size_t count = iov_iter_count(iter); 1833 1834 int retries = 0; 1834 1835 1835 - trace_ext3_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); 1836 + trace_ext3_direct_IO_enter(inode, offset, count, rw); 1836 1837 1837 1838 if (rw == WRITE) { 1838 1839 loff_t final_size = offset + count; ··· 1856 1857 } 1857 1858 1858 1859 retry: 1859 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 1860 - ext3_get_block); 1860 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, ext3_get_block); 1861 1861 /* 1862 1862 * In case of error extending write may have instantiated a few 1863 1863 * blocks outside i_size. Trim these off again. 1864 1864 */ 1865 1865 if (unlikely((rw & WRITE) && ret < 0)) { 1866 1866 loff_t isize = i_size_read(inode); 1867 - loff_t end = offset + iov_length(iov, nr_segs); 1867 + loff_t end = offset + count; 1868 1868 1869 1869 if (end > isize) 1870 1870 ext3_truncate_failed_direct_write(inode); ··· 1908 1910 ret = err; 1909 1911 } 1910 1912 out: 1911 - trace_ext3_direct_IO_exit(inode, offset, 1912 - iov_length(iov, nr_segs), rw, ret); 1913 + trace_ext3_direct_IO_exit(inode, offset, count, rw, ret); 1913 1914 return ret; 1914 1915 } 1915 1916
+1 -2
fs/ext4/ext4.h
··· 2140 2140 extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, 2141 2141 struct ext4_map_blocks *map, int flags); 2142 2142 extern ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, 2143 - const struct iovec *iov, loff_t offset, 2144 - unsigned long nr_segs); 2143 + struct iov_iter *iter, loff_t offset); 2145 2144 extern int ext4_ind_calc_metadata_amount(struct inode *inode, sector_t lblock); 2146 2145 extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks); 2147 2146 extern void ext4_ind_truncate(handle_t *, struct inode *inode);
+14 -21
fs/ext4/file.c
··· 74 74 * or one thread will zero the other's data, causing corruption. 75 75 */ 76 76 static int 77 - ext4_unaligned_aio(struct inode *inode, const struct iovec *iov, 78 - unsigned long nr_segs, loff_t pos) 77 + ext4_unaligned_aio(struct inode *inode, struct iov_iter *from, loff_t pos) 79 78 { 80 79 struct super_block *sb = inode->i_sb; 81 80 int blockmask = sb->s_blocksize - 1; 82 - size_t count = iov_length(iov, nr_segs); 83 - loff_t final_size = pos + count; 84 81 85 82 if (pos >= i_size_read(inode)) 86 83 return 0; 87 84 88 - if ((pos & blockmask) || (final_size & blockmask)) 85 + if ((pos | iov_iter_alignment(from)) & blockmask) 89 86 return 1; 90 87 91 88 return 0; 92 89 } 93 90 94 91 static ssize_t 95 - ext4_file_write(struct kiocb *iocb, const struct iovec *iov, 96 - unsigned long nr_segs, loff_t pos) 92 + ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 97 93 { 98 94 struct file *file = iocb->ki_filp; 99 95 struct inode *inode = file_inode(iocb->ki_filp); ··· 97 101 struct blk_plug plug; 98 102 int o_direct = file->f_flags & O_DIRECT; 99 103 int overwrite = 0; 100 - size_t length = iov_length(iov, nr_segs); 104 + size_t length = iov_iter_count(from); 101 105 ssize_t ret; 102 - 103 - BUG_ON(iocb->ki_pos != pos); 106 + loff_t pos = iocb->ki_pos; 104 107 105 108 /* 106 109 * Unaligned direct AIO must be serialized; see comment above ··· 109 114 ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) && 110 115 !is_sync_kiocb(iocb) && 111 116 (file->f_flags & O_APPEND || 112 - ext4_unaligned_aio(inode, iov, nr_segs, pos))) { 117 + ext4_unaligned_aio(inode, from, pos))) { 113 118 aio_mutex = ext4_aio_mutex(inode); 114 119 mutex_lock(aio_mutex); 115 120 ext4_unwritten_wait(inode); ··· 133 138 goto errout; 134 139 } 135 140 136 - if (pos + length > sbi->s_bitmap_maxbytes) { 137 - nr_segs = iov_shorten((struct iovec *)iov, nr_segs, 138 - sbi->s_bitmap_maxbytes - pos); 139 - } 141 + if (pos + length > sbi->s_bitmap_maxbytes) 142 + iov_iter_truncate(from, sbi->s_bitmap_maxbytes - pos); 140 143 } 141 144 142 145 if (o_direct) { ··· 172 179 } 173 180 } 174 181 175 - ret = __generic_file_aio_write(iocb, iov, nr_segs); 182 + ret = __generic_file_write_iter(iocb, from); 176 183 mutex_unlock(&inode->i_mutex); 177 184 178 185 if (ret > 0) { ··· 587 594 588 595 const struct file_operations ext4_file_operations = { 589 596 .llseek = ext4_llseek, 590 - .read = do_sync_read, 591 - .write = do_sync_write, 592 - .aio_read = generic_file_aio_read, 593 - .aio_write = ext4_file_write, 597 + .read = new_sync_read, 598 + .write = new_sync_write, 599 + .read_iter = generic_file_read_iter, 600 + .write_iter = ext4_file_write_iter, 594 601 .unlocked_ioctl = ext4_ioctl, 595 602 #ifdef CONFIG_COMPAT 596 603 .compat_ioctl = ext4_compat_ioctl, ··· 600 607 .release = ext4_release_file, 601 608 .fsync = ext4_sync_file, 602 609 .splice_read = generic_file_splice_read, 603 - .splice_write = generic_file_splice_write, 610 + .splice_write = iter_file_splice_write, 604 611 .fallocate = ext4_fallocate, 605 612 }; 606 613
+6 -8
fs/ext4/indirect.c
··· 639 639 * VFS code falls back into buffered path in that case so we are safe. 640 640 */ 641 641 ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, 642 - const struct iovec *iov, loff_t offset, 643 - unsigned long nr_segs) 642 + struct iov_iter *iter, loff_t offset) 644 643 { 645 644 struct file *file = iocb->ki_filp; 646 645 struct inode *inode = file->f_mapping->host; ··· 647 648 handle_t *handle; 648 649 ssize_t ret; 649 650 int orphan = 0; 650 - size_t count = iov_length(iov, nr_segs); 651 + size_t count = iov_iter_count(iter); 651 652 int retries = 0; 652 653 653 654 if (rw == WRITE) { ··· 686 687 goto locked; 687 688 } 688 689 ret = __blockdev_direct_IO(rw, iocb, inode, 689 - inode->i_sb->s_bdev, iov, 690 - offset, nr_segs, 690 + inode->i_sb->s_bdev, iter, offset, 691 691 ext4_get_block, NULL, NULL, 0); 692 692 inode_dio_done(inode); 693 693 } else { 694 694 locked: 695 - ret = blockdev_direct_IO(rw, iocb, inode, iov, 696 - offset, nr_segs, ext4_get_block); 695 + ret = blockdev_direct_IO(rw, iocb, inode, iter, 696 + offset, ext4_get_block); 697 697 698 698 if (unlikely((rw & WRITE) && ret < 0)) { 699 699 loff_t isize = i_size_read(inode); 700 - loff_t end = offset + iov_length(iov, nr_segs); 700 + loff_t end = offset + count; 701 701 702 702 if (end > isize) 703 703 ext4_truncate_failed_write(inode);
+11 -13
fs/ext4/inode.c
··· 3093 3093 * 3094 3094 */ 3095 3095 static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, 3096 - const struct iovec *iov, loff_t offset, 3097 - unsigned long nr_segs) 3096 + struct iov_iter *iter, loff_t offset) 3098 3097 { 3099 3098 struct file *file = iocb->ki_filp; 3100 3099 struct inode *inode = file->f_mapping->host; 3101 3100 ssize_t ret; 3102 - size_t count = iov_length(iov, nr_segs); 3101 + size_t count = iov_iter_count(iter); 3103 3102 int overwrite = 0; 3104 3103 get_block_t *get_block_func = NULL; 3105 3104 int dio_flags = 0; ··· 3107 3108 3108 3109 /* Use the old path for reads and writes beyond i_size. */ 3109 3110 if (rw != WRITE || final_size > inode->i_size) 3110 - return ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); 3111 + return ext4_ind_direct_IO(rw, iocb, iter, offset); 3111 3112 3112 3113 BUG_ON(iocb->private == NULL); 3113 3114 ··· 3174 3175 dio_flags = DIO_LOCKING; 3175 3176 } 3176 3177 ret = __blockdev_direct_IO(rw, iocb, inode, 3177 - inode->i_sb->s_bdev, iov, 3178 - offset, nr_segs, 3178 + inode->i_sb->s_bdev, iter, 3179 + offset, 3179 3180 get_block_func, 3180 3181 ext4_end_io_dio, 3181 3182 NULL, ··· 3229 3230 } 3230 3231 3231 3232 static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, 3232 - const struct iovec *iov, loff_t offset, 3233 - unsigned long nr_segs) 3233 + struct iov_iter *iter, loff_t offset) 3234 3234 { 3235 3235 struct file *file = iocb->ki_filp; 3236 3236 struct inode *inode = file->f_mapping->host; 3237 + size_t count = iov_iter_count(iter); 3237 3238 ssize_t ret; 3238 3239 3239 3240 /* ··· 3246 3247 if (ext4_has_inline_data(inode)) 3247 3248 return 0; 3248 3249 3249 - trace_ext4_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); 3250 + trace_ext4_direct_IO_enter(inode, offset, count, rw); 3250 3251 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) 3251 - ret = ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); 3252 + ret = ext4_ext_direct_IO(rw, iocb, iter, offset); 3252 3253 else 3253 - ret = ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); 3254 - trace_ext4_direct_IO_exit(inode, offset, 3255 - iov_length(iov, nr_segs), rw, ret); 3254 + ret = ext4_ind_direct_IO(rw, iocb, iter, offset); 3255 + trace_ext4_direct_IO_exit(inode, offset, count, rw, ret); 3256 3256 return ret; 3257 3257 } 3258 3258
+8 -9
fs/f2fs/data.c
··· 1017 1017 } 1018 1018 1019 1019 static int check_direct_IO(struct inode *inode, int rw, 1020 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 1020 + struct iov_iter *iter, loff_t offset) 1021 1021 { 1022 1022 unsigned blocksize_mask = inode->i_sb->s_blocksize - 1; 1023 - int i; 1024 1023 1025 1024 if (rw == READ) 1026 1025 return 0; ··· 1027 1028 if (offset & blocksize_mask) 1028 1029 return -EINVAL; 1029 1030 1030 - for (i = 0; i < nr_segs; i++) 1031 - if (iov[i].iov_len & blocksize_mask) 1032 - return -EINVAL; 1031 + if (iov_iter_alignment(iter) & blocksize_mask) 1032 + return -EINVAL; 1033 + 1033 1034 return 0; 1034 1035 } 1035 1036 1036 1037 static ssize_t f2fs_direct_IO(int rw, struct kiocb *iocb, 1037 - const struct iovec *iov, loff_t offset, unsigned long nr_segs) 1038 + struct iov_iter *iter, loff_t offset) 1038 1039 { 1039 1040 struct file *file = iocb->ki_filp; 1040 1041 struct inode *inode = file->f_mapping->host; ··· 1043 1044 if (f2fs_has_inline_data(inode)) 1044 1045 return 0; 1045 1046 1046 - if (check_direct_IO(inode, rw, iov, offset, nr_segs)) 1047 + if (check_direct_IO(inode, rw, iter, offset)) 1047 1048 return 0; 1048 1049 1049 1050 /* clear fsync mark to recover these blocks */ 1050 1051 fsync_mark_clear(F2FS_SB(inode->i_sb), inode->i_ino); 1051 1052 1052 - return blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 1053 - get_data_block); 1053 + return blockdev_direct_IO(rw, iocb, inode, iter, offset, 1054 + get_data_block); 1054 1055 } 1055 1056 1056 1057 static void f2fs_invalidate_data_page(struct page *page, unsigned int offset,
+5 -5
fs/f2fs/file.c
··· 808 808 809 809 const struct file_operations f2fs_file_operations = { 810 810 .llseek = f2fs_llseek, 811 - .read = do_sync_read, 812 - .write = do_sync_write, 813 - .aio_read = generic_file_aio_read, 814 - .aio_write = generic_file_aio_write, 811 + .read = new_sync_read, 812 + .write = new_sync_write, 813 + .read_iter = generic_file_read_iter, 814 + .write_iter = generic_file_write_iter, 815 815 .open = generic_file_open, 816 816 .mmap = f2fs_file_mmap, 817 817 .fsync = f2fs_sync_file, ··· 821 821 .compat_ioctl = f2fs_compat_ioctl, 822 822 #endif 823 823 .splice_read = generic_file_splice_read, 824 - .splice_write = generic_file_splice_write, 824 + .splice_write = iter_file_splice_write, 825 825 };
+4 -4
fs/fat/file.c
··· 170 170 171 171 const struct file_operations fat_file_operations = { 172 172 .llseek = generic_file_llseek, 173 - .read = do_sync_read, 174 - .write = do_sync_write, 175 - .aio_read = generic_file_aio_read, 176 - .aio_write = generic_file_aio_write, 173 + .read = new_sync_read, 174 + .write = new_sync_write, 175 + .read_iter = generic_file_read_iter, 176 + .write_iter = generic_file_write_iter, 177 177 .mmap = generic_file_mmap, 178 178 .release = fat_file_release, 179 179 .unlocked_ioctl = fat_generic_ioctl,
+6 -6
fs/fat/inode.c
··· 247 247 } 248 248 249 249 static ssize_t fat_direct_IO(int rw, struct kiocb *iocb, 250 - const struct iovec *iov, 251 - loff_t offset, unsigned long nr_segs) 250 + struct iov_iter *iter, 251 + loff_t offset) 252 252 { 253 253 struct file *file = iocb->ki_filp; 254 254 struct address_space *mapping = file->f_mapping; 255 255 struct inode *inode = mapping->host; 256 + size_t count = iov_iter_count(iter); 256 257 ssize_t ret; 257 258 258 259 if (rw == WRITE) { ··· 266 265 * 267 266 * Return 0, and fallback to normal buffered write. 268 267 */ 269 - loff_t size = offset + iov_length(iov, nr_segs); 268 + loff_t size = offset + count; 270 269 if (MSDOS_I(inode)->mmu_private < size) 271 270 return 0; 272 271 } ··· 275 274 * FAT need to use the DIO_LOCKING for avoiding the race 276 275 * condition of fat_get_block() and ->truncate(). 277 276 */ 278 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 279 - fat_get_block); 277 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, fat_get_block); 280 278 if (ret < 0 && (rw & WRITE)) 281 - fat_write_failed(mapping, offset + iov_length(iov, nr_segs)); 279 + fat_write_failed(mapping, offset + count); 282 280 283 281 return ret; 284 282 }
+3 -8
fs/file.c
··· 44 44 return vmalloc(size); 45 45 } 46 46 47 - static void free_fdmem(void *ptr) 48 - { 49 - is_vmalloc_addr(ptr) ? vfree(ptr) : kfree(ptr); 50 - } 51 - 52 47 static void __free_fdtable(struct fdtable *fdt) 53 48 { 54 - free_fdmem(fdt->fd); 55 - free_fdmem(fdt->open_fds); 49 + kvfree(fdt->fd); 50 + kvfree(fdt->open_fds); 56 51 kfree(fdt); 57 52 } 58 53 ··· 125 130 return fdt; 126 131 127 132 out_arr: 128 - free_fdmem(fdt->fd); 133 + kvfree(fdt->fd); 129 134 out_fdt: 130 135 kfree(fdt); 131 136 out:
+6
fs/file_table.c
··· 175 175 file->f_path = *path; 176 176 file->f_inode = path->dentry->d_inode; 177 177 file->f_mapping = path->dentry->d_inode->i_mapping; 178 + if ((mode & FMODE_READ) && 179 + likely(fop->read || fop->aio_read || fop->read_iter)) 180 + mode |= FMODE_CAN_READ; 181 + if ((mode & FMODE_WRITE) && 182 + likely(fop->write || fop->aio_write || fop->write_iter)) 183 + mode |= FMODE_CAN_WRITE; 178 184 file->f_mode = mode; 179 185 file->f_op = fop; 180 186 if ((mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
+6 -2
fs/fuse/cuse.c
··· 94 94 loff_t pos = 0; 95 95 struct iovec iov = { .iov_base = buf, .iov_len = count }; 96 96 struct fuse_io_priv io = { .async = 0, .file = file }; 97 + struct iov_iter ii; 98 + iov_iter_init(&ii, READ, &iov, 1, count); 97 99 98 - return fuse_direct_io(&io, &iov, 1, count, &pos, FUSE_DIO_CUSE); 100 + return fuse_direct_io(&io, &ii, &pos, FUSE_DIO_CUSE); 99 101 } 100 102 101 103 static ssize_t cuse_write(struct file *file, const char __user *buf, ··· 106 104 loff_t pos = 0; 107 105 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = count }; 108 106 struct fuse_io_priv io = { .async = 0, .file = file }; 107 + struct iov_iter ii; 108 + iov_iter_init(&ii, WRITE, &iov, 1, count); 109 109 110 110 /* 111 111 * No locking or generic_write_checks(), the server is 112 112 * responsible for locking and sanity checks. 113 113 */ 114 - return fuse_direct_io(&io, &iov, 1, count, &pos, 114 + return fuse_direct_io(&io, &ii, &pos, 115 115 FUSE_DIO_WRITE | FUSE_DIO_CUSE); 116 116 } 117 117
+61 -93
fs/fuse/file.c
··· 933 933 return err; 934 934 } 935 935 936 - static ssize_t fuse_file_aio_read(struct kiocb *iocb, const struct iovec *iov, 937 - unsigned long nr_segs, loff_t pos) 936 + static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to) 938 937 { 939 938 struct inode *inode = iocb->ki_filp->f_mapping->host; 940 939 struct fuse_conn *fc = get_fuse_conn(inode); ··· 944 945 * i_size is up to date). 945 946 */ 946 947 if (fc->auto_inval_data || 947 - (pos + iov_length(iov, nr_segs) > i_size_read(inode))) { 948 + (iocb->ki_pos + iov_iter_count(to) > i_size_read(inode))) { 948 949 int err; 949 950 err = fuse_update_attributes(inode, NULL, iocb->ki_filp, NULL); 950 951 if (err) 951 952 return err; 952 953 } 953 954 954 - return generic_file_aio_read(iocb, iov, nr_segs, pos); 955 + return generic_file_read_iter(iocb, to); 955 956 } 956 957 957 958 static void fuse_write_fill(struct fuse_req *req, struct fuse_file *ff, ··· 1180 1181 return res > 0 ? res : err; 1181 1182 } 1182 1183 1183 - static ssize_t fuse_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 1184 - unsigned long nr_segs, loff_t pos) 1184 + static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 1185 1185 { 1186 1186 struct file *file = iocb->ki_filp; 1187 1187 struct address_space *mapping = file->f_mapping; 1188 - size_t count = 0; 1189 - size_t ocount = 0; 1188 + size_t count = iov_iter_count(from); 1190 1189 ssize_t written = 0; 1191 1190 ssize_t written_buffered = 0; 1192 1191 struct inode *inode = mapping->host; 1193 1192 ssize_t err; 1194 - struct iov_iter i; 1195 1193 loff_t endbyte = 0; 1194 + loff_t pos = iocb->ki_pos; 1196 1195 1197 1196 if (get_fuse_conn(inode)->writeback_cache) { 1198 1197 /* Update size (EOF optimization) and mode (SUID clearing) */ ··· 1198 1201 if (err) 1199 1202 return err; 1200 1203 1201 - return generic_file_aio_write(iocb, iov, nr_segs, pos); 1204 + return generic_file_write_iter(iocb, from); 1202 1205 } 1203 1206 1204 - WARN_ON(iocb->ki_pos != pos); 1205 - 1206 - ocount = 0; 1207 - err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ); 1208 - if (err) 1209 - return err; 1210 - 1211 - count = ocount; 1212 1207 mutex_lock(&inode->i_mutex); 1213 1208 1214 1209 /* We can write back this queue in page reclaim */ ··· 1213 1224 if (count == 0) 1214 1225 goto out; 1215 1226 1227 + iov_iter_truncate(from, count); 1216 1228 err = file_remove_suid(file); 1217 1229 if (err) 1218 1230 goto out; ··· 1223 1233 goto out; 1224 1234 1225 1235 if (file->f_flags & O_DIRECT) { 1226 - written = generic_file_direct_write(iocb, iov, &nr_segs, pos, 1227 - count, ocount); 1228 - if (written < 0 || written == count) 1236 + written = generic_file_direct_write(iocb, from, pos); 1237 + if (written < 0 || !iov_iter_count(from)) 1229 1238 goto out; 1230 1239 1231 1240 pos += written; 1232 - count -= written; 1233 1241 1234 - iov_iter_init(&i, iov, nr_segs, count, written); 1235 - written_buffered = fuse_perform_write(file, mapping, &i, pos); 1242 + written_buffered = fuse_perform_write(file, mapping, from, pos); 1236 1243 if (written_buffered < 0) { 1237 1244 err = written_buffered; 1238 1245 goto out; ··· 1248 1261 written += written_buffered; 1249 1262 iocb->ki_pos = pos + written_buffered; 1250 1263 } else { 1251 - iov_iter_init(&i, iov, nr_segs, count, 0); 1252 - written = fuse_perform_write(file, mapping, &i, pos); 1264 + written = fuse_perform_write(file, mapping, from, pos); 1253 1265 if (written >= 0) 1254 1266 iocb->ki_pos = pos + written; 1255 1267 } ··· 1286 1300 size_t nbytes = 0; /* # bytes already packed in req */ 1287 1301 1288 1302 /* Special case for kernel I/O: can copy directly into the buffer */ 1289 - if (segment_eq(get_fs(), KERNEL_DS)) { 1303 + if (ii->type & ITER_KVEC) { 1290 1304 unsigned long user_addr = fuse_get_user_addr(ii); 1291 1305 size_t frag_size = fuse_get_frag_size(ii, *nbytesp); 1292 1306 ··· 1302 1316 1303 1317 while (nbytes < *nbytesp && req->num_pages < req->max_pages) { 1304 1318 unsigned npages; 1305 - unsigned long user_addr = fuse_get_user_addr(ii); 1306 - unsigned offset = user_addr & ~PAGE_MASK; 1307 - size_t frag_size = fuse_get_frag_size(ii, *nbytesp - nbytes); 1308 - int ret; 1309 - 1319 + size_t start; 1310 1320 unsigned n = req->max_pages - req->num_pages; 1311 - frag_size = min_t(size_t, frag_size, n << PAGE_SHIFT); 1312 - 1313 - npages = (frag_size + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; 1314 - npages = clamp(npages, 1U, n); 1315 - 1316 - ret = get_user_pages_fast(user_addr, npages, !write, 1317 - &req->pages[req->num_pages]); 1321 + ssize_t ret = iov_iter_get_pages(ii, 1322 + &req->pages[req->num_pages], 1323 + n * PAGE_SIZE, &start); 1318 1324 if (ret < 0) 1319 1325 return ret; 1320 1326 1321 - npages = ret; 1322 - frag_size = min_t(size_t, frag_size, 1323 - (npages << PAGE_SHIFT) - offset); 1324 - iov_iter_advance(ii, frag_size); 1327 + iov_iter_advance(ii, ret); 1328 + nbytes += ret; 1325 1329 1326 - req->page_descs[req->num_pages].offset = offset; 1330 + ret += start; 1331 + npages = (ret + PAGE_SIZE - 1) / PAGE_SIZE; 1332 + 1333 + req->page_descs[req->num_pages].offset = start; 1327 1334 fuse_page_descs_length_init(req, req->num_pages, npages); 1328 1335 1329 1336 req->num_pages += npages; 1330 1337 req->page_descs[req->num_pages - 1].length -= 1331 - (npages << PAGE_SHIFT) - offset - frag_size; 1332 - 1333 - nbytes += frag_size; 1338 + (PAGE_SIZE - ret) & (PAGE_SIZE - 1); 1334 1339 } 1335 1340 1336 1341 if (write) ··· 1336 1359 1337 1360 static inline int fuse_iter_npages(const struct iov_iter *ii_p) 1338 1361 { 1339 - struct iov_iter ii = *ii_p; 1340 - int npages = 0; 1341 - 1342 - while (iov_iter_count(&ii) && npages < FUSE_MAX_PAGES_PER_REQ) { 1343 - unsigned long user_addr = fuse_get_user_addr(&ii); 1344 - unsigned offset = user_addr & ~PAGE_MASK; 1345 - size_t frag_size = iov_iter_single_seg_count(&ii); 1346 - 1347 - npages += (frag_size + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; 1348 - iov_iter_advance(&ii, frag_size); 1349 - } 1350 - 1351 - return min(npages, FUSE_MAX_PAGES_PER_REQ); 1362 + return iov_iter_npages(ii_p, FUSE_MAX_PAGES_PER_REQ); 1352 1363 } 1353 1364 1354 - ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov, 1355 - unsigned long nr_segs, size_t count, loff_t *ppos, 1356 - int flags) 1365 + ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter, 1366 + loff_t *ppos, int flags) 1357 1367 { 1358 1368 int write = flags & FUSE_DIO_WRITE; 1359 1369 int cuse = flags & FUSE_DIO_CUSE; ··· 1350 1386 struct fuse_conn *fc = ff->fc; 1351 1387 size_t nmax = write ? fc->max_write : fc->max_read; 1352 1388 loff_t pos = *ppos; 1389 + size_t count = iov_iter_count(iter); 1353 1390 pgoff_t idx_from = pos >> PAGE_CACHE_SHIFT; 1354 1391 pgoff_t idx_to = (pos + count - 1) >> PAGE_CACHE_SHIFT; 1355 1392 ssize_t res = 0; 1356 1393 struct fuse_req *req; 1357 - struct iov_iter ii; 1358 - 1359 - iov_iter_init(&ii, iov, nr_segs, count, 0); 1360 1394 1361 1395 if (io->async) 1362 - req = fuse_get_req_for_background(fc, fuse_iter_npages(&ii)); 1396 + req = fuse_get_req_for_background(fc, fuse_iter_npages(iter)); 1363 1397 else 1364 - req = fuse_get_req(fc, fuse_iter_npages(&ii)); 1398 + req = fuse_get_req(fc, fuse_iter_npages(iter)); 1365 1399 if (IS_ERR(req)) 1366 1400 return PTR_ERR(req); 1367 1401 ··· 1375 1413 size_t nres; 1376 1414 fl_owner_t owner = current->files; 1377 1415 size_t nbytes = min(count, nmax); 1378 - int err = fuse_get_user_pages(req, &ii, &nbytes, write); 1416 + int err = fuse_get_user_pages(req, iter, &nbytes, write); 1379 1417 if (err) { 1380 1418 res = err; 1381 1419 break; ··· 1405 1443 fuse_put_request(fc, req); 1406 1444 if (io->async) 1407 1445 req = fuse_get_req_for_background(fc, 1408 - fuse_iter_npages(&ii)); 1446 + fuse_iter_npages(iter)); 1409 1447 else 1410 - req = fuse_get_req(fc, fuse_iter_npages(&ii)); 1448 + req = fuse_get_req(fc, fuse_iter_npages(iter)); 1411 1449 if (IS_ERR(req)) 1412 1450 break; 1413 1451 } ··· 1422 1460 EXPORT_SYMBOL_GPL(fuse_direct_io); 1423 1461 1424 1462 static ssize_t __fuse_direct_read(struct fuse_io_priv *io, 1425 - const struct iovec *iov, 1426 - unsigned long nr_segs, loff_t *ppos, 1427 - size_t count) 1463 + struct iov_iter *iter, 1464 + loff_t *ppos) 1428 1465 { 1429 1466 ssize_t res; 1430 1467 struct file *file = io->file; ··· 1432 1471 if (is_bad_inode(inode)) 1433 1472 return -EIO; 1434 1473 1435 - res = fuse_direct_io(io, iov, nr_segs, count, ppos, 0); 1474 + res = fuse_direct_io(io, iter, ppos, 0); 1436 1475 1437 1476 fuse_invalidate_attr(inode); 1438 1477 ··· 1444 1483 { 1445 1484 struct fuse_io_priv io = { .async = 0, .file = file }; 1446 1485 struct iovec iov = { .iov_base = buf, .iov_len = count }; 1447 - return __fuse_direct_read(&io, &iov, 1, ppos, count); 1486 + struct iov_iter ii; 1487 + iov_iter_init(&ii, READ, &iov, 1, count); 1488 + return __fuse_direct_read(&io, &ii, ppos); 1448 1489 } 1449 1490 1450 1491 static ssize_t __fuse_direct_write(struct fuse_io_priv *io, 1451 - const struct iovec *iov, 1452 - unsigned long nr_segs, loff_t *ppos) 1492 + struct iov_iter *iter, 1493 + loff_t *ppos) 1453 1494 { 1454 1495 struct file *file = io->file; 1455 1496 struct inode *inode = file_inode(file); 1456 - size_t count = iov_length(iov, nr_segs); 1497 + size_t count = iov_iter_count(iter); 1457 1498 ssize_t res; 1458 1499 1500 + 1459 1501 res = generic_write_checks(file, ppos, &count, 0); 1460 - if (!res) 1461 - res = fuse_direct_io(io, iov, nr_segs, count, ppos, 1462 - FUSE_DIO_WRITE); 1502 + if (!res) { 1503 + iov_iter_truncate(iter, count); 1504 + res = fuse_direct_io(io, iter, ppos, FUSE_DIO_WRITE); 1505 + } 1463 1506 1464 1507 fuse_invalidate_attr(inode); 1465 1508 ··· 1477 1512 struct inode *inode = file_inode(file); 1478 1513 ssize_t res; 1479 1514 struct fuse_io_priv io = { .async = 0, .file = file }; 1515 + struct iov_iter ii; 1516 + iov_iter_init(&ii, WRITE, &iov, 1, count); 1480 1517 1481 1518 if (is_bad_inode(inode)) 1482 1519 return -EIO; 1483 1520 1484 1521 /* Don't allow parallel writes to the same file */ 1485 1522 mutex_lock(&inode->i_mutex); 1486 - res = __fuse_direct_write(&io, &iov, 1, ppos); 1523 + res = __fuse_direct_write(&io, &ii, ppos); 1487 1524 if (res > 0) 1488 1525 fuse_write_update_size(inode, *ppos); 1489 1526 mutex_unlock(&inode->i_mutex); ··· 2339 2372 if (!bytes) 2340 2373 return 0; 2341 2374 2342 - iov_iter_init(&ii, iov, nr_segs, bytes, 0); 2375 + iov_iter_init(&ii, to_user ? READ : WRITE, iov, nr_segs, bytes); 2343 2376 2344 2377 while (iov_iter_count(&ii)) { 2345 2378 struct page *page = pages[page_idx++]; ··· 2861 2894 } 2862 2895 2863 2896 static ssize_t 2864 - fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, 2865 - loff_t offset, unsigned long nr_segs) 2897 + fuse_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 2898 + loff_t offset) 2866 2899 { 2867 2900 ssize_t ret = 0; 2868 2901 struct file *file = iocb->ki_filp; ··· 2871 2904 loff_t pos = 0; 2872 2905 struct inode *inode; 2873 2906 loff_t i_size; 2874 - size_t count = iov_length(iov, nr_segs); 2907 + size_t count = iov_iter_count(iter); 2875 2908 struct fuse_io_priv *io; 2876 2909 2877 2910 pos = offset; ··· 2886 2919 if (offset >= i_size) 2887 2920 return 0; 2888 2921 count = min_t(loff_t, count, fuse_round_up(i_size - offset)); 2922 + iov_iter_truncate(iter, count); 2889 2923 } 2890 2924 2891 2925 io = kmalloc(sizeof(struct fuse_io_priv), GFP_KERNEL); ··· 2916 2948 io->async = false; 2917 2949 2918 2950 if (rw == WRITE) 2919 - ret = __fuse_direct_write(io, iov, nr_segs, &pos); 2951 + ret = __fuse_direct_write(io, iter, &pos); 2920 2952 else 2921 - ret = __fuse_direct_read(io, iov, nr_segs, &pos, count); 2953 + ret = __fuse_direct_read(io, iter, &pos); 2922 2954 2923 2955 if (io->async) { 2924 2956 fuse_aio_complete(io, ret < 0 ? ret : 0, -1); ··· 3029 3061 3030 3062 static const struct file_operations fuse_file_operations = { 3031 3063 .llseek = fuse_file_llseek, 3032 - .read = do_sync_read, 3033 - .aio_read = fuse_file_aio_read, 3034 - .write = do_sync_write, 3035 - .aio_write = fuse_file_aio_write, 3064 + .read = new_sync_read, 3065 + .read_iter = fuse_file_read_iter, 3066 + .write = new_sync_write, 3067 + .write_iter = fuse_file_write_iter, 3036 3068 .mmap = fuse_file_mmap, 3037 3069 .open = fuse_open, 3038 3070 .flush = fuse_flush,
+2 -3
fs/fuse/fuse_i.h
··· 880 880 /** CUSE pass fuse_direct_io() a file which f_mapping->host is not from FUSE */ 881 881 #define FUSE_DIO_CUSE (1 << 1) 882 882 883 - ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov, 884 - unsigned long nr_segs, size_t count, loff_t *ppos, 885 - int flags); 883 + ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter, 884 + loff_t *ppos, int flags); 886 885 long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg, 887 886 unsigned int flags); 888 887 long fuse_ioctl_common(struct file *file, unsigned int cmd,
+5 -6
fs/gfs2/aops.c
··· 1040 1040 1041 1041 1042 1042 static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb, 1043 - const struct iovec *iov, loff_t offset, 1044 - unsigned long nr_segs) 1043 + struct iov_iter *iter, loff_t offset) 1045 1044 { 1046 1045 struct file *file = iocb->ki_filp; 1047 1046 struct inode *inode = file->f_mapping->host; ··· 1080 1081 */ 1081 1082 if (mapping->nrpages) { 1082 1083 loff_t lstart = offset & (PAGE_CACHE_SIZE - 1); 1083 - loff_t len = iov_length(iov, nr_segs); 1084 + loff_t len = iov_iter_count(iter); 1084 1085 loff_t end = PAGE_ALIGN(offset + len) - 1; 1085 1086 1086 1087 rv = 0; ··· 1095 1096 truncate_inode_pages_range(mapping, lstart, end); 1096 1097 } 1097 1098 1098 - rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, 1099 - offset, nr_segs, gfs2_get_block_direct, 1100 - NULL, NULL, 0); 1099 + rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, 1100 + iter, offset, 1101 + gfs2_get_block_direct, NULL, NULL, 0); 1101 1102 out: 1102 1103 gfs2_glock_dq(&gh); 1103 1104 gfs2_holder_uninit(&gh);
+14 -16
fs/gfs2/file.c
··· 684 684 } 685 685 686 686 /** 687 - * gfs2_file_aio_write - Perform a write to a file 687 + * gfs2_file_write_iter - Perform a write to a file 688 688 * @iocb: The io context 689 689 * @iov: The data to write 690 690 * @nr_segs: Number of @iov segments ··· 697 697 * 698 698 */ 699 699 700 - static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 701 - unsigned long nr_segs, loff_t pos) 700 + static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 702 701 { 703 702 struct file *file = iocb->ki_filp; 704 - size_t writesize = iov_length(iov, nr_segs); 705 703 struct gfs2_inode *ip = GFS2_I(file_inode(file)); 706 704 int ret; 707 705 ··· 707 709 if (ret) 708 710 return ret; 709 711 710 - gfs2_size_hint(file, pos, writesize); 712 + gfs2_size_hint(file, iocb->ki_pos, iov_iter_count(from)); 711 713 712 714 if (file->f_flags & O_APPEND) { 713 715 struct gfs2_holder gh; ··· 718 720 gfs2_glock_dq_uninit(&gh); 719 721 } 720 722 721 - return generic_file_aio_write(iocb, iov, nr_segs, pos); 723 + return generic_file_write_iter(iocb, from); 722 724 } 723 725 724 726 static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len, ··· 1056 1058 1057 1059 const struct file_operations gfs2_file_fops = { 1058 1060 .llseek = gfs2_llseek, 1059 - .read = do_sync_read, 1060 - .aio_read = generic_file_aio_read, 1061 - .write = do_sync_write, 1062 - .aio_write = gfs2_file_aio_write, 1061 + .read = new_sync_read, 1062 + .read_iter = generic_file_read_iter, 1063 + .write = new_sync_write, 1064 + .write_iter = gfs2_file_write_iter, 1063 1065 .unlocked_ioctl = gfs2_ioctl, 1064 1066 .mmap = gfs2_mmap, 1065 1067 .open = gfs2_open, ··· 1068 1070 .lock = gfs2_lock, 1069 1071 .flock = gfs2_flock, 1070 1072 .splice_read = generic_file_splice_read, 1071 - .splice_write = generic_file_splice_write, 1073 + .splice_write = iter_file_splice_write, 1072 1074 .setlease = gfs2_setlease, 1073 1075 .fallocate = gfs2_fallocate, 1074 1076 }; ··· 1088 1090 1089 1091 const struct file_operations gfs2_file_fops_nolock = { 1090 1092 .llseek = gfs2_llseek, 1091 - .read = do_sync_read, 1092 - .aio_read = generic_file_aio_read, 1093 - .write = do_sync_write, 1094 - .aio_write = gfs2_file_aio_write, 1093 + .read = new_sync_read, 1094 + .read_iter = generic_file_read_iter, 1095 + .write = new_sync_write, 1096 + .write_iter = gfs2_file_write_iter, 1095 1097 .unlocked_ioctl = gfs2_ioctl, 1096 1098 .mmap = gfs2_mmap, 1097 1099 .open = gfs2_open, 1098 1100 .release = gfs2_release, 1099 1101 .fsync = gfs2_fsync, 1100 1102 .splice_read = generic_file_splice_read, 1101 - .splice_write = generic_file_splice_write, 1103 + .splice_write = iter_file_splice_write, 1102 1104 .setlease = generic_setlease, 1103 1105 .fallocate = gfs2_fallocate, 1104 1106 };
+8 -8
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 + size_t count = iov_iter_count(iter); 133 134 ssize_t ret; 134 135 135 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 136 - hfs_get_block); 136 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 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 + count; 145 145 146 146 if (end > isize) 147 147 hfs_write_failed(mapping, end); ··· 674 674 675 675 static const struct file_operations hfs_file_operations = { 676 676 .llseek = generic_file_llseek, 677 - .read = do_sync_read, 678 - .aio_read = generic_file_aio_read, 679 - .write = do_sync_write, 680 - .aio_write = generic_file_aio_write, 677 + .read = new_sync_read, 678 + .read_iter = generic_file_read_iter, 679 + .write = new_sync_write, 680 + .write_iter = generic_file_write_iter, 681 681 .mmap = generic_file_mmap, 682 682 .splice_read = generic_file_splice_read, 683 683 .fsync = hfs_file_fsync,
+8 -7
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 + size_t count = iov_iter_count(iter); 131 132 ssize_t ret; 132 133 133 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 134 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 134 135 hfsplus_get_block); 135 136 136 137 /* ··· 140 139 */ 141 140 if (unlikely((rw & WRITE) && ret < 0)) { 142 141 loff_t isize = i_size_read(inode); 143 - loff_t end = offset + iov_length(iov, nr_segs); 142 + loff_t end = offset + count; 144 143 145 144 if (end > isize) 146 145 hfsplus_write_failed(mapping, end); ··· 341 340 342 341 static const struct file_operations hfsplus_file_operations = { 343 342 .llseek = generic_file_llseek, 344 - .read = do_sync_read, 345 - .aio_read = generic_file_aio_read, 346 - .write = do_sync_write, 347 - .aio_write = generic_file_aio_write, 343 + .read = new_sync_read, 344 + .read_iter = generic_file_read_iter, 345 + .write = new_sync_write, 346 + .write_iter = generic_file_write_iter, 348 347 .mmap = generic_file_mmap, 349 348 .splice_read = generic_file_splice_read, 350 349 .fsync = hfsplus_file_fsync,
+4 -4
fs/hostfs/hostfs_kern.c
··· 378 378 379 379 static const struct file_operations hostfs_file_fops = { 380 380 .llseek = generic_file_llseek, 381 - .read = do_sync_read, 381 + .read = new_sync_read, 382 382 .splice_read = generic_file_splice_read, 383 - .aio_read = generic_file_aio_read, 384 - .aio_write = generic_file_aio_write, 385 - .write = do_sync_write, 383 + .read_iter = generic_file_read_iter, 384 + .write_iter = generic_file_write_iter, 385 + .write = new_sync_write, 386 386 .mmap = generic_file_mmap, 387 387 .open = hostfs_file_open, 388 388 .release = hostfs_file_release,
+4 -4
fs/hpfs/file.c
··· 197 197 const struct file_operations hpfs_file_ops = 198 198 { 199 199 .llseek = generic_file_llseek, 200 - .read = do_sync_read, 201 - .aio_read = generic_file_aio_read, 202 - .write = do_sync_write, 203 - .aio_write = generic_file_aio_write, 200 + .read = new_sync_read, 201 + .read_iter = generic_file_read_iter, 202 + .write = new_sync_write, 203 + .write_iter = generic_file_write_iter, 204 204 .mmap = generic_file_mmap, 205 205 .release = hpfs_file_release, 206 206 .fsync = hpfs_file_fsync,
+4 -4
fs/jffs2/file.c
··· 51 51 { 52 52 .llseek = generic_file_llseek, 53 53 .open = generic_file_open, 54 - .read = do_sync_read, 55 - .aio_read = generic_file_aio_read, 56 - .write = do_sync_write, 57 - .aio_write = generic_file_aio_write, 54 + .read = new_sync_read, 55 + .read_iter = generic_file_read_iter, 56 + .write = new_sync_write, 57 + .write_iter = generic_file_write_iter, 58 58 .unlocked_ioctl=jffs2_ioctl, 59 59 .mmap = generic_file_readonly_mmap, 60 60 .fsync = jffs2_fsync,
+5 -5
fs/jfs/file.c
··· 151 151 const struct file_operations jfs_file_operations = { 152 152 .open = jfs_open, 153 153 .llseek = generic_file_llseek, 154 - .write = do_sync_write, 155 - .read = do_sync_read, 156 - .aio_read = generic_file_aio_read, 157 - .aio_write = generic_file_aio_write, 154 + .write = new_sync_write, 155 + .read = new_sync_read, 156 + .read_iter = generic_file_read_iter, 157 + .write_iter = generic_file_write_iter, 158 158 .mmap = generic_file_mmap, 159 159 .splice_read = generic_file_splice_read, 160 - .splice_write = generic_file_splice_write, 160 + .splice_write = iter_file_splice_write, 161 161 .fsync = jfs_fsync, 162 162 .release = jfs_release, 163 163 .unlocked_ioctl = jfs_ioctl,
+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 + size_t count = iov_iter_count(iter); 339 340 ssize_t ret; 340 341 341 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 342 - jfs_get_block); 342 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 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 + count; 351 351 352 352 if (end > isize) 353 353 jfs_write_failed(mapping, end);
+4 -4
fs/logfs/file.c
··· 264 264 }; 265 265 266 266 const struct file_operations logfs_reg_fops = { 267 - .aio_read = generic_file_aio_read, 268 - .aio_write = generic_file_aio_write, 267 + .read_iter = generic_file_read_iter, 268 + .write_iter = generic_file_write_iter, 269 269 .fsync = logfs_fsync, 270 270 .unlocked_ioctl = logfs_ioctl, 271 271 .llseek = generic_file_llseek, 272 272 .mmap = generic_file_readonly_mmap, 273 273 .open = generic_file_open, 274 - .read = do_sync_read, 275 - .write = do_sync_write, 274 + .read = new_sync_read, 275 + .write = new_sync_write, 276 276 }; 277 277 278 278 const struct address_space_operations logfs_reg_aops = {
+4 -4
fs/minix/file.c
··· 14 14 */ 15 15 const struct file_operations minix_file_operations = { 16 16 .llseek = generic_file_llseek, 17 - .read = do_sync_read, 18 - .aio_read = generic_file_aio_read, 19 - .write = do_sync_write, 20 - .aio_write = generic_file_aio_write, 17 + .read = new_sync_read, 18 + .read_iter = generic_file_read_iter, 19 + .write = new_sync_write, 20 + .write_iter = generic_file_write_iter, 21 21 .mmap = generic_file_mmap, 22 22 .fsync = generic_file_fsync, 23 23 .splice_read = generic_file_splice_read,
+101 -223
fs/nfs/direct.c
··· 212 212 * shunt off direct read and write requests before the VFS gets them, 213 213 * so this method is only ever called for swap. 214 214 */ 215 - ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov, loff_t pos, unsigned long nr_segs) 215 + ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, loff_t pos) 216 216 { 217 217 #ifndef CONFIG_NFS_SWAP 218 218 dprintk("NFS: nfs_direct_IO (%pD) off/no(%Ld/%lu) EINVAL\n", 219 - iocb->ki_filp, (long long) pos, nr_segs); 219 + iocb->ki_filp, (long long) pos, iter->nr_segs); 220 220 221 221 return -EINVAL; 222 222 #else 223 223 VM_BUG_ON(iocb->ki_nbytes != PAGE_SIZE); 224 224 225 225 if (rw == READ || rw == KERNEL_READ) 226 - return nfs_file_direct_read(iocb, iov, nr_segs, pos, 226 + return nfs_file_direct_read(iocb, iter, pos, 227 227 rw == READ ? true : false); 228 - return nfs_file_direct_write(iocb, iov, nr_segs, pos, 228 + return nfs_file_direct_write(iocb, iter, pos, 229 229 rw == WRITE ? true : false); 230 230 #endif /* CONFIG_NFS_SWAP */ 231 231 } ··· 414 414 * handled automatically by nfs_direct_read_result(). Otherwise, if 415 415 * no requests have been sent, just return an error. 416 416 */ 417 - static ssize_t nfs_direct_read_schedule_segment(struct nfs_pageio_descriptor *desc, 418 - const struct iovec *iov, 419 - loff_t pos, bool uio) 417 + 418 + static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq, 419 + struct iov_iter *iter, 420 + loff_t pos) 420 421 { 421 - struct nfs_direct_req *dreq = desc->pg_dreq; 422 - struct nfs_open_context *ctx = dreq->ctx; 423 - struct inode *inode = ctx->dentry->d_inode; 424 - unsigned long user_addr = (unsigned long)iov->iov_base; 425 - size_t count = iov->iov_len; 426 - size_t rsize = NFS_SERVER(inode)->rsize; 427 - unsigned int pgbase; 428 - int result; 429 - ssize_t started = 0; 430 - struct page **pagevec = NULL; 431 - unsigned int npages; 422 + struct nfs_pageio_descriptor desc; 423 + struct inode *inode = dreq->inode; 424 + ssize_t result = -EINVAL; 425 + size_t requested_bytes = 0; 426 + size_t rsize = max_t(size_t, NFS_SERVER(inode)->rsize, PAGE_SIZE); 432 427 433 - do { 428 + nfs_pageio_init_read(&desc, dreq->inode, false, 429 + &nfs_direct_read_completion_ops); 430 + get_dreq(dreq); 431 + desc.pg_dreq = dreq; 432 + atomic_inc(&inode->i_dio_count); 433 + 434 + while (iov_iter_count(iter)) { 435 + struct page **pagevec; 434 436 size_t bytes; 435 - int i; 437 + size_t pgbase; 438 + unsigned npages, i; 436 439 437 - pgbase = user_addr & ~PAGE_MASK; 438 - bytes = min(max_t(size_t, rsize, PAGE_SIZE), count); 439 - 440 - result = -ENOMEM; 441 - npages = nfs_page_array_len(pgbase, bytes); 442 - if (!pagevec) 443 - pagevec = kmalloc(npages * sizeof(struct page *), 444 - GFP_KERNEL); 445 - if (!pagevec) 440 + result = iov_iter_get_pages_alloc(iter, &pagevec, 441 + rsize, &pgbase); 442 + if (result < 0) 446 443 break; 447 - if (uio) { 448 - down_read(&current->mm->mmap_sem); 449 - result = get_user_pages(current, current->mm, user_addr, 450 - npages, 1, 0, pagevec, NULL); 451 - up_read(&current->mm->mmap_sem); 452 - if (result < 0) 453 - break; 454 - } else { 455 - WARN_ON(npages != 1); 456 - result = get_kernel_page(user_addr, 1, pagevec); 457 - if (WARN_ON(result != 1)) 458 - break; 459 - } 460 - 461 - if ((unsigned)result < npages) { 462 - bytes = result * PAGE_SIZE; 463 - if (bytes <= pgbase) { 464 - nfs_direct_release_pages(pagevec, result); 465 - break; 466 - } 467 - bytes -= pgbase; 468 - npages = result; 469 - } 470 - 444 + 445 + bytes = result; 446 + iov_iter_advance(iter, bytes); 447 + npages = (result + pgbase + PAGE_SIZE - 1) / PAGE_SIZE; 471 448 for (i = 0; i < npages; i++) { 472 449 struct nfs_page *req; 473 450 unsigned int req_len = min_t(size_t, bytes, PAGE_SIZE - pgbase); ··· 457 480 } 458 481 req->wb_index = pos >> PAGE_SHIFT; 459 482 req->wb_offset = pos & ~PAGE_MASK; 460 - if (!nfs_pageio_add_request(desc, req)) { 461 - result = desc->pg_error; 483 + if (!nfs_pageio_add_request(&desc, req)) { 484 + result = desc.pg_error; 462 485 nfs_release_request(req); 463 486 break; 464 487 } 465 488 pgbase = 0; 466 489 bytes -= req_len; 467 - started += req_len; 468 - user_addr += req_len; 490 + requested_bytes += req_len; 469 491 pos += req_len; 470 - count -= req_len; 471 492 dreq->bytes_left -= req_len; 472 493 } 473 - /* The nfs_page now hold references to these pages */ 474 494 nfs_direct_release_pages(pagevec, npages); 475 - } while (count != 0 && result >= 0); 476 - 477 - kfree(pagevec); 478 - 479 - if (started) 480 - return started; 481 - return result < 0 ? (ssize_t) result : -EFAULT; 482 - } 483 - 484 - static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq, 485 - const struct iovec *iov, 486 - unsigned long nr_segs, 487 - loff_t pos, bool uio) 488 - { 489 - struct nfs_pageio_descriptor desc; 490 - struct inode *inode = dreq->inode; 491 - ssize_t result = -EINVAL; 492 - size_t requested_bytes = 0; 493 - unsigned long seg; 494 - 495 - nfs_pageio_init_read(&desc, dreq->inode, false, 496 - &nfs_direct_read_completion_ops); 497 - get_dreq(dreq); 498 - desc.pg_dreq = dreq; 499 - atomic_inc(&inode->i_dio_count); 500 - 501 - for (seg = 0; seg < nr_segs; seg++) { 502 - const struct iovec *vec = &iov[seg]; 503 - result = nfs_direct_read_schedule_segment(&desc, vec, pos, uio); 495 + kvfree(pagevec); 504 496 if (result < 0) 505 497 break; 506 - requested_bytes += result; 507 - if ((size_t)result < vec->iov_len) 508 - break; 509 - pos += vec->iov_len; 510 498 } 511 499 512 500 nfs_pageio_complete(&desc); ··· 494 552 /** 495 553 * nfs_file_direct_read - file direct read operation for NFS files 496 554 * @iocb: target I/O control block 497 - * @iov: vector of user buffers into which to read data 498 - * @nr_segs: size of iov vector 555 + * @iter: vector of user buffers into which to read data 499 556 * @pos: byte offset in file where reading starts 500 557 * 501 558 * We use this function for direct reads instead of calling ··· 511 570 * client must read the updated atime from the server back into its 512 571 * cache. 513 572 */ 514 - ssize_t nfs_file_direct_read(struct kiocb *iocb, const struct iovec *iov, 515 - unsigned long nr_segs, loff_t pos, bool uio) 573 + ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter, 574 + loff_t pos, bool uio) 516 575 { 517 576 struct file *file = iocb->ki_filp; 518 577 struct address_space *mapping = file->f_mapping; ··· 520 579 struct nfs_direct_req *dreq; 521 580 struct nfs_lock_context *l_ctx; 522 581 ssize_t result = -EINVAL; 523 - size_t count; 524 - 525 - count = iov_length(iov, nr_segs); 582 + size_t count = iov_iter_count(iter); 526 583 nfs_add_stats(mapping->host, NFSIOS_DIRECTREADBYTES, count); 527 584 528 585 dfprintk(FILE, "NFS: direct read(%pD2, %zd@%Ld)\n", ··· 543 604 goto out_unlock; 544 605 545 606 dreq->inode = inode; 546 - dreq->bytes_left = iov_length(iov, nr_segs); 607 + dreq->bytes_left = count; 547 608 dreq->ctx = get_nfs_open_context(nfs_file_open_context(iocb->ki_filp)); 548 609 l_ctx = nfs_get_lock_context(dreq->ctx); 549 610 if (IS_ERR(l_ctx)) { ··· 554 615 if (!is_sync_kiocb(iocb)) 555 616 dreq->iocb = iocb; 556 617 557 - NFS_I(inode)->read_io += iov_length(iov, nr_segs); 558 - result = nfs_direct_read_schedule_iovec(dreq, iov, nr_segs, pos, uio); 618 + NFS_I(inode)->read_io += count; 619 + result = nfs_direct_read_schedule_iovec(dreq, iter, pos); 559 620 560 621 mutex_unlock(&inode->i_mutex); 561 622 ··· 711 772 } 712 773 #endif 713 774 714 - /* 715 - * NB: Return the value of the first error return code. Subsequent 716 - * errors after the first one are ignored. 717 - */ 718 - /* 719 - * For each wsize'd chunk of the user's buffer, dispatch an NFS WRITE 720 - * operation. If nfs_writedata_alloc() or get_user_pages() fails, 721 - * bail and stop sending more writes. Write length accounting is 722 - * handled automatically by nfs_direct_write_result(). Otherwise, if 723 - * no requests have been sent, just return an error. 724 - */ 725 - static ssize_t nfs_direct_write_schedule_segment(struct nfs_pageio_descriptor *desc, 726 - const struct iovec *iov, 727 - loff_t pos, bool uio) 728 - { 729 - struct nfs_direct_req *dreq = desc->pg_dreq; 730 - struct nfs_open_context *ctx = dreq->ctx; 731 - struct inode *inode = ctx->dentry->d_inode; 732 - unsigned long user_addr = (unsigned long)iov->iov_base; 733 - size_t count = iov->iov_len; 734 - size_t wsize = NFS_SERVER(inode)->wsize; 735 - unsigned int pgbase; 736 - int result; 737 - ssize_t started = 0; 738 - struct page **pagevec = NULL; 739 - unsigned int npages; 740 - 741 - do { 742 - size_t bytes; 743 - int i; 744 - 745 - pgbase = user_addr & ~PAGE_MASK; 746 - bytes = min(max_t(size_t, wsize, PAGE_SIZE), count); 747 - 748 - result = -ENOMEM; 749 - npages = nfs_page_array_len(pgbase, bytes); 750 - if (!pagevec) 751 - pagevec = kmalloc(npages * sizeof(struct page *), GFP_KERNEL); 752 - if (!pagevec) 753 - break; 754 - 755 - if (uio) { 756 - down_read(&current->mm->mmap_sem); 757 - result = get_user_pages(current, current->mm, user_addr, 758 - npages, 0, 0, pagevec, NULL); 759 - up_read(&current->mm->mmap_sem); 760 - if (result < 0) 761 - break; 762 - } else { 763 - WARN_ON(npages != 1); 764 - result = get_kernel_page(user_addr, 0, pagevec); 765 - if (WARN_ON(result != 1)) 766 - break; 767 - } 768 - 769 - if ((unsigned)result < npages) { 770 - bytes = result * PAGE_SIZE; 771 - if (bytes <= pgbase) { 772 - nfs_direct_release_pages(pagevec, result); 773 - break; 774 - } 775 - bytes -= pgbase; 776 - npages = result; 777 - } 778 - 779 - for (i = 0; i < npages; i++) { 780 - struct nfs_page *req; 781 - unsigned int req_len = min_t(size_t, bytes, PAGE_SIZE - pgbase); 782 - 783 - req = nfs_create_request(dreq->ctx, pagevec[i], NULL, 784 - pgbase, req_len); 785 - if (IS_ERR(req)) { 786 - result = PTR_ERR(req); 787 - break; 788 - } 789 - nfs_lock_request(req); 790 - req->wb_index = pos >> PAGE_SHIFT; 791 - req->wb_offset = pos & ~PAGE_MASK; 792 - if (!nfs_pageio_add_request(desc, req)) { 793 - result = desc->pg_error; 794 - nfs_unlock_and_release_request(req); 795 - break; 796 - } 797 - pgbase = 0; 798 - bytes -= req_len; 799 - started += req_len; 800 - user_addr += req_len; 801 - pos += req_len; 802 - count -= req_len; 803 - dreq->bytes_left -= req_len; 804 - } 805 - /* The nfs_page now hold references to these pages */ 806 - nfs_direct_release_pages(pagevec, npages); 807 - } while (count != 0 && result >= 0); 808 - 809 - kfree(pagevec); 810 - 811 - if (started) 812 - return started; 813 - return result < 0 ? (ssize_t) result : -EFAULT; 814 - } 815 - 816 775 static void nfs_direct_write_completion(struct nfs_pgio_header *hdr) 817 776 { 818 777 struct nfs_direct_req *dreq = hdr->dreq; ··· 793 956 .completion = nfs_direct_write_completion, 794 957 }; 795 958 959 + 960 + /* 961 + * NB: Return the value of the first error return code. Subsequent 962 + * errors after the first one are ignored. 963 + */ 964 + /* 965 + * For each wsize'd chunk of the user's buffer, dispatch an NFS WRITE 966 + * operation. If nfs_writedata_alloc() or get_user_pages() fails, 967 + * bail and stop sending more writes. Write length accounting is 968 + * handled automatically by nfs_direct_write_result(). Otherwise, if 969 + * no requests have been sent, just return an error. 970 + */ 796 971 static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq, 797 - const struct iovec *iov, 798 - unsigned long nr_segs, 799 - loff_t pos, bool uio) 972 + struct iov_iter *iter, 973 + loff_t pos) 800 974 { 801 975 struct nfs_pageio_descriptor desc; 802 976 struct inode *inode = dreq->inode; 803 977 ssize_t result = 0; 804 978 size_t requested_bytes = 0; 805 - unsigned long seg; 979 + size_t wsize = max_t(size_t, NFS_SERVER(inode)->wsize, PAGE_SIZE); 806 980 807 981 nfs_pageio_init_write(&desc, inode, FLUSH_COND_STABLE, false, 808 982 &nfs_direct_write_completion_ops); ··· 821 973 get_dreq(dreq); 822 974 atomic_inc(&inode->i_dio_count); 823 975 824 - NFS_I(dreq->inode)->write_io += iov_length(iov, nr_segs); 825 - for (seg = 0; seg < nr_segs; seg++) { 826 - const struct iovec *vec = &iov[seg]; 827 - result = nfs_direct_write_schedule_segment(&desc, vec, pos, uio); 976 + NFS_I(inode)->write_io += iov_iter_count(iter); 977 + while (iov_iter_count(iter)) { 978 + struct page **pagevec; 979 + size_t bytes; 980 + size_t pgbase; 981 + unsigned npages, i; 982 + 983 + result = iov_iter_get_pages_alloc(iter, &pagevec, 984 + wsize, &pgbase); 828 985 if (result < 0) 829 986 break; 830 - requested_bytes += result; 831 - if ((size_t)result < vec->iov_len) 987 + 988 + bytes = result; 989 + iov_iter_advance(iter, bytes); 990 + npages = (result + pgbase + PAGE_SIZE - 1) / PAGE_SIZE; 991 + for (i = 0; i < npages; i++) { 992 + struct nfs_page *req; 993 + unsigned int req_len = min_t(size_t, bytes, PAGE_SIZE - pgbase); 994 + 995 + req = nfs_create_request(dreq->ctx, pagevec[i], NULL, 996 + pgbase, req_len); 997 + if (IS_ERR(req)) { 998 + result = PTR_ERR(req); 999 + break; 1000 + } 1001 + nfs_lock_request(req); 1002 + req->wb_index = pos >> PAGE_SHIFT; 1003 + req->wb_offset = pos & ~PAGE_MASK; 1004 + if (!nfs_pageio_add_request(&desc, req)) { 1005 + result = desc.pg_error; 1006 + nfs_unlock_and_release_request(req); 1007 + break; 1008 + } 1009 + pgbase = 0; 1010 + bytes -= req_len; 1011 + requested_bytes += req_len; 1012 + pos += req_len; 1013 + dreq->bytes_left -= req_len; 1014 + } 1015 + nfs_direct_release_pages(pagevec, npages); 1016 + kvfree(pagevec); 1017 + if (result < 0) 832 1018 break; 833 - pos += vec->iov_len; 834 1019 } 835 1020 nfs_pageio_complete(&desc); 836 1021 ··· 885 1004 /** 886 1005 * nfs_file_direct_write - file direct write operation for NFS files 887 1006 * @iocb: target I/O control block 888 - * @iov: vector of user buffers from which to write data 889 - * @nr_segs: size of iov vector 1007 + * @iter: vector of user buffers from which to write data 890 1008 * @pos: byte offset in file where writing starts 891 1009 * 892 1010 * We use this function for direct writes instead of calling ··· 903 1023 * Note that O_APPEND is not supported for NFS direct writes, as there 904 1024 * is no atomic O_APPEND write facility in the NFS protocol. 905 1025 */ 906 - ssize_t nfs_file_direct_write(struct kiocb *iocb, const struct iovec *iov, 907 - unsigned long nr_segs, loff_t pos, bool uio) 1026 + ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter, 1027 + loff_t pos, bool uio) 908 1028 { 909 1029 ssize_t result = -EINVAL; 910 1030 struct file *file = iocb->ki_filp; ··· 913 1033 struct nfs_direct_req *dreq; 914 1034 struct nfs_lock_context *l_ctx; 915 1035 loff_t end; 916 - size_t count; 917 - 918 - count = iov_length(iov, nr_segs); 1036 + size_t count = iov_iter_count(iter); 919 1037 end = (pos + count - 1) >> PAGE_CACHE_SHIFT; 920 1038 921 1039 nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES, count); ··· 964 1086 if (!is_sync_kiocb(iocb)) 965 1087 dreq->iocb = iocb; 966 1088 967 - result = nfs_direct_write_schedule_iovec(dreq, iov, nr_segs, pos, uio); 1089 + result = nfs_direct_write_schedule_iovec(dreq, iter, pos); 968 1090 969 1091 if (mapping->nrpages) { 970 1092 invalidate_inode_pages2_range(mapping,
+17 -48
fs/nfs/file.c
··· 165 165 EXPORT_SYMBOL_GPL(nfs_file_flush); 166 166 167 167 ssize_t 168 - nfs_file_read(struct kiocb *iocb, const struct iovec *iov, 169 - unsigned long nr_segs, loff_t pos) 168 + nfs_file_read(struct kiocb *iocb, struct iov_iter *to) 170 169 { 171 170 struct inode *inode = file_inode(iocb->ki_filp); 172 171 ssize_t result; 173 172 174 173 if (iocb->ki_filp->f_flags & O_DIRECT) 175 - return nfs_file_direct_read(iocb, iov, nr_segs, pos, true); 174 + return nfs_file_direct_read(iocb, to, iocb->ki_pos, true); 176 175 177 - dprintk("NFS: read(%pD2, %lu@%lu)\n", 176 + dprintk("NFS: read(%pD2, %zu@%lu)\n", 178 177 iocb->ki_filp, 179 - (unsigned long) iov_length(iov, nr_segs), (unsigned long) pos); 178 + iov_iter_count(to), (unsigned long) iocb->ki_pos); 180 179 181 180 result = nfs_revalidate_mapping(inode, iocb->ki_filp->f_mapping); 182 181 if (!result) { 183 - result = generic_file_aio_read(iocb, iov, nr_segs, pos); 182 + result = generic_file_read_iter(iocb, to); 184 183 if (result > 0) 185 184 nfs_add_stats(inode, NFSIOS_NORMALREADBYTES, result); 186 185 } ··· 634 635 return 0; 635 636 } 636 637 637 - ssize_t nfs_file_write(struct kiocb *iocb, const struct iovec *iov, 638 - unsigned long nr_segs, loff_t pos) 638 + ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) 639 639 { 640 640 struct file *file = iocb->ki_filp; 641 641 struct inode *inode = file_inode(file); 642 642 unsigned long written = 0; 643 643 ssize_t result; 644 - size_t count = iov_length(iov, nr_segs); 644 + size_t count = iov_iter_count(from); 645 + loff_t pos = iocb->ki_pos; 645 646 646 647 result = nfs_key_timeout_notify(file, inode); 647 648 if (result) 648 649 return result; 649 650 650 651 if (file->f_flags & O_DIRECT) 651 - return nfs_file_direct_write(iocb, iov, nr_segs, pos, true); 652 + return nfs_file_direct_write(iocb, from, pos, true); 652 653 653 - dprintk("NFS: write(%pD2, %lu@%Ld)\n", 654 - file, (unsigned long) count, (long long) pos); 654 + dprintk("NFS: write(%pD2, %zu@%Ld)\n", 655 + file, count, (long long) pos); 655 656 656 657 result = -EBUSY; 657 658 if (IS_SWAPFILE(inode)) ··· 669 670 if (!count) 670 671 goto out; 671 672 672 - result = generic_file_aio_write(iocb, iov, nr_segs, pos); 673 + result = generic_file_write_iter(iocb, from); 673 674 if (result > 0) 674 675 written = result; 675 676 ··· 689 690 goto out; 690 691 } 691 692 EXPORT_SYMBOL_GPL(nfs_file_write); 692 - 693 - ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, 694 - struct file *filp, loff_t *ppos, 695 - size_t count, unsigned int flags) 696 - { 697 - struct inode *inode = file_inode(filp); 698 - unsigned long written = 0; 699 - ssize_t ret; 700 - 701 - dprintk("NFS splice_write(%pD2, %lu@%llu)\n", 702 - filp, (unsigned long) count, (unsigned long long) *ppos); 703 - 704 - /* 705 - * The combination of splice and an O_APPEND destination is disallowed. 706 - */ 707 - 708 - ret = generic_file_splice_write(pipe, filp, ppos, count, flags); 709 - if (ret > 0) 710 - written = ret; 711 - 712 - if (ret >= 0 && nfs_need_sync_write(filp, inode)) { 713 - int err = vfs_fsync(filp, 0); 714 - if (err < 0) 715 - ret = err; 716 - } 717 - if (ret > 0) 718 - nfs_add_stats(inode, NFSIOS_NORMALWRITTENBYTES, written); 719 - return ret; 720 - } 721 - EXPORT_SYMBOL_GPL(nfs_file_splice_write); 722 693 723 694 static int 724 695 do_getlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) ··· 904 935 905 936 const struct file_operations nfs_file_operations = { 906 937 .llseek = nfs_file_llseek, 907 - .read = do_sync_read, 908 - .write = do_sync_write, 909 - .aio_read = nfs_file_read, 910 - .aio_write = nfs_file_write, 938 + .read = new_sync_read, 939 + .write = new_sync_write, 940 + .read_iter = nfs_file_read, 941 + .write_iter = nfs_file_write, 911 942 .mmap = nfs_file_mmap, 912 943 .open = nfs_file_open, 913 944 .flush = nfs_file_flush, ··· 916 947 .lock = nfs_lock, 917 948 .flock = nfs_flock, 918 949 .splice_read = nfs_file_splice_read, 919 - .splice_write = nfs_file_splice_write, 950 + .splice_write = iter_file_splice_write, 920 951 .check_flags = nfs_check_flags, 921 952 .setlease = nfs_setlease, 922 953 };
+2 -4
fs/nfs/internal.h
··· 327 327 int nfs_file_fsync_commit(struct file *, loff_t, loff_t, int); 328 328 loff_t nfs_file_llseek(struct file *, loff_t, int); 329 329 int nfs_file_flush(struct file *, fl_owner_t); 330 - ssize_t nfs_file_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); 330 + ssize_t nfs_file_read(struct kiocb *, struct iov_iter *); 331 331 ssize_t nfs_file_splice_read(struct file *, loff_t *, struct pipe_inode_info *, 332 332 size_t, unsigned int); 333 333 int nfs_file_mmap(struct file *, struct vm_area_struct *); 334 - ssize_t nfs_file_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); 334 + ssize_t nfs_file_write(struct kiocb *, struct iov_iter *); 335 335 int nfs_file_release(struct inode *, struct file *); 336 336 int nfs_lock(struct file *, int, struct file_lock *); 337 337 int nfs_flock(struct file *, int, struct file_lock *); 338 - ssize_t nfs_file_splice_write(struct pipe_inode_info *, struct file *, loff_t *, 339 - size_t, unsigned int); 340 338 int nfs_check_flags(int); 341 339 int nfs_setlease(struct file *, long, struct file_lock **); 342 340
+5 -5
fs/nfs/nfs4file.c
··· 117 117 118 118 const struct file_operations nfs4_file_operations = { 119 119 .llseek = nfs_file_llseek, 120 - .read = do_sync_read, 121 - .write = do_sync_write, 122 - .aio_read = nfs_file_read, 123 - .aio_write = nfs_file_write, 120 + .read = new_sync_read, 121 + .write = new_sync_write, 122 + .read_iter = nfs_file_read, 123 + .write_iter = nfs_file_write, 124 124 .mmap = nfs_file_mmap, 125 125 .open = nfs4_file_open, 126 126 .flush = nfs_file_flush, ··· 129 129 .lock = nfs_lock, 130 130 .flock = nfs_flock, 131 131 .splice_read = nfs_file_splice_read, 132 - .splice_write = nfs_file_splice_write, 132 + .splice_write = iter_file_splice_write, 133 133 .check_flags = nfs_check_flags, 134 134 .setlease = nfs_setlease, 135 135 };
+4 -4
fs/nilfs2/file.c
··· 152 152 */ 153 153 const struct file_operations nilfs_file_operations = { 154 154 .llseek = generic_file_llseek, 155 - .read = do_sync_read, 156 - .write = do_sync_write, 157 - .aio_read = generic_file_aio_read, 158 - .aio_write = generic_file_aio_write, 155 + .read = new_sync_read, 156 + .write = new_sync_write, 157 + .read_iter = generic_file_read_iter, 158 + .write_iter = generic_file_write_iter, 159 159 .unlocked_ioctl = nilfs_ioctl, 160 160 #ifdef CONFIG_COMPAT 161 161 .compat_ioctl = nilfs_compat_ioctl,
+5 -4
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; 306 306 struct inode *inode = file->f_mapping->host; 307 + size_t count = iov_iter_count(iter); 307 308 ssize_t size; 308 309 309 310 if (rw == WRITE) 310 311 return 0; 311 312 312 313 /* Needs synchronization with the cleaner */ 313 - size = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 314 + size = blockdev_direct_IO(rw, iocb, inode, iter, offset, 314 315 nilfs_get_block); 315 316 316 317 /* ··· 320 319 */ 321 320 if (unlikely((rw & WRITE) && size < 0)) { 322 321 loff_t isize = i_size_read(inode); 323 - loff_t end = offset + iov_length(iov, nr_segs); 322 + loff_t end = offset + count; 324 323 325 324 if (end > isize) 326 325 nilfs_write_failed(mapping, end);
+3 -6
fs/ntfs/file.c
··· 2090 2090 size_t count; /* after file limit checks */ 2091 2091 ssize_t written, err; 2092 2092 2093 - count = 0; 2094 - err = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ); 2095 - if (err) 2096 - return err; 2093 + count = iov_length(iov, nr_segs); 2097 2094 pos = *ppos; 2098 2095 /* We can write back this queue in page reclaim. */ 2099 2096 current->backing_dev_info = mapping->backing_dev_info; ··· 2199 2202 2200 2203 const struct file_operations ntfs_file_ops = { 2201 2204 .llseek = generic_file_llseek, /* Seek inside file. */ 2202 - .read = do_sync_read, /* Read from file. */ 2203 - .aio_read = generic_file_aio_read, /* Async read from file. */ 2205 + .read = new_sync_read, /* Read from file. */ 2206 + .read_iter = generic_file_read_iter, /* Async read from file. */ 2204 2207 #ifdef NTFS_RW 2205 2208 .write = do_sync_write, /* Write to file. */ 2206 2209 .aio_write = ntfs_file_aio_write, /* Async write to file. */
+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, offset, 621 622 ocfs2_direct_IO_get_blocks, 622 623 ocfs2_dio_end_io, NULL, 0); 623 624 }
+24 -114
fs/ocfs2/file.c
··· 2233 2233 return ret; 2234 2234 } 2235 2235 2236 - static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, 2237 - const struct iovec *iov, 2238 - unsigned long nr_segs, 2239 - loff_t pos) 2236 + static ssize_t ocfs2_file_write_iter(struct kiocb *iocb, 2237 + struct iov_iter *from) 2240 2238 { 2241 2239 int ret, direct_io, appending, rw_level, have_alloc_sem = 0; 2242 2240 int can_do_direct, has_refcount = 0; 2243 2241 ssize_t written = 0; 2244 - size_t ocount; /* original count */ 2245 - size_t count; /* after file limit checks */ 2242 + size_t count = iov_iter_count(from); 2246 2243 loff_t old_size, *ppos = &iocb->ki_pos; 2247 2244 u32 old_clusters; 2248 2245 struct file *file = iocb->ki_filp; ··· 2253 2256 (unsigned long long)OCFS2_I(inode)->ip_blkno, 2254 2257 file->f_path.dentry->d_name.len, 2255 2258 file->f_path.dentry->d_name.name, 2256 - (unsigned int)nr_segs); 2259 + (unsigned int)from->nr_segs); /* GRRRRR */ 2257 2260 2258 2261 if (iocb->ki_nbytes == 0) 2259 2262 return 0; ··· 2351 2354 /* communicate with ocfs2_dio_end_io */ 2352 2355 ocfs2_iocb_set_rw_locked(iocb, rw_level); 2353 2356 2354 - ret = generic_segment_checks(iov, &nr_segs, &ocount, 2355 - VERIFY_READ); 2356 - if (ret) 2357 - goto out_dio; 2358 - 2359 - count = ocount; 2360 2357 ret = generic_write_checks(file, ppos, &count, 2361 2358 S_ISBLK(inode->i_mode)); 2362 2359 if (ret) 2363 2360 goto out_dio; 2364 2361 2362 + iov_iter_truncate(from, count); 2365 2363 if (direct_io) { 2366 - written = generic_file_direct_write(iocb, iov, &nr_segs, *ppos, 2367 - count, ocount); 2364 + written = generic_file_direct_write(iocb, from, *ppos); 2368 2365 if (written < 0) { 2369 2366 ret = written; 2370 2367 goto out_dio; 2371 2368 } 2372 2369 } else { 2373 - struct iov_iter from; 2374 - iov_iter_init(&from, iov, nr_segs, count, 0); 2375 2370 current->backing_dev_info = file->f_mapping->backing_dev_info; 2376 - written = generic_perform_write(file, &from, *ppos); 2371 + written = generic_perform_write(file, from, *ppos); 2377 2372 if (likely(written >= 0)) 2378 2373 iocb->ki_pos = *ppos + written; 2379 2374 current->backing_dev_info = NULL; ··· 2430 2441 return ret; 2431 2442 } 2432 2443 2433 - static int ocfs2_splice_to_file(struct pipe_inode_info *pipe, 2434 - struct file *out, 2435 - struct splice_desc *sd) 2436 - { 2437 - int ret; 2438 - 2439 - ret = ocfs2_prepare_inode_for_write(out, &sd->pos, 2440 - sd->total_len, 0, NULL, NULL); 2441 - if (ret < 0) { 2442 - mlog_errno(ret); 2443 - return ret; 2444 - } 2445 - 2446 - return splice_from_pipe_feed(pipe, sd, pipe_to_file); 2447 - } 2448 - 2449 - static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe, 2450 - struct file *out, 2451 - loff_t *ppos, 2452 - size_t len, 2453 - unsigned int flags) 2454 - { 2455 - int ret; 2456 - struct address_space *mapping = out->f_mapping; 2457 - struct inode *inode = mapping->host; 2458 - struct splice_desc sd = { 2459 - .total_len = len, 2460 - .flags = flags, 2461 - .pos = *ppos, 2462 - .u.file = out, 2463 - }; 2464 - 2465 - 2466 - trace_ocfs2_file_splice_write(inode, out, out->f_path.dentry, 2467 - (unsigned long long)OCFS2_I(inode)->ip_blkno, 2468 - out->f_path.dentry->d_name.len, 2469 - out->f_path.dentry->d_name.name, len); 2470 - 2471 - pipe_lock(pipe); 2472 - 2473 - splice_from_pipe_begin(&sd); 2474 - do { 2475 - ret = splice_from_pipe_next(pipe, &sd); 2476 - if (ret <= 0) 2477 - break; 2478 - 2479 - mutex_lock_nested(&inode->i_mutex, I_MUTEX_CHILD); 2480 - ret = ocfs2_rw_lock(inode, 1); 2481 - if (ret < 0) 2482 - mlog_errno(ret); 2483 - else { 2484 - ret = ocfs2_splice_to_file(pipe, out, &sd); 2485 - ocfs2_rw_unlock(inode, 1); 2486 - } 2487 - mutex_unlock(&inode->i_mutex); 2488 - } while (ret > 0); 2489 - splice_from_pipe_end(pipe, &sd); 2490 - 2491 - pipe_unlock(pipe); 2492 - 2493 - if (sd.num_spliced) 2494 - ret = sd.num_spliced; 2495 - 2496 - if (ret > 0) { 2497 - int err; 2498 - 2499 - err = generic_write_sync(out, *ppos, ret); 2500 - if (err) 2501 - ret = err; 2502 - else 2503 - *ppos += ret; 2504 - 2505 - balance_dirty_pages_ratelimited(mapping); 2506 - } 2507 - 2508 - return ret; 2509 - } 2510 - 2511 2444 static ssize_t ocfs2_file_splice_read(struct file *in, 2512 2445 loff_t *ppos, 2513 2446 struct pipe_inode_info *pipe, ··· 2445 2534 in->f_path.dentry->d_name.name, len); 2446 2535 2447 2536 /* 2448 - * See the comment in ocfs2_file_aio_read() 2537 + * See the comment in ocfs2_file_read_iter() 2449 2538 */ 2450 2539 ret = ocfs2_inode_lock_atime(inode, in->f_path.mnt, &lock_level); 2451 2540 if (ret < 0) { ··· 2460 2549 return ret; 2461 2550 } 2462 2551 2463 - static ssize_t ocfs2_file_aio_read(struct kiocb *iocb, 2464 - const struct iovec *iov, 2465 - unsigned long nr_segs, 2466 - loff_t pos) 2552 + static ssize_t ocfs2_file_read_iter(struct kiocb *iocb, 2553 + struct iov_iter *to) 2467 2554 { 2468 2555 int ret = 0, rw_level = -1, have_alloc_sem = 0, lock_level = 0; 2469 2556 struct file *filp = iocb->ki_filp; ··· 2470 2561 trace_ocfs2_file_aio_read(inode, filp, filp->f_path.dentry, 2471 2562 (unsigned long long)OCFS2_I(inode)->ip_blkno, 2472 2563 filp->f_path.dentry->d_name.len, 2473 - filp->f_path.dentry->d_name.name, nr_segs); 2564 + filp->f_path.dentry->d_name.name, 2565 + to->nr_segs); /* GRRRRR */ 2474 2566 2475 2567 2476 2568 if (!inode) { ··· 2516 2606 } 2517 2607 ocfs2_inode_unlock(inode, lock_level); 2518 2608 2519 - ret = generic_file_aio_read(iocb, iov, nr_segs, iocb->ki_pos); 2609 + ret = generic_file_read_iter(iocb, to); 2520 2610 trace_generic_file_aio_read_ret(ret); 2521 2611 2522 2612 /* buffered aio wouldn't have proper lock coverage today */ 2523 2613 BUG_ON(ret == -EIOCBQUEUED && !(filp->f_flags & O_DIRECT)); 2524 2614 2525 - /* see ocfs2_file_aio_write */ 2615 + /* see ocfs2_file_write_iter */ 2526 2616 if (ret == -EIOCBQUEUED || !ocfs2_iocb_is_rw_locked(iocb)) { 2527 2617 rw_level = -1; 2528 2618 have_alloc_sem = 0; ··· 2615 2705 */ 2616 2706 const struct file_operations ocfs2_fops = { 2617 2707 .llseek = ocfs2_file_llseek, 2618 - .read = do_sync_read, 2619 - .write = do_sync_write, 2708 + .read = new_sync_read, 2709 + .write = new_sync_write, 2620 2710 .mmap = ocfs2_mmap, 2621 2711 .fsync = ocfs2_sync_file, 2622 2712 .release = ocfs2_file_release, 2623 2713 .open = ocfs2_file_open, 2624 - .aio_read = ocfs2_file_aio_read, 2625 - .aio_write = ocfs2_file_aio_write, 2714 + .read_iter = ocfs2_file_read_iter, 2715 + .write_iter = ocfs2_file_write_iter, 2626 2716 .unlocked_ioctl = ocfs2_ioctl, 2627 2717 #ifdef CONFIG_COMPAT 2628 2718 .compat_ioctl = ocfs2_compat_ioctl, ··· 2630 2720 .lock = ocfs2_lock, 2631 2721 .flock = ocfs2_flock, 2632 2722 .splice_read = ocfs2_file_splice_read, 2633 - .splice_write = ocfs2_file_splice_write, 2723 + .splice_write = iter_file_splice_write, 2634 2724 .fallocate = ocfs2_fallocate, 2635 2725 }; 2636 2726 ··· 2663 2753 */ 2664 2754 const struct file_operations ocfs2_fops_no_plocks = { 2665 2755 .llseek = ocfs2_file_llseek, 2666 - .read = do_sync_read, 2667 - .write = do_sync_write, 2756 + .read = new_sync_read, 2757 + .write = new_sync_write, 2668 2758 .mmap = ocfs2_mmap, 2669 2759 .fsync = ocfs2_sync_file, 2670 2760 .release = ocfs2_file_release, 2671 2761 .open = ocfs2_file_open, 2672 - .aio_read = ocfs2_file_aio_read, 2673 - .aio_write = ocfs2_file_aio_write, 2762 + .read_iter = ocfs2_file_read_iter, 2763 + .write_iter = ocfs2_file_write_iter, 2674 2764 .unlocked_ioctl = ocfs2_ioctl, 2675 2765 #ifdef CONFIG_COMPAT 2676 2766 .compat_ioctl = ocfs2_compat_ioctl, 2677 2767 #endif 2678 2768 .flock = ocfs2_flock, 2679 2769 .splice_read = ocfs2_file_splice_read, 2680 - .splice_write = ocfs2_file_splice_write, 2770 + .splice_write = iter_file_splice_write, 2681 2771 .fallocate = ocfs2_fallocate, 2682 2772 }; 2683 2773
+4 -4
fs/omfs/file.c
··· 337 337 338 338 const struct file_operations omfs_file_operations = { 339 339 .llseek = generic_file_llseek, 340 - .read = do_sync_read, 341 - .write = do_sync_write, 342 - .aio_read = generic_file_aio_read, 343 - .aio_write = generic_file_aio_write, 340 + .read = new_sync_read, 341 + .write = new_sync_write, 342 + .read_iter = generic_file_read_iter, 343 + .write_iter = generic_file_write_iter, 344 344 .mmap = generic_file_mmap, 345 345 .fsync = generic_file_fsync, 346 346 .splice_read = generic_file_splice_read,
+6
fs/open.c
··· 725 725 } 726 726 if ((f->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ) 727 727 i_readcount_inc(inode); 728 + if ((f->f_mode & FMODE_READ) && 729 + likely(f->f_op->read || f->f_op->aio_read || f->f_op->read_iter)) 730 + f->f_mode |= FMODE_CAN_READ; 731 + if ((f->f_mode & FMODE_WRITE) && 732 + likely(f->f_op->write || f->f_op->aio_write || f->f_op->write_iter)) 733 + f->f_mode |= FMODE_CAN_WRITE; 728 734 729 735 f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); 730 736
+24 -121
fs/pipe.c
··· 116 116 pipe_lock(pipe); 117 117 } 118 118 119 - static int 120 - pipe_iov_copy_from_user(void *to, struct iovec *iov, unsigned long len, 121 - int atomic) 122 - { 123 - unsigned long copy; 124 - 125 - while (len > 0) { 126 - while (!iov->iov_len) 127 - iov++; 128 - copy = min_t(unsigned long, len, iov->iov_len); 129 - 130 - if (atomic) { 131 - if (__copy_from_user_inatomic(to, iov->iov_base, copy)) 132 - return -EFAULT; 133 - } else { 134 - if (copy_from_user(to, iov->iov_base, copy)) 135 - return -EFAULT; 136 - } 137 - to += copy; 138 - len -= copy; 139 - iov->iov_base += copy; 140 - iov->iov_len -= copy; 141 - } 142 - return 0; 143 - } 144 - 145 - /* 146 - * Pre-fault in the user memory, so we can use atomic copies. 147 - */ 148 - static void iov_fault_in_pages_read(struct iovec *iov, unsigned long len) 149 - { 150 - while (!iov->iov_len) 151 - iov++; 152 - 153 - while (len > 0) { 154 - unsigned long this_len; 155 - 156 - this_len = min_t(unsigned long, len, iov->iov_len); 157 - fault_in_pages_readable(iov->iov_base, this_len); 158 - len -= this_len; 159 - iov++; 160 - } 161 - } 162 - 163 119 static void anon_pipe_buf_release(struct pipe_inode_info *pipe, 164 120 struct pipe_buffer *buf) 165 121 { ··· 227 271 }; 228 272 229 273 static ssize_t 230 - pipe_read(struct kiocb *iocb, const struct iovec *_iov, 231 - unsigned long nr_segs, loff_t pos) 274 + pipe_read(struct kiocb *iocb, struct iov_iter *to) 232 275 { 276 + size_t total_len = iov_iter_count(to); 233 277 struct file *filp = iocb->ki_filp; 234 278 struct pipe_inode_info *pipe = filp->private_data; 235 279 int do_wakeup; 236 280 ssize_t ret; 237 - struct iovec *iov = (struct iovec *)_iov; 238 - size_t total_len; 239 - struct iov_iter iter; 240 281 241 - total_len = iov_length(iov, nr_segs); 242 282 /* Null read succeeds. */ 243 283 if (unlikely(total_len == 0)) 244 284 return 0; 245 - 246 - iov_iter_init(&iter, iov, nr_segs, total_len, 0); 247 285 248 286 do_wakeup = 0; 249 287 ret = 0; ··· 262 312 break; 263 313 } 264 314 265 - written = copy_page_to_iter(buf->page, buf->offset, chars, &iter); 315 + written = copy_page_to_iter(buf->page, buf->offset, chars, to); 266 316 if (unlikely(written < chars)) { 267 317 if (!ret) 268 318 ret = -EFAULT; ··· 336 386 } 337 387 338 388 static ssize_t 339 - pipe_write(struct kiocb *iocb, const struct iovec *_iov, 340 - unsigned long nr_segs, loff_t ppos) 389 + pipe_write(struct kiocb *iocb, struct iov_iter *from) 341 390 { 342 391 struct file *filp = iocb->ki_filp; 343 392 struct pipe_inode_info *pipe = filp->private_data; 344 - ssize_t ret; 345 - int do_wakeup; 346 - struct iovec *iov = (struct iovec *)_iov; 347 - size_t total_len; 393 + ssize_t ret = 0; 394 + int do_wakeup = 0; 395 + size_t total_len = iov_iter_count(from); 348 396 ssize_t chars; 349 397 350 - total_len = iov_length(iov, nr_segs); 351 398 /* Null write succeeds. */ 352 399 if (unlikely(total_len == 0)) 353 400 return 0; 354 401 355 - do_wakeup = 0; 356 - ret = 0; 357 402 __pipe_lock(pipe); 358 403 359 404 if (!pipe->readers) { ··· 367 422 int offset = buf->offset + buf->len; 368 423 369 424 if (ops->can_merge && offset + chars <= PAGE_SIZE) { 370 - int error, atomic = 1; 371 - void *addr; 372 - 373 - error = ops->confirm(pipe, buf); 425 + int error = ops->confirm(pipe, buf); 374 426 if (error) 375 427 goto out; 376 428 377 - iov_fault_in_pages_read(iov, chars); 378 - redo1: 379 - if (atomic) 380 - addr = kmap_atomic(buf->page); 381 - else 382 - addr = kmap(buf->page); 383 - error = pipe_iov_copy_from_user(offset + addr, iov, 384 - chars, atomic); 385 - if (atomic) 386 - kunmap_atomic(addr); 387 - else 388 - kunmap(buf->page); 389 - ret = error; 390 - do_wakeup = 1; 391 - if (error) { 392 - if (atomic) { 393 - atomic = 0; 394 - goto redo1; 395 - } 429 + ret = copy_page_from_iter(buf->page, offset, chars, from); 430 + if (unlikely(ret < chars)) { 431 + error = -EFAULT; 396 432 goto out; 397 433 } 434 + do_wakeup = 1; 398 435 buf->len += chars; 399 - total_len -= chars; 400 436 ret = chars; 401 - if (!total_len) 437 + if (!iov_iter_count(from)) 402 438 goto out; 403 439 } 404 440 } ··· 398 472 int newbuf = (pipe->curbuf + bufs) & (pipe->buffers-1); 399 473 struct pipe_buffer *buf = pipe->bufs + newbuf; 400 474 struct page *page = pipe->tmp_page; 401 - char *src; 402 - int error, atomic = 1; 475 + int copied; 403 476 404 477 if (!page) { 405 478 page = alloc_page(GFP_HIGHUSER); ··· 414 489 * FIXME! Is this really true? 415 490 */ 416 491 do_wakeup = 1; 417 - chars = PAGE_SIZE; 418 - if (chars > total_len) 419 - chars = total_len; 420 - 421 - iov_fault_in_pages_read(iov, chars); 422 - redo2: 423 - if (atomic) 424 - src = kmap_atomic(page); 425 - else 426 - src = kmap(page); 427 - 428 - error = pipe_iov_copy_from_user(src, iov, chars, 429 - atomic); 430 - if (atomic) 431 - kunmap_atomic(src); 432 - else 433 - kunmap(page); 434 - 435 - if (unlikely(error)) { 436 - if (atomic) { 437 - atomic = 0; 438 - goto redo2; 439 - } 492 + copied = copy_page_from_iter(page, 0, PAGE_SIZE, from); 493 + if (unlikely(copied < PAGE_SIZE && iov_iter_count(from))) { 440 494 if (!ret) 441 - ret = error; 495 + ret = -EFAULT; 442 496 break; 443 497 } 444 - ret += chars; 498 + ret += copied; 445 499 446 500 /* Insert it into the buffer array */ 447 501 buf->page = page; 448 502 buf->ops = &anon_pipe_buf_ops; 449 503 buf->offset = 0; 450 - buf->len = chars; 504 + buf->len = copied; 451 505 buf->flags = 0; 452 506 if (is_packetized(filp)) { 453 507 buf->ops = &packet_pipe_buf_ops; ··· 435 531 pipe->nrbufs = ++bufs; 436 532 pipe->tmp_page = NULL; 437 533 438 - total_len -= chars; 439 - if (!total_len) 534 + if (!iov_iter_count(from)) 440 535 break; 441 536 } 442 537 if (bufs < pipe->buffers) ··· 947 1044 const struct file_operations pipefifo_fops = { 948 1045 .open = fifo_open, 949 1046 .llseek = no_llseek, 950 - .read = do_sync_read, 951 - .aio_read = pipe_read, 952 - .write = do_sync_write, 953 - .aio_write = pipe_write, 1047 + .read = new_sync_read, 1048 + .read_iter = pipe_read, 1049 + .write = new_sync_write, 1050 + .write_iter = pipe_write, 954 1051 .poll = pipe_poll, 955 1052 .unlocked_ioctl = pipe_ioctl, 956 1053 .release = pipe_release,
+5 -5
fs/ramfs/file-mmu.c
··· 31 31 #include "internal.h" 32 32 33 33 const struct file_operations ramfs_file_operations = { 34 - .read = do_sync_read, 35 - .aio_read = generic_file_aio_read, 36 - .write = do_sync_write, 37 - .aio_write = generic_file_aio_write, 34 + .read = new_sync_read, 35 + .read_iter = generic_file_read_iter, 36 + .write = new_sync_write, 37 + .write_iter = generic_file_write_iter, 38 38 .mmap = generic_file_mmap, 39 39 .fsync = noop_fsync, 40 40 .splice_read = generic_file_splice_read, 41 - .splice_write = generic_file_splice_write, 41 + .splice_write = iter_file_splice_write, 42 42 .llseek = generic_file_llseek, 43 43 }; 44 44
+5 -5
fs/ramfs/file-nommu.c
··· 37 37 const struct file_operations ramfs_file_operations = { 38 38 .mmap = ramfs_nommu_mmap, 39 39 .get_unmapped_area = ramfs_nommu_get_unmapped_area, 40 - .read = do_sync_read, 41 - .aio_read = generic_file_aio_read, 42 - .write = do_sync_write, 43 - .aio_write = generic_file_aio_write, 40 + .read = new_sync_read, 41 + .read_iter = generic_file_read_iter, 42 + .write = new_sync_write, 43 + .write_iter = generic_file_write_iter, 44 44 .fsync = noop_fsync, 45 45 .splice_read = generic_file_splice_read, 46 - .splice_write = generic_file_splice_write, 46 + .splice_write = iter_file_splice_write, 47 47 .llseek = generic_file_llseek, 48 48 }; 49 49
+94 -14
fs/read_write.c
··· 25 25 typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *); 26 26 typedef ssize_t (*iov_fn_t)(struct kiocb *, const struct iovec *, 27 27 unsigned long, loff_t); 28 + typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *); 28 29 29 30 const struct file_operations generic_ro_fops = { 30 31 .llseek = generic_file_llseek, 31 - .read = do_sync_read, 32 - .aio_read = generic_file_aio_read, 32 + .read = new_sync_read, 33 + .read_iter = generic_file_read_iter, 33 34 .mmap = generic_file_readonly_mmap, 34 35 .splice_read = generic_file_splice_read, 35 36 }; ··· 391 390 392 391 EXPORT_SYMBOL(do_sync_read); 393 392 393 + ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) 394 + { 395 + struct iovec iov = { .iov_base = buf, .iov_len = len }; 396 + struct kiocb kiocb; 397 + struct iov_iter iter; 398 + ssize_t ret; 399 + 400 + init_sync_kiocb(&kiocb, filp); 401 + kiocb.ki_pos = *ppos; 402 + kiocb.ki_nbytes = len; 403 + iov_iter_init(&iter, READ, &iov, 1, len); 404 + 405 + ret = filp->f_op->read_iter(&kiocb, &iter); 406 + if (-EIOCBQUEUED == ret) 407 + ret = wait_on_sync_kiocb(&kiocb); 408 + *ppos = kiocb.ki_pos; 409 + return ret; 410 + } 411 + 412 + EXPORT_SYMBOL(new_sync_read); 413 + 394 414 ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) 395 415 { 396 416 ssize_t ret; 397 417 398 418 if (!(file->f_mode & FMODE_READ)) 399 419 return -EBADF; 400 - if (!file->f_op->read && !file->f_op->aio_read) 420 + if (!(file->f_mode & FMODE_CAN_READ)) 401 421 return -EINVAL; 402 422 if (unlikely(!access_ok(VERIFY_WRITE, buf, count))) 403 423 return -EFAULT; ··· 428 406 count = ret; 429 407 if (file->f_op->read) 430 408 ret = file->f_op->read(file, buf, count, pos); 431 - else 409 + else if (file->f_op->aio_read) 432 410 ret = do_sync_read(file, buf, count, pos); 411 + else 412 + ret = new_sync_read(file, buf, count, pos); 433 413 if (ret > 0) { 434 414 fsnotify_access(file); 435 415 add_rchar(current, ret); ··· 463 439 464 440 EXPORT_SYMBOL(do_sync_write); 465 441 442 + ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) 443 + { 444 + struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len }; 445 + struct kiocb kiocb; 446 + struct iov_iter iter; 447 + ssize_t ret; 448 + 449 + init_sync_kiocb(&kiocb, filp); 450 + kiocb.ki_pos = *ppos; 451 + kiocb.ki_nbytes = len; 452 + iov_iter_init(&iter, WRITE, &iov, 1, len); 453 + 454 + ret = filp->f_op->write_iter(&kiocb, &iter); 455 + if (-EIOCBQUEUED == ret) 456 + ret = wait_on_sync_kiocb(&kiocb); 457 + *ppos = kiocb.ki_pos; 458 + return ret; 459 + } 460 + 461 + EXPORT_SYMBOL(new_sync_write); 462 + 466 463 ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos) 467 464 { 468 465 mm_segment_t old_fs; 469 466 const char __user *p; 470 467 ssize_t ret; 471 468 472 - if (!file->f_op->write && !file->f_op->aio_write) 469 + if (!(file->f_mode & FMODE_CAN_WRITE)) 473 470 return -EINVAL; 474 471 475 472 old_fs = get_fs(); ··· 500 455 count = MAX_RW_COUNT; 501 456 if (file->f_op->write) 502 457 ret = file->f_op->write(file, p, count, pos); 503 - else 458 + else if (file->f_op->aio_write) 504 459 ret = do_sync_write(file, p, count, pos); 460 + else 461 + ret = new_sync_write(file, p, count, pos); 505 462 set_fs(old_fs); 506 463 if (ret > 0) { 507 464 fsnotify_modify(file); ··· 519 472 520 473 if (!(file->f_mode & FMODE_WRITE)) 521 474 return -EBADF; 522 - if (!file->f_op->write && !file->f_op->aio_write) 475 + if (!(file->f_mode & FMODE_CAN_WRITE)) 523 476 return -EINVAL; 524 477 if (unlikely(!access_ok(VERIFY_READ, buf, count))) 525 478 return -EFAULT; ··· 530 483 file_start_write(file); 531 484 if (file->f_op->write) 532 485 ret = file->f_op->write(file, buf, count, pos); 533 - else 486 + else if (file->f_op->aio_write) 534 487 ret = do_sync_write(file, buf, count, pos); 488 + else 489 + ret = new_sync_write(file, buf, count, pos); 535 490 if (ret > 0) { 536 491 fsnotify_modify(file); 537 492 add_wchar(current, ret); ··· 649 600 return seg; 650 601 } 651 602 EXPORT_SYMBOL(iov_shorten); 603 + 604 + static ssize_t do_iter_readv_writev(struct file *filp, int rw, const struct iovec *iov, 605 + unsigned long nr_segs, size_t len, loff_t *ppos, iter_fn_t fn) 606 + { 607 + struct kiocb kiocb; 608 + struct iov_iter iter; 609 + ssize_t ret; 610 + 611 + init_sync_kiocb(&kiocb, filp); 612 + kiocb.ki_pos = *ppos; 613 + kiocb.ki_nbytes = len; 614 + 615 + iov_iter_init(&iter, rw, iov, nr_segs, len); 616 + ret = fn(&kiocb, &iter); 617 + if (ret == -EIOCBQUEUED) 618 + ret = wait_on_sync_kiocb(&kiocb); 619 + *ppos = kiocb.ki_pos; 620 + return ret; 621 + } 652 622 653 623 static ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov, 654 624 unsigned long nr_segs, size_t len, loff_t *ppos, iov_fn_t fn) ··· 806 738 ssize_t ret; 807 739 io_fn_t fn; 808 740 iov_fn_t fnv; 741 + iter_fn_t iter_fn; 809 742 810 743 ret = rw_copy_check_uvector(type, uvector, nr_segs, 811 744 ARRAY_SIZE(iovstack), iovstack, &iov); ··· 822 753 if (type == READ) { 823 754 fn = file->f_op->read; 824 755 fnv = file->f_op->aio_read; 756 + iter_fn = file->f_op->read_iter; 825 757 } else { 826 758 fn = (io_fn_t)file->f_op->write; 827 759 fnv = file->f_op->aio_write; 760 + iter_fn = file->f_op->write_iter; 828 761 file_start_write(file); 829 762 } 830 763 831 - if (fnv) 764 + if (iter_fn) 765 + ret = do_iter_readv_writev(file, type, iov, nr_segs, tot_len, 766 + pos, iter_fn); 767 + else if (fnv) 832 768 ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, 833 769 pos, fnv); 834 770 else ··· 859 785 { 860 786 if (!(file->f_mode & FMODE_READ)) 861 787 return -EBADF; 862 - if (!file->f_op->aio_read && !file->f_op->read) 788 + if (!(file->f_mode & FMODE_CAN_READ)) 863 789 return -EINVAL; 864 790 865 791 return do_readv_writev(READ, file, vec, vlen, pos); ··· 872 798 { 873 799 if (!(file->f_mode & FMODE_WRITE)) 874 800 return -EBADF; 875 - if (!file->f_op->aio_write && !file->f_op->write) 801 + if (!(file->f_mode & FMODE_CAN_WRITE)) 876 802 return -EINVAL; 877 803 878 804 return do_readv_writev(WRITE, file, vec, vlen, pos); ··· 986 912 ssize_t ret; 987 913 io_fn_t fn; 988 914 iov_fn_t fnv; 915 + iter_fn_t iter_fn; 989 916 990 917 ret = compat_rw_copy_check_uvector(type, uvector, nr_segs, 991 918 UIO_FASTIOV, iovstack, &iov); ··· 1002 927 if (type == READ) { 1003 928 fn = file->f_op->read; 1004 929 fnv = file->f_op->aio_read; 930 + iter_fn = file->f_op->read_iter; 1005 931 } else { 1006 932 fn = (io_fn_t)file->f_op->write; 1007 933 fnv = file->f_op->aio_write; 934 + iter_fn = file->f_op->write_iter; 1008 935 file_start_write(file); 1009 936 } 1010 937 1011 - if (fnv) 938 + if (iter_fn) 939 + ret = do_iter_readv_writev(file, type, iov, nr_segs, tot_len, 940 + pos, iter_fn); 941 + else if (fnv) 1012 942 ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, 1013 943 pos, fnv); 1014 944 else ··· 1044 964 goto out; 1045 965 1046 966 ret = -EINVAL; 1047 - if (!file->f_op->aio_read && !file->f_op->read) 967 + if (!(file->f_mode & FMODE_CAN_READ)) 1048 968 goto out; 1049 969 1050 970 ret = compat_do_readv_writev(READ, file, vec, vlen, pos); ··· 1121 1041 goto out; 1122 1042 1123 1043 ret = -EINVAL; 1124 - if (!file->f_op->aio_write && !file->f_op->write) 1044 + if (!(file->f_mode & FMODE_CAN_WRITE)) 1125 1045 goto out; 1126 1046 1127 1047 ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos);
+5 -5
fs/reiserfs/file.c
··· 243 243 } 244 244 245 245 const struct file_operations reiserfs_file_operations = { 246 - .read = do_sync_read, 247 - .write = do_sync_write, 246 + .read = new_sync_read, 247 + .write = new_sync_write, 248 248 .unlocked_ioctl = reiserfs_ioctl, 249 249 #ifdef CONFIG_COMPAT 250 250 .compat_ioctl = reiserfs_compat_ioctl, ··· 253 253 .open = reiserfs_file_open, 254 254 .release = reiserfs_file_release, 255 255 .fsync = reiserfs_sync_file, 256 - .aio_read = generic_file_aio_read, 257 - .aio_write = generic_file_aio_write, 256 + .read_iter = generic_file_read_iter, 257 + .write_iter = generic_file_write_iter, 258 258 .splice_read = generic_file_splice_read, 259 - .splice_write = generic_file_splice_write, 259 + .splice_write = iter_file_splice_write, 260 260 .llseek = generic_file_llseek, 261 261 }; 262 262
+5 -5
fs/reiserfs/inode.c
··· 3279 3279 * to do in this section of the code. 3280 3280 */ 3281 3281 static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb, 3282 - const struct iovec *iov, loff_t offset, 3283 - unsigned long nr_segs) 3282 + struct iov_iter *iter, loff_t offset) 3284 3283 { 3285 3284 struct file *file = iocb->ki_filp; 3286 3285 struct inode *inode = file->f_mapping->host; 3286 + size_t count = iov_iter_count(iter); 3287 3287 ssize_t ret; 3288 3288 3289 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 3290 - reiserfs_get_blocks_direct_io); 3289 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 3290 + reiserfs_get_blocks_direct_io); 3291 3291 3292 3292 /* 3293 3293 * In case of error extending write may have instantiated a few ··· 3295 3295 */ 3296 3296 if (unlikely((rw & WRITE) && ret < 0)) { 3297 3297 loff_t isize = i_size_read(inode); 3298 - loff_t end = offset + iov_length(iov, nr_segs); 3298 + loff_t end = offset + count; 3299 3299 3300 3300 if ((end > isize) && inode_newsize_ok(inode, isize) == 0) { 3301 3301 truncate_setsize(inode, isize);
+2 -2
fs/romfs/mmap-nommu.c
··· 72 72 73 73 const struct file_operations romfs_ro_fops = { 74 74 .llseek = generic_file_llseek, 75 - .read = do_sync_read, 76 - .aio_read = generic_file_aio_read, 75 + .read = new_sync_read, 76 + .read_iter = generic_file_read_iter, 77 77 .splice_read = generic_file_splice_read, 78 78 .mmap = romfs_mmap, 79 79 .get_unmapped_area = romfs_get_unmapped_area,
+103 -92
fs/splice.c
··· 32 32 #include <linux/gfp.h> 33 33 #include <linux/socket.h> 34 34 #include <linux/compat.h> 35 + #include <linux/aio.h> 35 36 #include "internal.h" 36 37 37 38 /* ··· 718 717 sd->len, &pos, more); 719 718 } 720 719 721 - /* 722 - * This is a little more tricky than the file -> pipe splicing. There are 723 - * basically three cases: 724 - * 725 - * - Destination page already exists in the address space and there 726 - * are users of it. For that case we have no other option that 727 - * copying the data. Tough luck. 728 - * - Destination page already exists in the address space, but there 729 - * are no users of it. Make sure it's uptodate, then drop it. Fall 730 - * through to last case. 731 - * - Destination page does not exist, we can add the pipe page to 732 - * the page cache and avoid the copy. 733 - * 734 - * If asked to move pages to the output file (SPLICE_F_MOVE is set in 735 - * sd->flags), we attempt to migrate pages from the pipe to the output 736 - * file address space page cache. This is possible if no one else has 737 - * the pipe page referenced outside of the pipe and page cache. If 738 - * SPLICE_F_MOVE isn't set, or we cannot move the page, we simply create 739 - * a new page in the output file page cache and fill/dirty that. 740 - */ 741 - int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf, 742 - struct splice_desc *sd) 743 - { 744 - struct file *file = sd->u.file; 745 - struct address_space *mapping = file->f_mapping; 746 - unsigned int offset, this_len; 747 - struct page *page; 748 - void *fsdata; 749 - int ret; 750 - 751 - offset = sd->pos & ~PAGE_CACHE_MASK; 752 - 753 - this_len = sd->len; 754 - if (this_len + offset > PAGE_CACHE_SIZE) 755 - this_len = PAGE_CACHE_SIZE - offset; 756 - 757 - ret = pagecache_write_begin(file, mapping, sd->pos, this_len, 758 - AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata); 759 - if (unlikely(ret)) 760 - goto out; 761 - 762 - if (buf->page != page) { 763 - char *src = kmap_atomic(buf->page); 764 - char *dst = kmap_atomic(page); 765 - 766 - memcpy(dst + offset, src + buf->offset, this_len); 767 - flush_dcache_page(page); 768 - kunmap_atomic(dst); 769 - kunmap_atomic(src); 770 - } 771 - ret = pagecache_write_end(file, mapping, sd->pos, this_len, this_len, 772 - page, fsdata); 773 - out: 774 - return ret; 775 - } 776 - EXPORT_SYMBOL(pipe_to_file); 777 - 778 720 static void wakeup_pipe_writers(struct pipe_inode_info *pipe) 779 721 { 780 722 smp_mb(); ··· 746 802 * locking is required around copying the pipe buffers to the 747 803 * destination. 748 804 */ 749 - int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_desc *sd, 805 + static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_desc *sd, 750 806 splice_actor *actor) 751 807 { 752 808 int ret; ··· 793 849 794 850 return 1; 795 851 } 796 - EXPORT_SYMBOL(splice_from_pipe_feed); 797 852 798 853 /** 799 854 * splice_from_pipe_next - wait for some data to splice from ··· 804 861 * value (one) if pipe buffers are available. It will return zero 805 862 * or -errno if no more data needs to be spliced. 806 863 */ 807 - int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_desc *sd) 864 + static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_desc *sd) 808 865 { 809 866 while (!pipe->nrbufs) { 810 867 if (!pipe->writers) ··· 829 886 830 887 return 1; 831 888 } 832 - EXPORT_SYMBOL(splice_from_pipe_next); 833 889 834 890 /** 835 891 * splice_from_pipe_begin - start splicing from pipe ··· 839 897 * splice_from_pipe_next() and splice_from_pipe_feed() to 840 898 * initialize the necessary fields of @sd. 841 899 */ 842 - void splice_from_pipe_begin(struct splice_desc *sd) 900 + static void splice_from_pipe_begin(struct splice_desc *sd) 843 901 { 844 902 sd->num_spliced = 0; 845 903 sd->need_wakeup = false; 846 904 } 847 - EXPORT_SYMBOL(splice_from_pipe_begin); 848 905 849 906 /** 850 907 * splice_from_pipe_end - finish splicing from pipe ··· 855 914 * be called after a loop containing splice_from_pipe_next() and 856 915 * splice_from_pipe_feed(). 857 916 */ 858 - void splice_from_pipe_end(struct pipe_inode_info *pipe, struct splice_desc *sd) 917 + static void splice_from_pipe_end(struct pipe_inode_info *pipe, struct splice_desc *sd) 859 918 { 860 919 if (sd->need_wakeup) 861 920 wakeup_pipe_writers(pipe); 862 921 } 863 - EXPORT_SYMBOL(splice_from_pipe_end); 864 922 865 923 /** 866 924 * __splice_from_pipe - splice data from a pipe to given actor ··· 925 985 } 926 986 927 987 /** 928 - * generic_file_splice_write - splice data from a pipe to a file 988 + * iter_file_splice_write - splice data from a pipe to a file 929 989 * @pipe: pipe info 930 990 * @out: file to write to 931 991 * @ppos: position in @out ··· 935 995 * Description: 936 996 * Will either move or copy pages (determined by @flags options) from 937 997 * the given pipe inode to the given file. 998 + * This one is ->write_iter-based. 938 999 * 939 1000 */ 940 1001 ssize_t 941 - generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out, 1002 + iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, 942 1003 loff_t *ppos, size_t len, unsigned int flags) 943 1004 { 944 - struct address_space *mapping = out->f_mapping; 945 - struct inode *inode = mapping->host; 946 1005 struct splice_desc sd = { 947 1006 .total_len = len, 948 1007 .flags = flags, 949 1008 .pos = *ppos, 950 1009 .u.file = out, 951 1010 }; 1011 + int nbufs = pipe->buffers; 1012 + struct bio_vec *array = kcalloc(nbufs, sizeof(struct bio_vec), 1013 + GFP_KERNEL); 952 1014 ssize_t ret; 1015 + 1016 + if (unlikely(!array)) 1017 + return -ENOMEM; 953 1018 954 1019 pipe_lock(pipe); 955 1020 956 1021 splice_from_pipe_begin(&sd); 957 - do { 1022 + while (sd.total_len) { 1023 + struct iov_iter from; 1024 + struct kiocb kiocb; 1025 + size_t left; 1026 + int n, idx; 1027 + 958 1028 ret = splice_from_pipe_next(pipe, &sd); 959 1029 if (ret <= 0) 960 1030 break; 961 1031 962 - mutex_lock_nested(&inode->i_mutex, I_MUTEX_CHILD); 963 - ret = file_remove_suid(out); 964 - if (!ret) { 965 - ret = file_update_time(out); 966 - if (!ret) 967 - ret = splice_from_pipe_feed(pipe, &sd, 968 - pipe_to_file); 1032 + if (unlikely(nbufs < pipe->buffers)) { 1033 + kfree(array); 1034 + nbufs = pipe->buffers; 1035 + array = kcalloc(nbufs, sizeof(struct bio_vec), 1036 + GFP_KERNEL); 1037 + if (!array) { 1038 + ret = -ENOMEM; 1039 + break; 1040 + } 969 1041 } 970 - mutex_unlock(&inode->i_mutex); 971 - } while (ret > 0); 1042 + 1043 + /* build the vector */ 1044 + left = sd.total_len; 1045 + for (n = 0, idx = pipe->curbuf; left && n < pipe->nrbufs; n++, idx++) { 1046 + struct pipe_buffer *buf = pipe->bufs + idx; 1047 + size_t this_len = buf->len; 1048 + 1049 + if (this_len > left) 1050 + this_len = left; 1051 + 1052 + if (idx == pipe->buffers - 1) 1053 + idx = -1; 1054 + 1055 + ret = buf->ops->confirm(pipe, buf); 1056 + if (unlikely(ret)) { 1057 + if (ret == -ENODATA) 1058 + ret = 0; 1059 + goto done; 1060 + } 1061 + 1062 + array[n].bv_page = buf->page; 1063 + array[n].bv_len = this_len; 1064 + array[n].bv_offset = buf->offset; 1065 + left -= this_len; 1066 + } 1067 + 1068 + /* ... iov_iter */ 1069 + from.type = ITER_BVEC | WRITE; 1070 + from.bvec = array; 1071 + from.nr_segs = n; 1072 + from.count = sd.total_len - left; 1073 + from.iov_offset = 0; 1074 + 1075 + /* ... and iocb */ 1076 + init_sync_kiocb(&kiocb, out); 1077 + kiocb.ki_pos = sd.pos; 1078 + kiocb.ki_nbytes = sd.total_len - left; 1079 + 1080 + /* now, send it */ 1081 + ret = out->f_op->write_iter(&kiocb, &from); 1082 + if (-EIOCBQUEUED == ret) 1083 + ret = wait_on_sync_kiocb(&kiocb); 1084 + 1085 + if (ret <= 0) 1086 + break; 1087 + 1088 + sd.num_spliced += ret; 1089 + sd.total_len -= ret; 1090 + *ppos = sd.pos = kiocb.ki_pos; 1091 + 1092 + /* dismiss the fully eaten buffers, adjust the partial one */ 1093 + while (ret) { 1094 + struct pipe_buffer *buf = pipe->bufs + pipe->curbuf; 1095 + if (ret >= buf->len) { 1096 + const struct pipe_buf_operations *ops = buf->ops; 1097 + ret -= buf->len; 1098 + buf->len = 0; 1099 + buf->ops = NULL; 1100 + ops->release(pipe, buf); 1101 + pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1); 1102 + pipe->nrbufs--; 1103 + if (pipe->files) 1104 + sd.need_wakeup = true; 1105 + } else { 1106 + buf->offset += ret; 1107 + buf->len -= ret; 1108 + ret = 0; 1109 + } 1110 + } 1111 + } 1112 + done: 1113 + kfree(array); 972 1114 splice_from_pipe_end(pipe, &sd); 973 1115 974 1116 pipe_unlock(pipe); ··· 1058 1036 if (sd.num_spliced) 1059 1037 ret = sd.num_spliced; 1060 1038 1061 - if (ret > 0) { 1062 - int err; 1063 - 1064 - err = generic_write_sync(out, *ppos, ret); 1065 - if (err) 1066 - ret = err; 1067 - else 1068 - *ppos += ret; 1069 - balance_dirty_pages_ratelimited(mapping); 1070 - } 1071 - 1072 1039 return ret; 1073 1040 } 1074 1041 1075 - EXPORT_SYMBOL(generic_file_splice_write); 1042 + EXPORT_SYMBOL(iter_file_splice_write); 1076 1043 1077 1044 static int write_pipe_buf(struct pipe_inode_info *pipe, struct pipe_buffer *buf, 1078 1045 struct splice_desc *sd) ··· 1560 1549 goto out; 1561 1550 1562 1551 count = ret; 1563 - iov_iter_init(&iter, iov, nr_segs, count, 0); 1552 + iov_iter_init(&iter, READ, iov, nr_segs, count); 1564 1553 1565 1554 sd.len = 0; 1566 1555 sd.total_len = count;
+4 -4
fs/sysv/file.c
··· 21 21 */ 22 22 const struct file_operations sysv_file_operations = { 23 23 .llseek = generic_file_llseek, 24 - .read = do_sync_read, 25 - .aio_read = generic_file_aio_read, 26 - .write = do_sync_write, 27 - .aio_write = generic_file_aio_write, 24 + .read = new_sync_read, 25 + .read_iter = generic_file_read_iter, 26 + .write = new_sync_write, 27 + .write_iter = generic_file_write_iter, 28 28 .mmap = generic_file_mmap, 29 29 .fsync = generic_file_fsync, 30 30 .splice_read = generic_file_splice_read,
+10 -15
fs/ubifs/file.c
··· 1364 1364 1365 1365 /** 1366 1366 * update_ctime - update mtime and ctime of an inode. 1367 - * @c: UBIFS file-system description object 1368 1367 * @inode: inode to update 1369 1368 * 1370 1369 * This function updates mtime and ctime of the inode if it is not equivalent to 1371 1370 * current time. Returns zero in case of success and a negative error code in 1372 1371 * case of failure. 1373 1372 */ 1374 - static int update_mctime(struct ubifs_info *c, struct inode *inode) 1373 + static int update_mctime(struct inode *inode) 1375 1374 { 1376 1375 struct timespec now = ubifs_current_time(inode); 1377 1376 struct ubifs_inode *ui = ubifs_inode(inode); 1377 + struct ubifs_info *c = inode->i_sb->s_fs_info; 1378 1378 1379 1379 if (mctime_update_needed(inode, &now)) { 1380 1380 int err, release; ··· 1397 1397 return 0; 1398 1398 } 1399 1399 1400 - static ssize_t ubifs_aio_write(struct kiocb *iocb, const struct iovec *iov, 1401 - unsigned long nr_segs, loff_t pos) 1400 + static ssize_t ubifs_write_iter(struct kiocb *iocb, struct iov_iter *from) 1402 1401 { 1403 - int err; 1404 - struct inode *inode = iocb->ki_filp->f_mapping->host; 1405 - struct ubifs_info *c = inode->i_sb->s_fs_info; 1406 - 1407 - err = update_mctime(c, inode); 1402 + int err = update_mctime(file_inode(iocb->ki_filp)); 1408 1403 if (err) 1409 1404 return err; 1410 1405 1411 - return generic_file_aio_write(iocb, iov, nr_segs, pos); 1406 + return generic_file_write_iter(iocb, from); 1412 1407 } 1413 1408 1414 1409 static int ubifs_set_page_dirty(struct page *page) ··· 1577 1582 1578 1583 const struct file_operations ubifs_file_operations = { 1579 1584 .llseek = generic_file_llseek, 1580 - .read = do_sync_read, 1581 - .write = do_sync_write, 1582 - .aio_read = generic_file_aio_read, 1583 - .aio_write = ubifs_aio_write, 1585 + .read = new_sync_read, 1586 + .write = new_sync_write, 1587 + .read_iter = generic_file_read_iter, 1588 + .write_iter = ubifs_write_iter, 1584 1589 .mmap = ubifs_file_mmap, 1585 1590 .fsync = ubifs_fsync, 1586 1591 .unlocked_ioctl = ubifs_ioctl, 1587 1592 .splice_read = generic_file_splice_read, 1588 - .splice_write = generic_file_splice_write, 1593 + .splice_write = iter_file_splice_write, 1589 1594 #ifdef CONFIG_COMPAT 1590 1595 .compat_ioctl = ubifs_compat_ioctl, 1591 1596 #endif
+9 -10
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; ··· 134 134 .direct_IO = udf_adinicb_direct_IO, 135 135 }; 136 136 137 - static ssize_t udf_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 138 - unsigned long nr_segs, loff_t ppos) 137 + static ssize_t udf_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 139 138 { 140 139 ssize_t retval; 141 140 struct file *file = iocb->ki_filp; ··· 149 150 if (file->f_flags & O_APPEND) 150 151 pos = inode->i_size; 151 152 else 152 - pos = ppos; 153 + pos = iocb->ki_pos; 153 154 154 155 if (inode->i_sb->s_blocksize < 155 156 (udf_file_entry_alloc_offset(inode) + ··· 170 171 } else 171 172 up_write(&iinfo->i_data_sem); 172 173 173 - retval = __generic_file_aio_write(iocb, iov, nr_segs); 174 + retval = __generic_file_write_iter(iocb, from); 174 175 mutex_unlock(&inode->i_mutex); 175 176 176 177 if (retval > 0) { ··· 251 252 } 252 253 253 254 const struct file_operations udf_file_operations = { 254 - .read = do_sync_read, 255 - .aio_read = generic_file_aio_read, 255 + .read = new_sync_read, 256 + .read_iter = generic_file_read_iter, 256 257 .unlocked_ioctl = udf_ioctl, 257 258 .open = generic_file_open, 258 259 .mmap = generic_file_mmap, 259 - .write = do_sync_write, 260 - .aio_write = udf_file_aio_write, 260 + .write = new_sync_write, 261 + .write_iter = udf_file_write_iter, 261 262 .release = udf_release_file, 262 263 .fsync = generic_file_fsync, 263 264 .splice_read = generic_file_splice_read,
+5 -5
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 + size_t count = iov_iter_count(iter); 226 227 ssize_t ret; 227 228 228 - ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 229 - udf_get_block); 229 + ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, 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 + count); 232 232 return ret; 233 233 } 234 234
+4 -4
fs/ufs/file.c
··· 35 35 36 36 const struct file_operations ufs_file_operations = { 37 37 .llseek = generic_file_llseek, 38 - .read = do_sync_read, 39 - .aio_read = generic_file_aio_read, 40 - .write = do_sync_write, 41 - .aio_write = generic_file_aio_write, 38 + .read = new_sync_read, 39 + .read_iter = generic_file_read_iter, 40 + .write = new_sync_write, 41 + .write_iter = generic_file_write_iter, 42 42 .mmap = generic_file_mmap, 43 43 .open = generic_file_open, 44 44 .fsync = generic_file_fsync,
+7 -10
fs/xfs/xfs_aops.c
··· 1486 1486 xfs_vm_direct_IO( 1487 1487 int rw, 1488 1488 struct kiocb *iocb, 1489 - const struct iovec *iov, 1490 - loff_t offset, 1491 - unsigned long nr_segs) 1489 + struct iov_iter *iter, 1490 + loff_t offset) 1492 1491 { 1493 1492 struct inode *inode = iocb->ki_filp->f_mapping->host; 1494 1493 struct block_device *bdev = xfs_find_bdev_for_inode(inode); ··· 1495 1496 ssize_t ret; 1496 1497 1497 1498 if (rw & WRITE) { 1498 - size_t size = iov_length(iov, nr_segs); 1499 + size_t size = iov_iter_count(iter); 1499 1500 1500 1501 /* 1501 1502 * We cannot preallocate a size update transaction here as we ··· 1507 1508 if (offset + size > XFS_I(inode)->i_d.di_size) 1508 1509 ioend->io_isdirect = 1; 1509 1510 1510 - ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, 1511 - offset, nr_segs, 1512 - xfs_get_blocks_direct, 1511 + ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iter, 1512 + offset, xfs_get_blocks_direct, 1513 1513 xfs_end_io_direct_write, NULL, 1514 1514 DIO_ASYNC_EXTEND); 1515 1515 if (ret != -EIOCBQUEUED && iocb->private) 1516 1516 goto out_destroy_ioend; 1517 1517 } else { 1518 - ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iov, 1519 - offset, nr_segs, 1520 - xfs_get_blocks_direct, 1518 + ret = __blockdev_direct_IO(rw, iocb, inode, bdev, iter, 1519 + offset, xfs_get_blocks_direct, 1521 1520 NULL, NULL, 0); 1522 1521 } 1523 1522
+27 -92
fs/xfs/xfs_file.c
··· 229 229 } 230 230 231 231 STATIC ssize_t 232 - xfs_file_aio_read( 232 + xfs_file_read_iter( 233 233 struct kiocb *iocb, 234 - const struct iovec *iovp, 235 - unsigned long nr_segs, 236 - loff_t pos) 234 + struct iov_iter *to) 237 235 { 238 236 struct file *file = iocb->ki_filp; 239 237 struct inode *inode = file->f_mapping->host; 240 238 struct xfs_inode *ip = XFS_I(inode); 241 239 struct xfs_mount *mp = ip->i_mount; 242 - size_t size = 0; 240 + size_t size = iov_iter_count(to); 243 241 ssize_t ret = 0; 244 242 int ioflags = 0; 245 243 xfs_fsize_t n; 244 + loff_t pos = iocb->ki_pos; 246 245 247 246 XFS_STATS_INC(xs_read_calls); 248 - 249 - BUG_ON(iocb->ki_pos != pos); 250 247 251 248 if (unlikely(file->f_flags & O_DIRECT)) 252 249 ioflags |= IO_ISDIRECT; 253 250 if (file->f_mode & FMODE_NOCMTIME) 254 251 ioflags |= IO_INVIS; 255 - 256 - ret = generic_segment_checks(iovp, &nr_segs, &size, VERIFY_WRITE); 257 - if (ret < 0) 258 - return ret; 259 252 260 253 if (unlikely(ioflags & IO_ISDIRECT)) { 261 254 xfs_buftarg_t *target = ··· 302 309 303 310 trace_xfs_file_read(ip, size, pos, ioflags); 304 311 305 - ret = generic_file_aio_read(iocb, iovp, nr_segs, pos); 312 + ret = generic_file_read_iter(iocb, to); 306 313 if (ret > 0) 307 314 XFS_STATS_ADD(xs_read_bytes, ret); 308 315 ··· 339 346 XFS_STATS_ADD(xs_read_bytes, ret); 340 347 341 348 xfs_rw_iunlock(ip, XFS_IOLOCK_SHARED); 342 - return ret; 343 - } 344 - 345 - /* 346 - * xfs_file_splice_write() does not use xfs_rw_ilock() because 347 - * generic_file_splice_write() takes the i_mutex itself. This, in theory, 348 - * couuld cause lock inversions between the aio_write path and the splice path 349 - * if someone is doing concurrent splice(2) based writes and write(2) based 350 - * writes to the same inode. The only real way to fix this is to re-implement 351 - * the generic code here with correct locking orders. 352 - */ 353 - STATIC ssize_t 354 - xfs_file_splice_write( 355 - struct pipe_inode_info *pipe, 356 - struct file *outfilp, 357 - loff_t *ppos, 358 - size_t count, 359 - unsigned int flags) 360 - { 361 - struct inode *inode = outfilp->f_mapping->host; 362 - struct xfs_inode *ip = XFS_I(inode); 363 - int ioflags = 0; 364 - ssize_t ret; 365 - 366 - XFS_STATS_INC(xs_write_calls); 367 - 368 - if (outfilp->f_mode & FMODE_NOCMTIME) 369 - ioflags |= IO_INVIS; 370 - 371 - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) 372 - return -EIO; 373 - 374 - xfs_ilock(ip, XFS_IOLOCK_EXCL); 375 - 376 - trace_xfs_file_splice_write(ip, count, *ppos, ioflags); 377 - 378 - ret = generic_file_splice_write(pipe, outfilp, ppos, count, flags); 379 - if (ret > 0) 380 - XFS_STATS_ADD(xs_write_bytes, ret); 381 - 382 - xfs_iunlock(ip, XFS_IOLOCK_EXCL); 383 349 return ret; 384 350 } 385 351 ··· 577 625 STATIC ssize_t 578 626 xfs_file_dio_aio_write( 579 627 struct kiocb *iocb, 580 - const struct iovec *iovp, 581 - unsigned long nr_segs, 582 - loff_t pos, 583 - size_t ocount) 628 + struct iov_iter *from) 584 629 { 585 630 struct file *file = iocb->ki_filp; 586 631 struct address_space *mapping = file->f_mapping; ··· 585 636 struct xfs_inode *ip = XFS_I(inode); 586 637 struct xfs_mount *mp = ip->i_mount; 587 638 ssize_t ret = 0; 588 - size_t count = ocount; 589 639 int unaligned_io = 0; 590 640 int iolock; 641 + size_t count = iov_iter_count(from); 642 + loff_t pos = iocb->ki_pos; 591 643 struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ? 592 644 mp->m_rtdev_targp : mp->m_ddev_targp; 593 645 ··· 627 677 ret = xfs_file_aio_write_checks(file, &pos, &count, &iolock); 628 678 if (ret) 629 679 goto out; 680 + iov_iter_truncate(from, count); 630 681 631 682 if (mapping->nrpages) { 632 683 ret = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ··· 649 698 } 650 699 651 700 trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); 652 - ret = generic_file_direct_write(iocb, iovp, 653 - &nr_segs, pos, count, ocount); 701 + ret = generic_file_direct_write(iocb, from, pos); 654 702 655 703 out: 656 704 xfs_rw_iunlock(ip, iolock); ··· 662 712 STATIC ssize_t 663 713 xfs_file_buffered_aio_write( 664 714 struct kiocb *iocb, 665 - const struct iovec *iovp, 666 - unsigned long nr_segs, 667 - loff_t pos, 668 - size_t count) 715 + struct iov_iter *from) 669 716 { 670 717 struct file *file = iocb->ki_filp; 671 718 struct address_space *mapping = file->f_mapping; ··· 671 724 ssize_t ret; 672 725 int enospc = 0; 673 726 int iolock = XFS_IOLOCK_EXCL; 674 - struct iov_iter from; 727 + loff_t pos = iocb->ki_pos; 728 + size_t count = iov_iter_count(from); 675 729 676 730 xfs_rw_ilock(ip, iolock); 677 731 ··· 680 732 if (ret) 681 733 goto out; 682 734 683 - iov_iter_init(&from, iovp, nr_segs, count, 0); 735 + iov_iter_truncate(from, count); 684 736 /* We can write back this queue in page reclaim */ 685 737 current->backing_dev_info = mapping->backing_dev_info; 686 738 687 739 write_retry: 688 740 trace_xfs_file_buffered_write(ip, count, iocb->ki_pos, 0); 689 - ret = generic_perform_write(file, &from, pos); 741 + ret = generic_perform_write(file, from, pos); 690 742 if (likely(ret >= 0)) 691 743 iocb->ki_pos = pos + ret; 692 744 /* ··· 707 759 } 708 760 709 761 STATIC ssize_t 710 - xfs_file_aio_write( 762 + xfs_file_write_iter( 711 763 struct kiocb *iocb, 712 - const struct iovec *iovp, 713 - unsigned long nr_segs, 714 - loff_t pos) 764 + struct iov_iter *from) 715 765 { 716 766 struct file *file = iocb->ki_filp; 717 767 struct address_space *mapping = file->f_mapping; 718 768 struct inode *inode = mapping->host; 719 769 struct xfs_inode *ip = XFS_I(inode); 720 770 ssize_t ret; 721 - size_t ocount = 0; 771 + size_t ocount = iov_iter_count(from); 722 772 723 773 XFS_STATS_INC(xs_write_calls); 724 - 725 - BUG_ON(iocb->ki_pos != pos); 726 - 727 - ret = generic_segment_checks(iovp, &nr_segs, &ocount, VERIFY_READ); 728 - if (ret) 729 - return ret; 730 774 731 775 if (ocount == 0) 732 776 return 0; 733 777 734 - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { 735 - ret = -EIO; 736 - goto out; 737 - } 778 + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) 779 + return -EIO; 738 780 739 781 if (unlikely(file->f_flags & O_DIRECT)) 740 - ret = xfs_file_dio_aio_write(iocb, iovp, nr_segs, pos, ocount); 782 + ret = xfs_file_dio_aio_write(iocb, from); 741 783 else 742 - ret = xfs_file_buffered_aio_write(iocb, iovp, nr_segs, pos, 743 - ocount); 784 + ret = xfs_file_buffered_aio_write(iocb, from); 744 785 745 786 if (ret > 0) { 746 787 ssize_t err; ··· 741 804 if (err < 0) 742 805 ret = err; 743 806 } 744 - 745 - out: 746 807 return ret; 747 808 } 748 809 ··· 1396 1461 1397 1462 const struct file_operations xfs_file_operations = { 1398 1463 .llseek = xfs_file_llseek, 1399 - .read = do_sync_read, 1400 - .write = do_sync_write, 1401 - .aio_read = xfs_file_aio_read, 1402 - .aio_write = xfs_file_aio_write, 1464 + .read = new_sync_read, 1465 + .write = new_sync_write, 1466 + .read_iter = xfs_file_read_iter, 1467 + .write_iter = xfs_file_write_iter, 1403 1468 .splice_read = xfs_file_splice_read, 1404 - .splice_write = xfs_file_splice_write, 1469 + .splice_write = iter_file_splice_write, 1405 1470 .unlocked_ioctl = xfs_file_ioctl, 1406 1471 #ifdef CONFIG_COMPAT 1407 1472 .compat_ioctl = xfs_file_compat_ioctl,
-1
fs/xfs/xfs_trace.h
··· 1118 1118 DEFINE_RW_EVENT(xfs_file_buffered_write); 1119 1119 DEFINE_RW_EVENT(xfs_file_direct_write); 1120 1120 DEFINE_RW_EVENT(xfs_file_splice_read); 1121 - DEFINE_RW_EVENT(xfs_file_splice_write); 1122 1121 1123 1122 DECLARE_EVENT_CLASS(xfs_page_class, 1124 1123 TP_PROTO(struct inode *inode, struct page *page, unsigned long off,
+2 -2
include/linux/blk_types.h
··· 5 5 #ifndef __LINUX_BLK_TYPES_H 6 6 #define __LINUX_BLK_TYPES_H 7 7 8 - #ifdef CONFIG_BLOCK 9 - 10 8 #include <linux/types.h> 11 9 12 10 struct bio_set; ··· 25 27 unsigned int bv_len; 26 28 unsigned int bv_offset; 27 29 }; 30 + 31 + #ifdef CONFIG_BLOCK 28 32 29 33 struct bvec_iter { 30 34 sector_t bi_sector; /* device address in 512 byte
-2
include/linux/ceph/libceph.h
··· 222 222 extern void ceph_copy_from_page_vector(struct page **pages, 223 223 void *data, 224 224 loff_t off, size_t len); 225 - extern int ceph_copy_page_vector_to_user(struct page **pages, void __user *data, 226 - loff_t off, size_t len); 227 225 extern void ceph_zero_page_vector_range(int off, int len, struct page **pages); 228 226 229 227
+23 -18
include/linux/fs.h
··· 128 128 #define FMODE_ATOMIC_POS ((__force fmode_t)0x8000) 129 129 /* Write access to underlying fs */ 130 130 #define FMODE_WRITER ((__force fmode_t)0x10000) 131 + /* Has read method(s) */ 132 + #define FMODE_CAN_READ ((__force fmode_t)0x20000) 133 + /* Has write method(s) */ 134 + #define FMODE_CAN_WRITE ((__force fmode_t)0x40000) 131 135 132 136 /* File was opened by fanotify and shouldn't generate fanotify events */ 133 137 #define FMODE_NONOTIFY ((__force fmode_t)0x1000000) ··· 347 343 void (*invalidatepage) (struct page *, unsigned int, unsigned int); 348 344 int (*releasepage) (struct page *, gfp_t); 349 345 void (*freepage)(struct page *); 350 - ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, 351 - loff_t offset, unsigned long nr_segs); 346 + ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset); 352 347 int (*get_xip_mem)(struct address_space *, pgoff_t, int, 353 348 void **, unsigned long *); 354 349 /* ··· 1451 1448 #define HAVE_COMPAT_IOCTL 1 1452 1449 #define HAVE_UNLOCKED_IOCTL 1 1453 1450 1451 + struct iov_iter; 1452 + 1454 1453 struct file_operations { 1455 1454 struct module *owner; 1456 1455 loff_t (*llseek) (struct file *, loff_t, int); ··· 1460 1455 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 1461 1456 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 1462 1457 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); 1458 + ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 1459 + ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 1463 1460 int (*iterate) (struct file *, struct dir_context *); 1464 1461 unsigned int (*poll) (struct file *, struct poll_table_struct *); 1465 1462 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); ··· 2411 2404 extern int generic_file_remap_pages(struct vm_area_struct *, unsigned long addr, 2412 2405 unsigned long size, pgoff_t pgoff); 2413 2406 int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); 2414 - extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); 2415 - extern ssize_t __generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long); 2416 - extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); 2417 - extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, 2418 - unsigned long *, loff_t, size_t, size_t); 2407 + extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *); 2408 + extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *); 2409 + extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *); 2410 + extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *, loff_t); 2419 2411 extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t); 2420 2412 extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos); 2421 2413 extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos); 2422 - extern int generic_segment_checks(const struct iovec *iov, 2423 - unsigned long *nr_segs, size_t *count, int access_flags); 2414 + extern ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos); 2415 + extern ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos); 2424 2416 2425 2417 /* fs/block_dev.c */ 2426 - extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, 2427 - unsigned long nr_segs, loff_t pos); 2418 + extern ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from); 2428 2419 extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end, 2429 2420 int datasync); 2430 2421 extern void block_sync_page(struct page *page); ··· 2432 2427 struct pipe_inode_info *, size_t, unsigned int); 2433 2428 extern ssize_t default_file_splice_read(struct file *, loff_t *, 2434 2429 struct pipe_inode_info *, size_t, unsigned int); 2435 - extern ssize_t generic_file_splice_write(struct pipe_inode_info *, 2430 + extern ssize_t iter_file_splice_write(struct pipe_inode_info *, 2436 2431 struct file *, loff_t *, size_t, unsigned int); 2437 2432 extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, 2438 2433 struct file *out, loff_t *, size_t len, unsigned int flags); ··· 2482 2477 void dio_end_io(struct bio *bio, int error); 2483 2478 2484 2479 ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, 2485 - struct block_device *bdev, const struct iovec *iov, loff_t offset, 2486 - unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, 2480 + struct block_device *bdev, struct iov_iter *iter, loff_t offset, 2481 + get_block_t get_block, dio_iodone_t end_io, 2487 2482 dio_submit_t submit_io, int flags); 2488 2483 2489 2484 static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, 2490 - struct inode *inode, const struct iovec *iov, loff_t offset, 2491 - unsigned long nr_segs, get_block_t get_block) 2485 + struct inode *inode, struct iov_iter *iter, loff_t offset, 2486 + get_block_t get_block) 2492 2487 { 2493 - return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, 2494 - offset, nr_segs, get_block, NULL, NULL, 2488 + return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iter, 2489 + offset, get_block, NULL, NULL, 2495 2490 DIO_LOCKING | DIO_SKIP_HOLES); 2496 2491 } 2497 2492 #endif
+3 -4
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 - const struct iovec *iov, unsigned long nr_segs, 464 + struct iov_iter *iter, 466 465 loff_t pos, bool uio); 467 466 extern ssize_t nfs_file_direct_write(struct kiocb *iocb, 468 - const struct iovec *iov, unsigned long nr_segs, 467 + struct iov_iter *iter, 469 468 loff_t pos, bool uio); 470 469 471 470 /*
-10
include/linux/splice.h
··· 70 70 splice_actor *); 71 71 extern ssize_t __splice_from_pipe(struct pipe_inode_info *, 72 72 struct splice_desc *, splice_actor *); 73 - extern int splice_from_pipe_feed(struct pipe_inode_info *, struct splice_desc *, 74 - splice_actor *); 75 - extern int splice_from_pipe_next(struct pipe_inode_info *, 76 - struct splice_desc *); 77 - extern void splice_from_pipe_begin(struct splice_desc *); 78 - extern void splice_from_pipe_end(struct pipe_inode_info *, 79 - struct splice_desc *); 80 - extern int pipe_to_file(struct pipe_inode_info *, struct pipe_buffer *, 81 - struct splice_desc *); 82 - 83 73 extern ssize_t splice_to_pipe(struct pipe_inode_info *, 84 74 struct splice_pipe_desc *); 85 75 extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
+39 -16
include/linux/uio.h
··· 19 19 size_t iov_len; 20 20 }; 21 21 22 + enum { 23 + ITER_IOVEC = 0, 24 + ITER_KVEC = 2, 25 + ITER_BVEC = 4, 26 + }; 27 + 22 28 struct iov_iter { 23 - const struct iovec *iov; 24 - unsigned long nr_segs; 29 + int type; 25 30 size_t iov_offset; 26 31 size_t count; 32 + union { 33 + const struct iovec *iov; 34 + const struct bio_vec *bvec; 35 + }; 36 + unsigned long nr_segs; 27 37 }; 28 38 29 39 /* ··· 63 53 } 64 54 65 55 #define iov_for_each(iov, iter, start) \ 56 + if (!((start).type & ITER_BVEC)) \ 66 57 for (iter = (start); \ 67 58 (iter).count && \ 68 59 ((iov = iov_iter_iovec(&(iter))), 1); \ ··· 73 62 74 63 size_t iov_iter_copy_from_user_atomic(struct page *page, 75 64 struct iov_iter *i, unsigned long offset, size_t bytes); 76 - size_t iov_iter_copy_from_user(struct page *page, 77 - struct iov_iter *i, unsigned long offset, size_t bytes); 78 65 void iov_iter_advance(struct iov_iter *i, size_t bytes); 79 66 int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes); 80 67 size_t iov_iter_single_seg_count(const struct iov_iter *i); 81 68 size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, 82 69 struct iov_iter *i); 83 - 84 - static inline void iov_iter_init(struct iov_iter *i, 85 - const struct iovec *iov, unsigned long nr_segs, 86 - size_t count, size_t written) 87 - { 88 - i->iov = iov; 89 - i->nr_segs = nr_segs; 90 - i->iov_offset = 0; 91 - i->count = count + written; 92 - 93 - iov_iter_advance(i, written); 94 - } 70 + size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes, 71 + struct iov_iter *i); 72 + unsigned long iov_iter_alignment(const struct iov_iter *i); 73 + void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov, 74 + unsigned long nr_segs, size_t count); 75 + ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages, 76 + size_t maxsize, size_t *start); 77 + ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages, 78 + size_t maxsize, size_t *start); 79 + int iov_iter_npages(const struct iov_iter *i, int maxpages); 95 80 96 81 static inline size_t iov_iter_count(struct iov_iter *i) 97 82 { 98 83 return i->count; 99 84 } 100 85 86 + static inline void iov_iter_truncate(struct iov_iter *i, size_t count) 87 + { 88 + if (i->count > count) 89 + i->count = count; 90 + } 91 + 92 + /* 93 + * reexpand a previously truncated iterator; count must be no more than how much 94 + * we had shrunk it. 95 + */ 96 + static inline void iov_iter_reexpand(struct iov_iter *i, size_t count) 97 + { 98 + i->count = count; 99 + } 100 + 101 101 int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); 102 102 int memcpy_toiovec(struct iovec *iov, unsigned char *kdata, int len); 103 + 103 104 104 105 #endif
+42 -116
mm/filemap.c
··· 1665 1665 return written ? written : error; 1666 1666 } 1667 1667 1668 - /* 1669 - * Performs necessary checks before doing a write 1670 - * @iov: io vector request 1671 - * @nr_segs: number of segments in the iovec 1672 - * @count: number of bytes to write 1673 - * @access_flags: type of access: %VERIFY_READ or %VERIFY_WRITE 1674 - * 1675 - * Adjust number of segments and amount of bytes to write (nr_segs should be 1676 - * properly initialized first). Returns appropriate error code that caller 1677 - * should return or zero in case that write should be allowed. 1678 - */ 1679 - int generic_segment_checks(const struct iovec *iov, 1680 - unsigned long *nr_segs, size_t *count, int access_flags) 1681 - { 1682 - unsigned long seg; 1683 - size_t cnt = 0; 1684 - for (seg = 0; seg < *nr_segs; seg++) { 1685 - const struct iovec *iv = &iov[seg]; 1686 - 1687 - /* 1688 - * If any segment has a negative length, or the cumulative 1689 - * length ever wraps negative then return -EINVAL. 1690 - */ 1691 - cnt += iv->iov_len; 1692 - if (unlikely((ssize_t)(cnt|iv->iov_len) < 0)) 1693 - return -EINVAL; 1694 - if (access_ok(access_flags, iv->iov_base, iv->iov_len)) 1695 - continue; 1696 - if (seg == 0) 1697 - return -EFAULT; 1698 - *nr_segs = seg; 1699 - cnt -= iv->iov_len; /* This segment is no good */ 1700 - break; 1701 - } 1702 - *count = cnt; 1703 - return 0; 1704 - } 1705 - EXPORT_SYMBOL(generic_segment_checks); 1706 - 1707 1668 /** 1708 - * generic_file_aio_read - generic filesystem read routine 1669 + * generic_file_read_iter - generic filesystem read routine 1709 1670 * @iocb: kernel I/O control block 1710 - * @iov: io vector request 1711 - * @nr_segs: number of segments in the iovec 1712 - * @pos: current file position 1671 + * @iter: destination for the data read 1713 1672 * 1714 - * This is the "read()" routine for all filesystems 1673 + * This is the "read_iter()" routine for all filesystems 1715 1674 * that can use the page cache directly. 1716 1675 */ 1717 1676 ssize_t 1718 - generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, 1719 - unsigned long nr_segs, loff_t pos) 1677 + generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) 1720 1678 { 1721 - struct file *filp = iocb->ki_filp; 1722 - ssize_t retval; 1723 - size_t count; 1679 + struct file *file = iocb->ki_filp; 1680 + ssize_t retval = 0; 1724 1681 loff_t *ppos = &iocb->ki_pos; 1725 - struct iov_iter i; 1726 - 1727 - count = 0; 1728 - retval = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE); 1729 - if (retval) 1730 - return retval; 1731 - iov_iter_init(&i, iov, nr_segs, count, 0); 1682 + loff_t pos = *ppos; 1732 1683 1733 1684 /* coalesce the iovecs and go direct-to-BIO for O_DIRECT */ 1734 - if (filp->f_flags & O_DIRECT) { 1685 + if (file->f_flags & O_DIRECT) { 1686 + struct address_space *mapping = file->f_mapping; 1687 + struct inode *inode = mapping->host; 1688 + size_t count = iov_iter_count(iter); 1735 1689 loff_t size; 1736 - struct address_space *mapping; 1737 - struct inode *inode; 1738 1690 1739 - mapping = filp->f_mapping; 1740 - inode = mapping->host; 1741 1691 if (!count) 1742 1692 goto out; /* skip atime */ 1743 1693 size = i_size_read(inode); 1744 1694 retval = filemap_write_and_wait_range(mapping, pos, 1745 - pos + iov_length(iov, nr_segs) - 1); 1695 + pos + count - 1); 1746 1696 if (!retval) { 1747 - retval = mapping->a_ops->direct_IO(READ, iocb, 1748 - iov, pos, nr_segs); 1697 + struct iov_iter data = *iter; 1698 + retval = mapping->a_ops->direct_IO(READ, iocb, &data, pos); 1749 1699 } 1700 + 1750 1701 if (retval > 0) { 1751 1702 *ppos = pos + retval; 1752 - count -= retval; 1753 - /* 1754 - * If we did a short DIO read we need to skip the 1755 - * section of the iov that we've already read data into. 1756 - */ 1757 - iov_iter_advance(&i, retval); 1703 + iov_iter_advance(iter, retval); 1758 1704 } 1759 1705 1760 1706 /* ··· 1711 1765 * and return. Otherwise fallthrough to buffered io for 1712 1766 * the rest of the read. 1713 1767 */ 1714 - if (retval < 0 || !count || *ppos >= size) { 1715 - file_accessed(filp); 1768 + if (retval < 0 || !iov_iter_count(iter) || *ppos >= size) { 1769 + file_accessed(file); 1716 1770 goto out; 1717 1771 } 1718 1772 } 1719 1773 1720 - retval = do_generic_file_read(filp, ppos, &i, retval); 1774 + retval = do_generic_file_read(file, ppos, iter, retval); 1721 1775 out: 1722 1776 return retval; 1723 1777 } 1724 - EXPORT_SYMBOL(generic_file_aio_read); 1778 + EXPORT_SYMBOL(generic_file_read_iter); 1725 1779 1726 1780 #ifdef CONFIG_MMU 1727 1781 /** ··· 2332 2386 EXPORT_SYMBOL(pagecache_write_end); 2333 2387 2334 2388 ssize_t 2335 - generic_file_direct_write(struct kiocb *iocb, const struct iovec *iov, 2336 - unsigned long *nr_segs, loff_t pos, 2337 - size_t count, size_t ocount) 2389 + generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos) 2338 2390 { 2339 2391 struct file *file = iocb->ki_filp; 2340 2392 struct address_space *mapping = file->f_mapping; ··· 2340 2396 ssize_t written; 2341 2397 size_t write_len; 2342 2398 pgoff_t end; 2399 + struct iov_iter data; 2343 2400 2344 - if (count != ocount) 2345 - *nr_segs = iov_shorten((struct iovec *)iov, *nr_segs, count); 2346 - 2347 - write_len = iov_length(iov, *nr_segs); 2401 + write_len = iov_iter_count(from); 2348 2402 end = (pos + write_len - 1) >> PAGE_CACHE_SHIFT; 2349 2403 2350 2404 written = filemap_write_and_wait_range(mapping, pos, pos + write_len - 1); ··· 2369 2427 } 2370 2428 } 2371 2429 2372 - written = mapping->a_ops->direct_IO(WRITE, iocb, iov, pos, *nr_segs); 2430 + data = *from; 2431 + written = mapping->a_ops->direct_IO(WRITE, iocb, &data, pos); 2373 2432 2374 2433 /* 2375 2434 * Finally, try again to invalidate clean pages which might have been ··· 2387 2444 2388 2445 if (written > 0) { 2389 2446 pos += written; 2447 + iov_iter_advance(from, written); 2390 2448 if (pos > i_size_read(inode) && !S_ISBLK(inode->i_mode)) { 2391 2449 i_size_write(inode, pos); 2392 2450 mark_inode_dirty(inode); ··· 2512 2568 EXPORT_SYMBOL(generic_perform_write); 2513 2569 2514 2570 /** 2515 - * __generic_file_aio_write - write data to a file 2571 + * __generic_file_write_iter - write data to a file 2516 2572 * @iocb: IO state structure (file, offset, etc.) 2517 - * @iov: vector with data to write 2518 - * @nr_segs: number of segments in the vector 2573 + * @from: iov_iter with data to write 2519 2574 * 2520 2575 * This function does all the work needed for actually writing data to a 2521 2576 * file. It does all basic checks, removes SUID from the file, updates ··· 2528 2585 * A caller has to handle it. This is mainly due to the fact that we want to 2529 2586 * avoid syncing under i_mutex. 2530 2587 */ 2531 - ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 2532 - unsigned long nr_segs) 2588 + ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 2533 2589 { 2534 2590 struct file *file = iocb->ki_filp; 2535 2591 struct address_space * mapping = file->f_mapping; 2536 - size_t ocount; /* original count */ 2537 - size_t count; /* after file limit checks */ 2538 2592 struct inode *inode = mapping->host; 2539 2593 loff_t pos = iocb->ki_pos; 2540 2594 ssize_t written = 0; 2541 2595 ssize_t err; 2542 2596 ssize_t status; 2543 - struct iov_iter from; 2544 - 2545 - ocount = 0; 2546 - err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ); 2547 - if (err) 2548 - return err; 2549 - 2550 - count = ocount; 2597 + size_t count = iov_iter_count(from); 2551 2598 2552 2599 /* We can write back this queue in page reclaim */ 2553 2600 current->backing_dev_info = mapping->backing_dev_info; ··· 2548 2615 if (count == 0) 2549 2616 goto out; 2550 2617 2618 + iov_iter_truncate(from, count); 2619 + 2551 2620 err = file_remove_suid(file); 2552 2621 if (err) 2553 2622 goto out; ··· 2558 2623 if (err) 2559 2624 goto out; 2560 2625 2561 - iov_iter_init(&from, iov, nr_segs, count, 0); 2562 - 2563 2626 /* coalesce the iovecs and go direct-to-BIO for O_DIRECT */ 2564 2627 if (unlikely(file->f_flags & O_DIRECT)) { 2565 2628 loff_t endbyte; 2566 2629 2567 - written = generic_file_direct_write(iocb, iov, &from.nr_segs, pos, 2568 - count, ocount); 2630 + written = generic_file_direct_write(iocb, from, pos); 2569 2631 if (written < 0 || written == count) 2570 2632 goto out; 2571 - iov_iter_advance(&from, written); 2572 2633 2573 2634 /* 2574 2635 * direct-io write to a hole: fall through to buffered I/O ··· 2573 2642 pos += written; 2574 2643 count -= written; 2575 2644 2576 - status = generic_perform_write(file, &from, pos); 2645 + status = generic_perform_write(file, from, pos); 2577 2646 /* 2578 2647 * If generic_perform_write() returned a synchronous error 2579 2648 * then we want to return the number of bytes which were ··· 2605 2674 */ 2606 2675 } 2607 2676 } else { 2608 - written = generic_perform_write(file, &from, pos); 2677 + written = generic_perform_write(file, from, pos); 2609 2678 if (likely(written >= 0)) 2610 2679 iocb->ki_pos = pos + written; 2611 2680 } ··· 2613 2682 current->backing_dev_info = NULL; 2614 2683 return written ? written : err; 2615 2684 } 2616 - EXPORT_SYMBOL(__generic_file_aio_write); 2685 + EXPORT_SYMBOL(__generic_file_write_iter); 2617 2686 2618 2687 /** 2619 - * generic_file_aio_write - write data to a file 2688 + * generic_file_write_iter - write data to a file 2620 2689 * @iocb: IO state structure 2621 - * @iov: vector with data to write 2622 - * @nr_segs: number of segments in the vector 2623 - * @pos: position in file where to write 2690 + * @from: iov_iter with data to write 2624 2691 * 2625 - * This is a wrapper around __generic_file_aio_write() to be used by most 2692 + * This is a wrapper around __generic_file_write_iter() to be used by most 2626 2693 * filesystems. It takes care of syncing the file in case of O_SYNC file 2627 2694 * and acquires i_mutex as needed. 2628 2695 */ 2629 - ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 2630 - unsigned long nr_segs, loff_t pos) 2696 + ssize_t generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 2631 2697 { 2632 2698 struct file *file = iocb->ki_filp; 2633 2699 struct inode *inode = file->f_mapping->host; 2634 2700 ssize_t ret; 2635 2701 2636 - BUG_ON(iocb->ki_pos != pos); 2637 - 2638 2702 mutex_lock(&inode->i_mutex); 2639 - ret = __generic_file_aio_write(iocb, iov, nr_segs); 2703 + ret = __generic_file_write_iter(iocb, from); 2640 2704 mutex_unlock(&inode->i_mutex); 2641 2705 2642 2706 if (ret > 0) { ··· 2643 2717 } 2644 2718 return ret; 2645 2719 } 2646 - EXPORT_SYMBOL(generic_file_aio_write); 2720 + EXPORT_SYMBOL(generic_file_write_iter); 2647 2721 2648 2722 /** 2649 2723 * try_to_release_page() - release old fs-specific metadata on a page
+557 -38
mm/iov_iter.c
··· 1 1 #include <linux/export.h> 2 2 #include <linux/uio.h> 3 3 #include <linux/pagemap.h> 4 + #include <linux/slab.h> 5 + #include <linux/vmalloc.h> 4 6 5 - size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, 7 + static size_t copy_page_to_iter_iovec(struct page *page, size_t offset, size_t bytes, 6 8 struct iov_iter *i) 7 9 { 8 10 size_t skip, copy, left, wanted; ··· 74 72 } 75 73 kunmap(page); 76 74 done: 75 + if (skip == iov->iov_len) { 76 + iov++; 77 + skip = 0; 78 + } 77 79 i->count -= wanted - bytes; 78 80 i->nr_segs -= iov - i->iov; 79 81 i->iov = iov; 80 82 i->iov_offset = skip; 81 83 return wanted - bytes; 82 84 } 83 - EXPORT_SYMBOL(copy_page_to_iter); 85 + 86 + static size_t copy_page_from_iter_iovec(struct page *page, size_t offset, size_t bytes, 87 + struct iov_iter *i) 88 + { 89 + size_t skip, copy, left, wanted; 90 + const struct iovec *iov; 91 + char __user *buf; 92 + void *kaddr, *to; 93 + 94 + if (unlikely(bytes > i->count)) 95 + bytes = i->count; 96 + 97 + if (unlikely(!bytes)) 98 + return 0; 99 + 100 + wanted = bytes; 101 + iov = i->iov; 102 + skip = i->iov_offset; 103 + buf = iov->iov_base + skip; 104 + copy = min(bytes, iov->iov_len - skip); 105 + 106 + if (!fault_in_pages_readable(buf, copy)) { 107 + kaddr = kmap_atomic(page); 108 + to = kaddr + offset; 109 + 110 + /* first chunk, usually the only one */ 111 + left = __copy_from_user_inatomic(to, buf, copy); 112 + copy -= left; 113 + skip += copy; 114 + to += copy; 115 + bytes -= copy; 116 + 117 + while (unlikely(!left && bytes)) { 118 + iov++; 119 + buf = iov->iov_base; 120 + copy = min(bytes, iov->iov_len); 121 + left = __copy_from_user_inatomic(to, buf, copy); 122 + copy -= left; 123 + skip = copy; 124 + to += copy; 125 + bytes -= copy; 126 + } 127 + if (likely(!bytes)) { 128 + kunmap_atomic(kaddr); 129 + goto done; 130 + } 131 + offset = to - kaddr; 132 + buf += copy; 133 + kunmap_atomic(kaddr); 134 + copy = min(bytes, iov->iov_len - skip); 135 + } 136 + /* Too bad - revert to non-atomic kmap */ 137 + kaddr = kmap(page); 138 + to = kaddr + offset; 139 + left = __copy_from_user(to, buf, copy); 140 + copy -= left; 141 + skip += copy; 142 + to += copy; 143 + bytes -= copy; 144 + while (unlikely(!left && bytes)) { 145 + iov++; 146 + buf = iov->iov_base; 147 + copy = min(bytes, iov->iov_len); 148 + left = __copy_from_user(to, buf, copy); 149 + copy -= left; 150 + skip = copy; 151 + to += copy; 152 + bytes -= copy; 153 + } 154 + kunmap(page); 155 + done: 156 + if (skip == iov->iov_len) { 157 + iov++; 158 + skip = 0; 159 + } 160 + i->count -= wanted - bytes; 161 + i->nr_segs -= iov - i->iov; 162 + i->iov = iov; 163 + i->iov_offset = skip; 164 + return wanted - bytes; 165 + } 84 166 85 167 static size_t __iovec_copy_from_user_inatomic(char *vaddr, 86 168 const struct iovec *iov, size_t base, size_t bytes) ··· 193 107 * were successfully copied. If a fault is encountered then return the number of 194 108 * bytes which were copied. 195 109 */ 196 - size_t iov_iter_copy_from_user_atomic(struct page *page, 110 + static size_t copy_from_user_atomic_iovec(struct page *page, 197 111 struct iov_iter *i, unsigned long offset, size_t bytes) 198 112 { 199 113 char *kaddr; ··· 213 127 214 128 return copied; 215 129 } 216 - EXPORT_SYMBOL(iov_iter_copy_from_user_atomic); 217 130 218 - /* 219 - * This has the same sideeffects and return value as 220 - * iov_iter_copy_from_user_atomic(). 221 - * The difference is that it attempts to resolve faults. 222 - * Page must not be locked. 223 - */ 224 - size_t iov_iter_copy_from_user(struct page *page, 225 - struct iov_iter *i, unsigned long offset, size_t bytes) 226 - { 227 - char *kaddr; 228 - size_t copied; 229 - 230 - kaddr = kmap(page); 231 - if (likely(i->nr_segs == 1)) { 232 - int left; 233 - char __user *buf = i->iov->iov_base + i->iov_offset; 234 - left = __copy_from_user(kaddr + offset, buf, bytes); 235 - copied = bytes - left; 236 - } else { 237 - copied = __iovec_copy_from_user_inatomic(kaddr + offset, 238 - i->iov, i->iov_offset, bytes); 239 - } 240 - kunmap(page); 241 - return copied; 242 - } 243 - EXPORT_SYMBOL(iov_iter_copy_from_user); 244 - 245 - void iov_iter_advance(struct iov_iter *i, size_t bytes) 131 + static void advance_iovec(struct iov_iter *i, size_t bytes) 246 132 { 247 133 BUG_ON(i->count < bytes); 248 134 ··· 249 191 i->nr_segs = nr_segs; 250 192 } 251 193 } 252 - EXPORT_SYMBOL(iov_iter_advance); 253 194 254 195 /* 255 196 * Fault in the first iovec of the given iov_iter, to a maximum length ··· 261 204 */ 262 205 int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes) 263 206 { 264 - char __user *buf = i->iov->iov_base + i->iov_offset; 265 - bytes = min(bytes, i->iov->iov_len - i->iov_offset); 266 - return fault_in_pages_readable(buf, bytes); 207 + if (!(i->type & ITER_BVEC)) { 208 + char __user *buf = i->iov->iov_base + i->iov_offset; 209 + bytes = min(bytes, i->iov->iov_len - i->iov_offset); 210 + return fault_in_pages_readable(buf, bytes); 211 + } 212 + return 0; 267 213 } 268 214 EXPORT_SYMBOL(iov_iter_fault_in_readable); 215 + 216 + static unsigned long alignment_iovec(const struct iov_iter *i) 217 + { 218 + const struct iovec *iov = i->iov; 219 + unsigned long res; 220 + size_t size = i->count; 221 + size_t n; 222 + 223 + if (!size) 224 + return 0; 225 + 226 + res = (unsigned long)iov->iov_base + i->iov_offset; 227 + n = iov->iov_len - i->iov_offset; 228 + if (n >= size) 229 + return res | size; 230 + size -= n; 231 + res |= n; 232 + while (size > (++iov)->iov_len) { 233 + res |= (unsigned long)iov->iov_base | iov->iov_len; 234 + size -= iov->iov_len; 235 + } 236 + res |= (unsigned long)iov->iov_base | size; 237 + return res; 238 + } 239 + 240 + void iov_iter_init(struct iov_iter *i, int direction, 241 + const struct iovec *iov, unsigned long nr_segs, 242 + size_t count) 243 + { 244 + /* It will get better. Eventually... */ 245 + if (segment_eq(get_fs(), KERNEL_DS)) 246 + direction |= ITER_KVEC; 247 + i->type = direction; 248 + i->iov = iov; 249 + i->nr_segs = nr_segs; 250 + i->iov_offset = 0; 251 + i->count = count; 252 + } 253 + EXPORT_SYMBOL(iov_iter_init); 254 + 255 + static ssize_t get_pages_iovec(struct iov_iter *i, 256 + struct page **pages, size_t maxsize, 257 + size_t *start) 258 + { 259 + size_t offset = i->iov_offset; 260 + const struct iovec *iov = i->iov; 261 + size_t len; 262 + unsigned long addr; 263 + int n; 264 + int res; 265 + 266 + len = iov->iov_len - offset; 267 + if (len > i->count) 268 + len = i->count; 269 + if (len > maxsize) 270 + len = maxsize; 271 + addr = (unsigned long)iov->iov_base + offset; 272 + len += *start = addr & (PAGE_SIZE - 1); 273 + addr &= ~(PAGE_SIZE - 1); 274 + n = (len + PAGE_SIZE - 1) / PAGE_SIZE; 275 + res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, pages); 276 + if (unlikely(res < 0)) 277 + return res; 278 + return (res == n ? len : res * PAGE_SIZE) - *start; 279 + } 280 + 281 + static ssize_t get_pages_alloc_iovec(struct iov_iter *i, 282 + struct page ***pages, size_t maxsize, 283 + size_t *start) 284 + { 285 + size_t offset = i->iov_offset; 286 + const struct iovec *iov = i->iov; 287 + size_t len; 288 + unsigned long addr; 289 + void *p; 290 + int n; 291 + int res; 292 + 293 + len = iov->iov_len - offset; 294 + if (len > i->count) 295 + len = i->count; 296 + if (len > maxsize) 297 + len = maxsize; 298 + addr = (unsigned long)iov->iov_base + offset; 299 + len += *start = addr & (PAGE_SIZE - 1); 300 + addr &= ~(PAGE_SIZE - 1); 301 + n = (len + PAGE_SIZE - 1) / PAGE_SIZE; 302 + 303 + p = kmalloc(n * sizeof(struct page *), GFP_KERNEL); 304 + if (!p) 305 + p = vmalloc(n * sizeof(struct page *)); 306 + if (!p) 307 + return -ENOMEM; 308 + 309 + res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, p); 310 + if (unlikely(res < 0)) { 311 + kvfree(p); 312 + return res; 313 + } 314 + *pages = p; 315 + return (res == n ? len : res * PAGE_SIZE) - *start; 316 + } 317 + 318 + static int iov_iter_npages_iovec(const struct iov_iter *i, int maxpages) 319 + { 320 + size_t offset = i->iov_offset; 321 + size_t size = i->count; 322 + const struct iovec *iov = i->iov; 323 + int npages = 0; 324 + int n; 325 + 326 + for (n = 0; size && n < i->nr_segs; n++, iov++) { 327 + unsigned long addr = (unsigned long)iov->iov_base + offset; 328 + size_t len = iov->iov_len - offset; 329 + offset = 0; 330 + if (unlikely(!len)) /* empty segment */ 331 + continue; 332 + if (len > size) 333 + len = size; 334 + npages += (addr + len + PAGE_SIZE - 1) / PAGE_SIZE 335 + - addr / PAGE_SIZE; 336 + if (npages >= maxpages) /* don't bother going further */ 337 + return maxpages; 338 + size -= len; 339 + offset = 0; 340 + } 341 + return min(npages, maxpages); 342 + } 343 + 344 + static void memcpy_from_page(char *to, struct page *page, size_t offset, size_t len) 345 + { 346 + char *from = kmap_atomic(page); 347 + memcpy(to, from + offset, len); 348 + kunmap_atomic(from); 349 + } 350 + 351 + static void memcpy_to_page(struct page *page, size_t offset, char *from, size_t len) 352 + { 353 + char *to = kmap_atomic(page); 354 + memcpy(to + offset, from, len); 355 + kunmap_atomic(to); 356 + } 357 + 358 + static size_t copy_page_to_iter_bvec(struct page *page, size_t offset, size_t bytes, 359 + struct iov_iter *i) 360 + { 361 + size_t skip, copy, wanted; 362 + const struct bio_vec *bvec; 363 + void *kaddr, *from; 364 + 365 + if (unlikely(bytes > i->count)) 366 + bytes = i->count; 367 + 368 + if (unlikely(!bytes)) 369 + return 0; 370 + 371 + wanted = bytes; 372 + bvec = i->bvec; 373 + skip = i->iov_offset; 374 + copy = min_t(size_t, bytes, bvec->bv_len - skip); 375 + 376 + kaddr = kmap_atomic(page); 377 + from = kaddr + offset; 378 + memcpy_to_page(bvec->bv_page, skip + bvec->bv_offset, from, copy); 379 + skip += copy; 380 + from += copy; 381 + bytes -= copy; 382 + while (bytes) { 383 + bvec++; 384 + copy = min(bytes, (size_t)bvec->bv_len); 385 + memcpy_to_page(bvec->bv_page, bvec->bv_offset, from, copy); 386 + skip = copy; 387 + from += copy; 388 + bytes -= copy; 389 + } 390 + kunmap_atomic(kaddr); 391 + if (skip == bvec->bv_len) { 392 + bvec++; 393 + skip = 0; 394 + } 395 + i->count -= wanted - bytes; 396 + i->nr_segs -= bvec - i->bvec; 397 + i->bvec = bvec; 398 + i->iov_offset = skip; 399 + return wanted - bytes; 400 + } 401 + 402 + static size_t copy_page_from_iter_bvec(struct page *page, size_t offset, size_t bytes, 403 + struct iov_iter *i) 404 + { 405 + size_t skip, copy, wanted; 406 + const struct bio_vec *bvec; 407 + void *kaddr, *to; 408 + 409 + if (unlikely(bytes > i->count)) 410 + bytes = i->count; 411 + 412 + if (unlikely(!bytes)) 413 + return 0; 414 + 415 + wanted = bytes; 416 + bvec = i->bvec; 417 + skip = i->iov_offset; 418 + 419 + kaddr = kmap_atomic(page); 420 + 421 + to = kaddr + offset; 422 + 423 + copy = min(bytes, bvec->bv_len - skip); 424 + 425 + memcpy_from_page(to, bvec->bv_page, bvec->bv_offset + skip, copy); 426 + 427 + to += copy; 428 + skip += copy; 429 + bytes -= copy; 430 + 431 + while (bytes) { 432 + bvec++; 433 + copy = min(bytes, (size_t)bvec->bv_len); 434 + memcpy_from_page(to, bvec->bv_page, bvec->bv_offset, copy); 435 + skip = copy; 436 + to += copy; 437 + bytes -= copy; 438 + } 439 + kunmap_atomic(kaddr); 440 + if (skip == bvec->bv_len) { 441 + bvec++; 442 + skip = 0; 443 + } 444 + i->count -= wanted; 445 + i->nr_segs -= bvec - i->bvec; 446 + i->bvec = bvec; 447 + i->iov_offset = skip; 448 + return wanted; 449 + } 450 + 451 + static size_t copy_from_user_bvec(struct page *page, 452 + struct iov_iter *i, unsigned long offset, size_t bytes) 453 + { 454 + char *kaddr; 455 + size_t left; 456 + const struct bio_vec *bvec; 457 + size_t base = i->iov_offset; 458 + 459 + kaddr = kmap_atomic(page); 460 + for (left = bytes, bvec = i->bvec; left; bvec++, base = 0) { 461 + size_t copy = min(left, bvec->bv_len - base); 462 + if (!bvec->bv_len) 463 + continue; 464 + memcpy_from_page(kaddr + offset, bvec->bv_page, 465 + bvec->bv_offset + base, copy); 466 + offset += copy; 467 + left -= copy; 468 + } 469 + kunmap_atomic(kaddr); 470 + return bytes; 471 + } 472 + 473 + static void advance_bvec(struct iov_iter *i, size_t bytes) 474 + { 475 + BUG_ON(i->count < bytes); 476 + 477 + if (likely(i->nr_segs == 1)) { 478 + i->iov_offset += bytes; 479 + i->count -= bytes; 480 + } else { 481 + const struct bio_vec *bvec = i->bvec; 482 + size_t base = i->iov_offset; 483 + unsigned long nr_segs = i->nr_segs; 484 + 485 + /* 486 + * The !iov->iov_len check ensures we skip over unlikely 487 + * zero-length segments (without overruning the iovec). 488 + */ 489 + while (bytes || unlikely(i->count && !bvec->bv_len)) { 490 + int copy; 491 + 492 + copy = min(bytes, bvec->bv_len - base); 493 + BUG_ON(!i->count || i->count < copy); 494 + i->count -= copy; 495 + bytes -= copy; 496 + base += copy; 497 + if (bvec->bv_len == base) { 498 + bvec++; 499 + nr_segs--; 500 + base = 0; 501 + } 502 + } 503 + i->bvec = bvec; 504 + i->iov_offset = base; 505 + i->nr_segs = nr_segs; 506 + } 507 + } 508 + 509 + static unsigned long alignment_bvec(const struct iov_iter *i) 510 + { 511 + const struct bio_vec *bvec = i->bvec; 512 + unsigned long res; 513 + size_t size = i->count; 514 + size_t n; 515 + 516 + if (!size) 517 + return 0; 518 + 519 + res = bvec->bv_offset + i->iov_offset; 520 + n = bvec->bv_len - i->iov_offset; 521 + if (n >= size) 522 + return res | size; 523 + size -= n; 524 + res |= n; 525 + while (size > (++bvec)->bv_len) { 526 + res |= bvec->bv_offset | bvec->bv_len; 527 + size -= bvec->bv_len; 528 + } 529 + res |= bvec->bv_offset | size; 530 + return res; 531 + } 532 + 533 + static ssize_t get_pages_bvec(struct iov_iter *i, 534 + struct page **pages, size_t maxsize, 535 + size_t *start) 536 + { 537 + const struct bio_vec *bvec = i->bvec; 538 + size_t len = bvec->bv_len - i->iov_offset; 539 + if (len > i->count) 540 + len = i->count; 541 + if (len > maxsize) 542 + len = maxsize; 543 + *start = bvec->bv_offset + i->iov_offset; 544 + 545 + get_page(*pages = bvec->bv_page); 546 + 547 + return len; 548 + } 549 + 550 + static ssize_t get_pages_alloc_bvec(struct iov_iter *i, 551 + struct page ***pages, size_t maxsize, 552 + size_t *start) 553 + { 554 + const struct bio_vec *bvec = i->bvec; 555 + size_t len = bvec->bv_len - i->iov_offset; 556 + if (len > i->count) 557 + len = i->count; 558 + if (len > maxsize) 559 + len = maxsize; 560 + *start = bvec->bv_offset + i->iov_offset; 561 + 562 + *pages = kmalloc(sizeof(struct page *), GFP_KERNEL); 563 + if (!*pages) 564 + return -ENOMEM; 565 + 566 + get_page(**pages = bvec->bv_page); 567 + 568 + return len; 569 + } 570 + 571 + static int iov_iter_npages_bvec(const struct iov_iter *i, int maxpages) 572 + { 573 + size_t offset = i->iov_offset; 574 + size_t size = i->count; 575 + const struct bio_vec *bvec = i->bvec; 576 + int npages = 0; 577 + int n; 578 + 579 + for (n = 0; size && n < i->nr_segs; n++, bvec++) { 580 + size_t len = bvec->bv_len - offset; 581 + offset = 0; 582 + if (unlikely(!len)) /* empty segment */ 583 + continue; 584 + if (len > size) 585 + len = size; 586 + npages++; 587 + if (npages >= maxpages) /* don't bother going further */ 588 + return maxpages; 589 + size -= len; 590 + offset = 0; 591 + } 592 + return min(npages, maxpages); 593 + } 594 + 595 + size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, 596 + struct iov_iter *i) 597 + { 598 + if (i->type & ITER_BVEC) 599 + return copy_page_to_iter_bvec(page, offset, bytes, i); 600 + else 601 + return copy_page_to_iter_iovec(page, offset, bytes, i); 602 + } 603 + EXPORT_SYMBOL(copy_page_to_iter); 604 + 605 + size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes, 606 + struct iov_iter *i) 607 + { 608 + if (i->type & ITER_BVEC) 609 + return copy_page_from_iter_bvec(page, offset, bytes, i); 610 + else 611 + return copy_page_from_iter_iovec(page, offset, bytes, i); 612 + } 613 + EXPORT_SYMBOL(copy_page_from_iter); 614 + 615 + size_t iov_iter_copy_from_user_atomic(struct page *page, 616 + struct iov_iter *i, unsigned long offset, size_t bytes) 617 + { 618 + if (i->type & ITER_BVEC) 619 + return copy_from_user_bvec(page, i, offset, bytes); 620 + else 621 + return copy_from_user_atomic_iovec(page, i, offset, bytes); 622 + } 623 + EXPORT_SYMBOL(iov_iter_copy_from_user_atomic); 624 + 625 + void iov_iter_advance(struct iov_iter *i, size_t size) 626 + { 627 + if (i->type & ITER_BVEC) 628 + advance_bvec(i, size); 629 + else 630 + advance_iovec(i, size); 631 + } 632 + EXPORT_SYMBOL(iov_iter_advance); 269 633 270 634 /* 271 635 * Return the count of just the current iov_iter segment. 272 636 */ 273 637 size_t iov_iter_single_seg_count(const struct iov_iter *i) 274 638 { 275 - const struct iovec *iov = i->iov; 276 639 if (i->nr_segs == 1) 277 640 return i->count; 641 + else if (i->type & ITER_BVEC) 642 + return min(i->count, i->iov->iov_len - i->iov_offset); 278 643 else 279 - return min(i->count, iov->iov_len - i->iov_offset); 644 + return min(i->count, i->bvec->bv_len - i->iov_offset); 280 645 } 281 646 EXPORT_SYMBOL(iov_iter_single_seg_count); 647 + 648 + unsigned long iov_iter_alignment(const struct iov_iter *i) 649 + { 650 + if (i->type & ITER_BVEC) 651 + return alignment_bvec(i); 652 + else 653 + return alignment_iovec(i); 654 + } 655 + EXPORT_SYMBOL(iov_iter_alignment); 656 + 657 + ssize_t iov_iter_get_pages(struct iov_iter *i, 658 + struct page **pages, size_t maxsize, 659 + size_t *start) 660 + { 661 + if (i->type & ITER_BVEC) 662 + return get_pages_bvec(i, pages, maxsize, start); 663 + else 664 + return get_pages_iovec(i, pages, maxsize, start); 665 + } 666 + EXPORT_SYMBOL(iov_iter_get_pages); 667 + 668 + ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, 669 + struct page ***pages, size_t maxsize, 670 + size_t *start) 671 + { 672 + if (i->type & ITER_BVEC) 673 + return get_pages_alloc_bvec(i, pages, maxsize, start); 674 + else 675 + return get_pages_alloc_iovec(i, pages, maxsize, start); 676 + } 677 + EXPORT_SYMBOL(iov_iter_get_pages_alloc); 678 + 679 + int iov_iter_npages(const struct iov_iter *i, int maxpages) 680 + { 681 + if (i->type & ITER_BVEC) 682 + return iov_iter_npages_bvec(i, maxpages); 683 + else 684 + return iov_iter_npages_iovec(i, maxpages); 685 + } 686 + EXPORT_SYMBOL(iov_iter_npages);
+14 -7
mm/page_io.c
··· 264 264 struct kiocb kiocb; 265 265 struct file *swap_file = sis->swap_file; 266 266 struct address_space *mapping = swap_file->f_mapping; 267 - struct iovec iov = { 268 - .iov_base = kmap(page), 269 - .iov_len = PAGE_SIZE, 267 + struct bio_vec bv = { 268 + .bv_page = page, 269 + .bv_len = PAGE_SIZE, 270 + .bv_offset = 0 271 + }; 272 + struct iov_iter from = { 273 + .type = ITER_BVEC | WRITE, 274 + .count = PAGE_SIZE, 275 + .iov_offset = 0, 276 + .nr_segs = 1, 277 + .bvec = &bv 270 278 }; 271 279 272 280 init_sync_kiocb(&kiocb, swap_file); ··· 283 275 284 276 set_page_writeback(page); 285 277 unlock_page(page); 286 - ret = mapping->a_ops->direct_IO(KERNEL_WRITE, 287 - &kiocb, &iov, 288 - kiocb.ki_pos, 1); 289 - kunmap(page); 278 + ret = mapping->a_ops->direct_IO(ITER_BVEC | WRITE, 279 + &kiocb, &from, 280 + kiocb.ki_pos); 290 281 if (ret == PAGE_SIZE) { 291 282 count_vm_event(PSWPOUT); 292 283 ret = 0;
+3 -7
mm/process_vm_access.c
··· 46 46 copy = len; 47 47 48 48 if (vm_write) { 49 - if (copy > iov_iter_count(iter)) 50 - copy = iov_iter_count(iter); 51 - copied = iov_iter_copy_from_user(page, iter, 52 - offset, copy); 53 - iov_iter_advance(iter, copied); 49 + copied = copy_page_from_iter(page, offset, copy, iter); 54 50 set_page_dirty_lock(page); 55 51 } else { 56 52 copied = copy_page_to_iter(page, offset, copy, iter); ··· 274 278 if (rc <= 0) 275 279 goto free_iovecs; 276 280 277 - iov_iter_init(&iter, iov_l, liovcnt, rc, 0); 281 + iov_iter_init(&iter, vm_write ? WRITE : READ, iov_l, liovcnt, rc); 278 282 279 283 rc = rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, UIO_FASTIOV, 280 284 iovstack_r, &iov_r); ··· 337 341 &iov_l); 338 342 if (rc <= 0) 339 343 goto free_iovecs; 340 - iov_iter_init(&iter, iov_l, liovcnt, rc, 0); 344 + iov_iter_init(&iter, vm_write ? WRITE : READ, iov_l, liovcnt, rc); 341 345 rc = compat_rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, 342 346 UIO_FASTIOV, iovstack_r, 343 347 &iov_r);
+9 -17
mm/shmem.c
··· 1406 1406 return copied; 1407 1407 } 1408 1408 1409 - static ssize_t shmem_file_aio_read(struct kiocb *iocb, 1410 - const struct iovec *iov, unsigned long nr_segs, loff_t pos) 1409 + static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) 1411 1410 { 1412 1411 struct file *file = iocb->ki_filp; 1413 1412 struct inode *inode = file_inode(file); ··· 1415 1416 unsigned long offset; 1416 1417 enum sgp_type sgp = SGP_READ; 1417 1418 int error = 0; 1418 - ssize_t retval; 1419 - size_t count; 1419 + ssize_t retval = 0; 1420 1420 loff_t *ppos = &iocb->ki_pos; 1421 - struct iov_iter iter; 1422 - 1423 - retval = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE); 1424 - if (retval) 1425 - return retval; 1426 - iov_iter_init(&iter, iov, nr_segs, count, 0); 1427 1421 1428 1422 /* 1429 1423 * Might this read be for a stacking filesystem? Then when reading ··· 1492 1500 * Ok, we have the page, and it's up-to-date, so 1493 1501 * now we can copy it to user space... 1494 1502 */ 1495 - ret = copy_page_to_iter(page, offset, nr, &iter); 1503 + ret = copy_page_to_iter(page, offset, nr, to); 1496 1504 retval += ret; 1497 1505 offset += ret; 1498 1506 index += offset >> PAGE_CACHE_SHIFT; 1499 1507 offset &= ~PAGE_CACHE_MASK; 1500 1508 1501 1509 page_cache_release(page); 1502 - if (!iov_iter_count(&iter)) 1510 + if (!iov_iter_count(to)) 1503 1511 break; 1504 1512 if (ret < nr) { 1505 1513 error = -EFAULT; ··· 2621 2629 .mmap = shmem_mmap, 2622 2630 #ifdef CONFIG_TMPFS 2623 2631 .llseek = shmem_file_llseek, 2624 - .read = do_sync_read, 2625 - .write = do_sync_write, 2626 - .aio_read = shmem_file_aio_read, 2627 - .aio_write = generic_file_aio_write, 2632 + .read = new_sync_read, 2633 + .write = new_sync_write, 2634 + .read_iter = shmem_file_read_iter, 2635 + .write_iter = generic_file_write_iter, 2628 2636 .fsync = noop_fsync, 2629 2637 .splice_read = shmem_file_splice_read, 2630 - .splice_write = generic_file_splice_write, 2638 + .splice_write = iter_file_splice_write, 2631 2639 .fallocate = shmem_fallocate, 2632 2640 #endif 2633 2641 };
+1 -1
mm/vmscan.c
··· 464 464 * stalls if we need to run get_block(). We could test 465 465 * PagePrivate for that. 466 466 * 467 - * If this process is currently in __generic_file_aio_write() against 467 + * If this process is currently in __generic_file_write_iter() against 468 468 * this page's queue, we can perform writeback even if that 469 469 * will block. 470 470 *
+4 -31
net/ceph/pagevec.c
··· 53 53 set_page_dirty_lock(pages[i]); 54 54 put_page(pages[i]); 55 55 } 56 - kfree(pages); 56 + if (is_vmalloc_addr(pages)) 57 + vfree(pages); 58 + else 59 + kfree(pages); 57 60 } 58 61 EXPORT_SYMBOL(ceph_put_page_vector); 59 62 ··· 166 163 } 167 164 } 168 165 EXPORT_SYMBOL(ceph_copy_from_page_vector); 169 - 170 - /* 171 - * copy user data from a page vector into a user pointer 172 - */ 173 - int ceph_copy_page_vector_to_user(struct page **pages, 174 - void __user *data, 175 - loff_t off, size_t len) 176 - { 177 - int i = 0; 178 - int po = off & ~PAGE_CACHE_MASK; 179 - int left = len; 180 - int l, bad; 181 - 182 - while (left > 0) { 183 - l = min_t(int, left, PAGE_CACHE_SIZE-po); 184 - bad = copy_to_user(data, page_address(pages[i]) + po, l); 185 - if (bad == l) 186 - return -EFAULT; 187 - data += l - bad; 188 - left -= l - bad; 189 - if (po) { 190 - po += l - bad; 191 - if (po == PAGE_CACHE_SIZE) 192 - po = 0; 193 - } 194 - i++; 195 - } 196 - return len; 197 - } 198 - EXPORT_SYMBOL(ceph_copy_page_vector_to_user); 199 166 200 167 /* 201 168 * Zero an extent within a page vector. Offset is relative to the