Loading fs/9p/v9fs_vfs.h +0 −2 Original line number Diff line number Diff line Loading @@ -74,8 +74,6 @@ void v9fs_blank_wstat(struct p9_wstat *wstat); int v9fs_vfs_setattr_dotl(struct dentry *, struct iattr *); int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end, int datasync); ssize_t v9fs_file_write_internal(struct inode *, struct p9_fid *, const char __user *, size_t, loff_t *, int); int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode); int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode); static inline void v9fs_invalidate_inode_attr(struct inode *inode) Loading fs/9p/vfs_file.c +30 −47 Original line number Diff line number Diff line Loading @@ -453,40 +453,6 @@ v9fs_file_read(struct file *filp, char __user *udata, size_t count, return ret; } ssize_t v9fs_file_write_internal(struct inode *inode, struct p9_fid *fid, const char __user *data, size_t count, loff_t *offset, int invalidate) { loff_t origin = *offset; struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count}; struct iov_iter from; int total, err = 0; p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n", data, (int)count, (int)*offset); iov_iter_init(&from, WRITE, &iov, 1, count); total = p9_client_write(fid, origin, &from, &err); if (invalidate && (total > 0)) { loff_t i_size; unsigned long pg_start, pg_end; pg_start = origin >> PAGE_CACHE_SHIFT; pg_end = (origin + total - 1) >> PAGE_CACHE_SHIFT; if (inode->i_mapping && inode->i_mapping->nrpages) invalidate_inode_pages2_range(inode->i_mapping, pg_start, pg_end); *offset += total; i_size = i_size_read(inode); if (*offset > i_size) { inode_add_bytes(inode, *offset - i_size); i_size_write(inode, *offset); } } return total ? total : err; } /** * v9fs_file_write - write to a file * @filp: file pointer to write Loading @@ -501,28 +467,45 @@ v9fs_file_write(struct file *filp, const char __user * data, { ssize_t retval = 0; loff_t origin = *offset; struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count}; struct iov_iter from; int err = 0; iov_iter_init(&from, WRITE, &iov, 1, count); retval = generic_write_checks(filp, &origin, &count, 0); if (retval) goto out; return retval; iov_iter_truncate(&from, count); p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n", data, (int)count, (int)*offset); retval = -EINVAL; if ((ssize_t) count < 0) goto out; retval = 0; if (!count) goto out; return 0; retval = v9fs_file_write_internal(file_inode(filp), filp->private_data, data, count, &origin, 1); /* update offset on successful write */ if (retval > 0) *offset = origin; out: retval = p9_client_write(filp->private_data, origin, &from, &err); if (retval > 0) { struct inode *inode = file_inode(filp); loff_t i_size; unsigned long pg_start, pg_end; pg_start = origin >> PAGE_CACHE_SHIFT; pg_end = (origin + retval - 1) >> PAGE_CACHE_SHIFT; if (inode->i_mapping && inode->i_mapping->nrpages) invalidate_inode_pages2_range(inode->i_mapping, pg_start, pg_end); *offset += retval; i_size = i_size_read(inode); if (*offset > i_size) { inode_add_bytes(inode, *offset - i_size); i_size_write(inode, *offset); } return retval; } return err; } static int v9fs_file_fsync(struct file *filp, loff_t start, loff_t end, Loading Loading
fs/9p/v9fs_vfs.h +0 −2 Original line number Diff line number Diff line Loading @@ -74,8 +74,6 @@ void v9fs_blank_wstat(struct p9_wstat *wstat); int v9fs_vfs_setattr_dotl(struct dentry *, struct iattr *); int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end, int datasync); ssize_t v9fs_file_write_internal(struct inode *, struct p9_fid *, const char __user *, size_t, loff_t *, int); int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode); int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode); static inline void v9fs_invalidate_inode_attr(struct inode *inode) Loading
fs/9p/vfs_file.c +30 −47 Original line number Diff line number Diff line Loading @@ -453,40 +453,6 @@ v9fs_file_read(struct file *filp, char __user *udata, size_t count, return ret; } ssize_t v9fs_file_write_internal(struct inode *inode, struct p9_fid *fid, const char __user *data, size_t count, loff_t *offset, int invalidate) { loff_t origin = *offset; struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count}; struct iov_iter from; int total, err = 0; p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n", data, (int)count, (int)*offset); iov_iter_init(&from, WRITE, &iov, 1, count); total = p9_client_write(fid, origin, &from, &err); if (invalidate && (total > 0)) { loff_t i_size; unsigned long pg_start, pg_end; pg_start = origin >> PAGE_CACHE_SHIFT; pg_end = (origin + total - 1) >> PAGE_CACHE_SHIFT; if (inode->i_mapping && inode->i_mapping->nrpages) invalidate_inode_pages2_range(inode->i_mapping, pg_start, pg_end); *offset += total; i_size = i_size_read(inode); if (*offset > i_size) { inode_add_bytes(inode, *offset - i_size); i_size_write(inode, *offset); } } return total ? total : err; } /** * v9fs_file_write - write to a file * @filp: file pointer to write Loading @@ -501,28 +467,45 @@ v9fs_file_write(struct file *filp, const char __user * data, { ssize_t retval = 0; loff_t origin = *offset; struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count}; struct iov_iter from; int err = 0; iov_iter_init(&from, WRITE, &iov, 1, count); retval = generic_write_checks(filp, &origin, &count, 0); if (retval) goto out; return retval; iov_iter_truncate(&from, count); p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n", data, (int)count, (int)*offset); retval = -EINVAL; if ((ssize_t) count < 0) goto out; retval = 0; if (!count) goto out; return 0; retval = v9fs_file_write_internal(file_inode(filp), filp->private_data, data, count, &origin, 1); /* update offset on successful write */ if (retval > 0) *offset = origin; out: retval = p9_client_write(filp->private_data, origin, &from, &err); if (retval > 0) { struct inode *inode = file_inode(filp); loff_t i_size; unsigned long pg_start, pg_end; pg_start = origin >> PAGE_CACHE_SHIFT; pg_end = (origin + retval - 1) >> PAGE_CACHE_SHIFT; if (inode->i_mapping && inode->i_mapping->nrpages) invalidate_inode_pages2_range(inode->i_mapping, pg_start, pg_end); *offset += retval; i_size = i_size_read(inode); if (*offset > i_size) { inode_add_bytes(inode, *offset - i_size); i_size_write(inode, *offset); } return retval; } return err; } static int v9fs_file_fsync(struct file *filp, loff_t start, loff_t end, Loading