Skip to content

Commit c711a6b

Browse files
author
Al Viro
committed
9p: fold v9fs_file_write_internal() into the caller
Signed-off-by: Al Viro <[email protected]>
1 parent 371098c commit c711a6b

File tree

2 files changed

+30
-49
lines changed

2 files changed

+30
-49
lines changed

fs/9p/v9fs_vfs.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,6 @@ void v9fs_blank_wstat(struct p9_wstat *wstat);
7474
int v9fs_vfs_setattr_dotl(struct dentry *, struct iattr *);
7575
int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end,
7676
int datasync);
77-
ssize_t v9fs_file_write_internal(struct inode *, struct p9_fid *,
78-
const char __user *, size_t, loff_t *, int);
7977
int v9fs_refresh_inode(struct p9_fid *fid, struct inode *inode);
8078
int v9fs_refresh_inode_dotl(struct p9_fid *fid, struct inode *inode);
8179
static inline void v9fs_invalidate_inode_attr(struct inode *inode)

fs/9p/vfs_file.c

Lines changed: 30 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -453,40 +453,6 @@ v9fs_file_read(struct file *filp, char __user *udata, size_t count,
453453
return ret;
454454
}
455455

456-
ssize_t
457-
v9fs_file_write_internal(struct inode *inode, struct p9_fid *fid,
458-
const char __user *data, size_t count,
459-
loff_t *offset, int invalidate)
460-
{
461-
loff_t origin = *offset;
462-
struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count};
463-
struct iov_iter from;
464-
int total, err = 0;
465-
466-
p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n",
467-
data, (int)count, (int)*offset);
468-
469-
iov_iter_init(&from, WRITE, &iov, 1, count);
470-
471-
total = p9_client_write(fid, origin, &from, &err);
472-
if (invalidate && (total > 0)) {
473-
loff_t i_size;
474-
unsigned long pg_start, pg_end;
475-
pg_start = origin >> PAGE_CACHE_SHIFT;
476-
pg_end = (origin + total - 1) >> PAGE_CACHE_SHIFT;
477-
if (inode->i_mapping && inode->i_mapping->nrpages)
478-
invalidate_inode_pages2_range(inode->i_mapping,
479-
pg_start, pg_end);
480-
*offset += total;
481-
i_size = i_size_read(inode);
482-
if (*offset > i_size) {
483-
inode_add_bytes(inode, *offset - i_size);
484-
i_size_write(inode, *offset);
485-
}
486-
}
487-
return total ? total : err;
488-
}
489-
490456
/**
491457
* v9fs_file_write - write to a file
492458
* @filp: file pointer to write
@@ -501,27 +467,44 @@ v9fs_file_write(struct file *filp, const char __user * data,
501467
{
502468
ssize_t retval = 0;
503469
loff_t origin = *offset;
470+
struct iovec iov = {.iov_base = (void __user *)data, .iov_len = count};
471+
struct iov_iter from;
472+
int err = 0;
504473

474+
iov_iter_init(&from, WRITE, &iov, 1, count);
505475

506476
retval = generic_write_checks(filp, &origin, &count, 0);
507477
if (retval)
508-
goto out;
478+
return retval;
479+
480+
iov_iter_truncate(&from, count);
481+
482+
p9_debug(P9_DEBUG_VFS, "data %p count %d offset %x\n",
483+
data, (int)count, (int)*offset);
509484

510-
retval = -EINVAL;
511-
if ((ssize_t) count < 0)
512-
goto out;
513485
retval = 0;
514486
if (!count)
515-
goto out;
487+
return 0;
516488

517-
retval = v9fs_file_write_internal(file_inode(filp),
518-
filp->private_data,
519-
data, count, &origin, 1);
520-
/* update offset on successful write */
521-
if (retval > 0)
522-
*offset = origin;
523-
out:
524-
return retval;
489+
retval = p9_client_write(filp->private_data, origin, &from, &err);
490+
if (retval > 0) {
491+
struct inode *inode = file_inode(filp);
492+
loff_t i_size;
493+
unsigned long pg_start, pg_end;
494+
pg_start = origin >> PAGE_CACHE_SHIFT;
495+
pg_end = (origin + retval - 1) >> PAGE_CACHE_SHIFT;
496+
if (inode->i_mapping && inode->i_mapping->nrpages)
497+
invalidate_inode_pages2_range(inode->i_mapping,
498+
pg_start, pg_end);
499+
*offset += retval;
500+
i_size = i_size_read(inode);
501+
if (*offset > i_size) {
502+
inode_add_bytes(inode, *offset - i_size);
503+
i_size_write(inode, *offset);
504+
}
505+
return retval;
506+
}
507+
return err;
525508
}
526509

527510

0 commit comments

Comments
 (0)