From 93e3bdd18ec7ec793a17d0bc9005f0b8285abcdc Mon Sep 17 00:00:00 2001 From: Harsh Prateek Bora Date: Tue, 3 Aug 2010 11:55:40 +0000 Subject: [PATCH] --- yaml --- r: 218936 b: refs/heads/master c: 3834b12a18d51d6c535ea52e16355d75806ffe38 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/9p/vfs_file.c | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 1b71c0bff55e..908ad18629df 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 57ee047b4d6bb4bcc74be0329441d1b242e57e61 +refs/heads/master: 3834b12a18d51d6c535ea52e16355d75806ffe38 diff --git a/trunk/fs/9p/vfs_file.c b/trunk/fs/9p/vfs_file.c index e97c92bd6f16..89c44e92022c 100644 --- a/trunk/fs/9p/vfs_file.c +++ b/trunk/fs/9p/vfs_file.c @@ -219,7 +219,9 @@ static ssize_t v9fs_file_write(struct file *filp, const char __user * data, size_t count, loff_t * offset) { - int n, rsize, total = 0; + ssize_t retval; + size_t total = 0; + int n, rsize; struct p9_fid *fid; struct p9_client *clnt; struct inode *inode = filp->f_path.dentry->d_inode; @@ -234,6 +236,17 @@ v9fs_file_write(struct file *filp, const char __user * data, rsize = fid->iounit ? fid->iounit : clnt->msize - P9_IOHDRSZ; + retval = generic_write_checks(filp, &origin, &count, 0); + if (retval) + goto out; + + retval = -EINVAL; + if ((ssize_t) count < 0) + goto out; + retval = 0; + if (!count) + goto out; + do { if (count < rsize) rsize = count; @@ -258,9 +271,11 @@ v9fs_file_write(struct file *filp, const char __user * data, } if (n < 0) - return n; - - return total; + retval = n; + else + retval = total; +out: + return retval; } static int v9fs_file_fsync(struct file *filp, int datasync)