|
@@ -960,7 +960,7 @@ static void kill_suid(struct dentry *dentry)
|
|
|
static __be32
|
|
|
nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
loff_t offset, struct kvec *vec, int vlen,
|
|
|
- unsigned long cnt, int *stablep)
|
|
|
+ unsigned long *cnt, int *stablep)
|
|
|
{
|
|
|
struct svc_export *exp;
|
|
|
struct dentry *dentry;
|
|
@@ -974,7 +974,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
err = nfserr_perm;
|
|
|
|
|
|
if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
|
|
|
- (!lock_may_write(file->f_path.dentry->d_inode, offset, cnt)))
|
|
|
+ (!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt)))
|
|
|
goto out;
|
|
|
#endif
|
|
|
|
|
@@ -1006,7 +1006,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset);
|
|
|
set_fs(oldfs);
|
|
|
if (host_err >= 0) {
|
|
|
- nfsdstats.io_write += cnt;
|
|
|
+ nfsdstats.io_write += host_err;
|
|
|
fsnotify_modify(file->f_path.dentry);
|
|
|
}
|
|
|
|
|
@@ -1051,9 +1051,10 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
}
|
|
|
|
|
|
dprintk("nfsd: write complete host_err=%d\n", host_err);
|
|
|
- if (host_err >= 0)
|
|
|
+ if (host_err >= 0) {
|
|
|
err = 0;
|
|
|
- else
|
|
|
+ *cnt = host_err;
|
|
|
+ } else
|
|
|
err = nfserrno(host_err);
|
|
|
out:
|
|
|
return err;
|
|
@@ -1095,7 +1096,7 @@ out:
|
|
|
*/
|
|
|
__be32
|
|
|
nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
|
|
- loff_t offset, struct kvec *vec, int vlen, unsigned long cnt,
|
|
|
+ loff_t offset, struct kvec *vec, int vlen, unsigned long *cnt,
|
|
|
int *stablep)
|
|
|
{
|
|
|
__be32 err = 0;
|