Loading arch/s390/hypfs/inode.c +24 −27 Original line number Diff line number Diff line Loading @@ -144,36 +144,32 @@ static int hypfs_open(struct inode *inode, struct file *filp) return nonseekable_open(inode, filp); } static ssize_t hypfs_aio_read(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t offset) static ssize_t hypfs_read_iter(struct kiocb *iocb, struct iov_iter *to) { char *data; ssize_t ret; struct file *filp = iocb->ki_filp; /* XXX: temporary */ char __user *buf = iov[0].iov_base; size_t count = iov[0].iov_len; if (nr_segs != 1) return -EINVAL; data = filp->private_data; ret = simple_read_from_buffer(buf, count, &offset, data, strlen(data)); if (ret <= 0) return ret; iocb->ki_pos += ret; file_accessed(filp); struct file *file = iocb->ki_filp; char *data = file->private_data; size_t available = strlen(data); loff_t pos = iocb->ki_pos; size_t count; return ret; if (pos < 0) return -EINVAL; if (pos >= available || !iov_iter_count(to)) return 0; count = copy_to_iter(data + pos, available - pos, to); if (!count) return -EFAULT; iocb->ki_pos = pos + count; file_accessed(file); return count; } static ssize_t hypfs_aio_write(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t offset) static ssize_t hypfs_write_iter(struct kiocb *iocb, struct iov_iter *from) { int rc; struct super_block *sb = file_inode(iocb->ki_filp)->i_sb; struct hypfs_sb_info *fs_info = sb->s_fs_info; size_t count = iov_length(iov, nr_segs); size_t count = iov_iter_count(from); /* * Currently we only allow one update per second for two reasons: Loading Loading @@ -202,6 +198,7 @@ static ssize_t hypfs_aio_write(struct kiocb *iocb, const struct iovec *iov, } hypfs_update_update(sb); rc = count; iov_iter_advance(from, count); out: mutex_unlock(&fs_info->lock); return rc; Loading Loading @@ -440,10 +437,10 @@ struct dentry *hypfs_create_str(struct dentry *dir, static const struct file_operations hypfs_file_ops = { .open = hypfs_open, .release = hypfs_release, .read = do_sync_read, .write = do_sync_write, .aio_read = hypfs_aio_read, .aio_write = hypfs_aio_write, .read = new_sync_read, .write = new_sync_write, .read_iter = hypfs_read_iter, .write_iter = hypfs_write_iter, .llseek = no_llseek, }; Loading Loading
arch/s390/hypfs/inode.c +24 −27 Original line number Diff line number Diff line Loading @@ -144,36 +144,32 @@ static int hypfs_open(struct inode *inode, struct file *filp) return nonseekable_open(inode, filp); } static ssize_t hypfs_aio_read(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t offset) static ssize_t hypfs_read_iter(struct kiocb *iocb, struct iov_iter *to) { char *data; ssize_t ret; struct file *filp = iocb->ki_filp; /* XXX: temporary */ char __user *buf = iov[0].iov_base; size_t count = iov[0].iov_len; if (nr_segs != 1) return -EINVAL; data = filp->private_data; ret = simple_read_from_buffer(buf, count, &offset, data, strlen(data)); if (ret <= 0) return ret; iocb->ki_pos += ret; file_accessed(filp); struct file *file = iocb->ki_filp; char *data = file->private_data; size_t available = strlen(data); loff_t pos = iocb->ki_pos; size_t count; return ret; if (pos < 0) return -EINVAL; if (pos >= available || !iov_iter_count(to)) return 0; count = copy_to_iter(data + pos, available - pos, to); if (!count) return -EFAULT; iocb->ki_pos = pos + count; file_accessed(file); return count; } static ssize_t hypfs_aio_write(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t offset) static ssize_t hypfs_write_iter(struct kiocb *iocb, struct iov_iter *from) { int rc; struct super_block *sb = file_inode(iocb->ki_filp)->i_sb; struct hypfs_sb_info *fs_info = sb->s_fs_info; size_t count = iov_length(iov, nr_segs); size_t count = iov_iter_count(from); /* * Currently we only allow one update per second for two reasons: Loading Loading @@ -202,6 +198,7 @@ static ssize_t hypfs_aio_write(struct kiocb *iocb, const struct iovec *iov, } hypfs_update_update(sb); rc = count; iov_iter_advance(from, count); out: mutex_unlock(&fs_info->lock); return rc; Loading Loading @@ -440,10 +437,10 @@ struct dentry *hypfs_create_str(struct dentry *dir, static const struct file_operations hypfs_file_ops = { .open = hypfs_open, .release = hypfs_release, .read = do_sync_read, .write = do_sync_write, .aio_read = hypfs_aio_read, .aio_write = hypfs_aio_write, .read = new_sync_read, .write = new_sync_write, .read_iter = hypfs_read_iter, .write_iter = hypfs_write_iter, .llseek = no_llseek, }; Loading