static ssize_t zpl_aio_write(struct kiocb *kiocb, const struct iovec *iovp, unsigned long nr_segs, loff_t pos) { return (zpl_iter_write_common(kiocb, iovp, nr_segs, kiocb->ki_nbytes, UIO_USERSPACE, 0)); }
static ssize_t zpl_iter_write(struct kiocb *kiocb, struct iov_iter *from) { ssize_t ret; uio_seg_t seg = UIO_USERSPACE; if (from->type & ITER_KVEC) seg = UIO_SYSSPACE; if (from->type & ITER_BVEC) seg = UIO_BVEC; ret = zpl_iter_write_common(kiocb, from->iov, from->nr_segs, iov_iter_count(from), seg, from->iov_offset); if (ret > 0) iov_iter_advance(from, ret); return (ret); }
static ssize_t zpl_iter_write(struct kiocb *kiocb, struct iov_iter *from) { size_t count; ssize_t ret; uio_seg_t seg = UIO_USERSPACE; #ifndef HAVE_GENERIC_WRITE_CHECKS_KIOCB struct file *file = kiocb->ki_filp; struct address_space *mapping = file->f_mapping; struct inode *ip = mapping->host; int isblk = S_ISBLK(ip->i_mode); count = iov_iter_count(from); ret = generic_write_checks(file, &kiocb->ki_pos, &count, isblk); if (ret) return (ret); #else /* * XXX - ideally this check should be in the same lock region with * write operations, so that there's no TOCTTOU race when doing * append and someone else grow the file. */ ret = generic_write_checks(kiocb, from); if (ret <= 0) return (ret); count = ret; #endif if (from->type & ITER_KVEC) seg = UIO_SYSSPACE; if (from->type & ITER_BVEC) seg = UIO_BVEC; ret = zpl_iter_write_common(kiocb, from->iov, from->nr_segs, count, seg, from->iov_offset); if (ret > 0) iov_iter_advance(from, ret); return (ret); }
static ssize_t zpl_aio_write(struct kiocb *kiocb, const struct iovec *iovp, unsigned long nr_segs, loff_t pos) { struct file *file = kiocb->ki_filp; struct address_space *mapping = file->f_mapping; struct inode *ip = mapping->host; int isblk = S_ISBLK(ip->i_mode); size_t count; ssize_t ret; ret = generic_segment_checks(iovp, &nr_segs, &count, VERIFY_READ); if (ret) return (ret); ret = generic_write_checks(file, &pos, &count, isblk); if (ret) return (ret); return (zpl_iter_write_common(kiocb, iovp, nr_segs, count, UIO_USERSPACE, 0)); }
static ssize_t zpl_iter_write(struct kiocb *kiocb, struct iov_iter *from) { return (zpl_iter_write_common(kiocb, from->iov, from->nr_segs, iov_iter_count(from))); }