Merge tag 'for-linus-4.6-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / fs / nfsd / vfs.c
index d41c149fae75e8c6b88c1295cfdb61c7f10950fe..d40010e4f1a97e6591914d6815d924ce6bd0964b 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "nfsd.h"
 #include "vfs.h"
+#include "trace.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_FILEOP
 
@@ -492,9 +493,9 @@ __be32 nfsd4_set_nfs4_label(struct svc_rqst *rqstp, struct svc_fh *fhp,
 
        dentry = fhp->fh_dentry;
 
-       mutex_lock(&d_inode(dentry)->i_mutex);
+       inode_lock(d_inode(dentry));
        host_error = security_inode_setsecctx(dentry, label->data, label->len);
-       mutex_unlock(&d_inode(dentry)->i_mutex);
+       inode_unlock(d_inode(dentry));
        return nfserrno(host_error);
 }
 #else
@@ -869,7 +870,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
 
        oldfs = get_fs();
        set_fs(KERNEL_DS);
-       host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset);
+       host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset, 0);
        set_fs(oldfs);
        return nfsd_finish_read(file, count, host_err);
 }
@@ -956,7 +957,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
 
        /* Write the data. */
        oldfs = get_fs(); set_fs(KERNEL_DS);
-       host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos);
+       host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos, 0);
        set_fs(oldfs);
        if (host_err < 0)
                goto out_nfserr;
@@ -997,16 +998,23 @@ __be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
        struct raparms  *ra;
        __be32 err;
 
+       trace_read_start(rqstp, fhp, offset, vlen);
        err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file);
        if (err)
                return err;
 
        ra = nfsd_init_raparms(file);
+
+       trace_read_opened(rqstp, fhp, offset, vlen);
        err = nfsd_vfs_read(rqstp, file, offset, vec, vlen, count);
+       trace_read_io_done(rqstp, fhp, offset, vlen);
+
        if (ra)
                nfsd_put_raparams(file, ra);
        fput(file);
 
+       trace_read_done(rqstp, fhp, offset, vlen);
+
        return err;
 }
 
@@ -1022,24 +1030,31 @@ nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
 {
        __be32                  err = 0;
 
+       trace_write_start(rqstp, fhp, offset, vlen);
+
        if (file) {
                err = nfsd_permission(rqstp, fhp->fh_export, fhp->fh_dentry,
                                NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE);
                if (err)
                        goto out;
+               trace_write_opened(rqstp, fhp, offset, vlen);
                err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen, cnt,
                                stablep);
+               trace_write_io_done(rqstp, fhp, offset, vlen);
        } else {
                err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_WRITE, &file);
                if (err)
                        goto out;
 
+               trace_write_opened(rqstp, fhp, offset, vlen);
                if (cnt)
                        err = nfsd_vfs_write(rqstp, fhp, file, offset, vec, vlen,
                                             cnt, stablep);
+               trace_write_io_done(rqstp, fhp, offset, vlen);
                fput(file);
        }
 out:
+       trace_write_done(rqstp, fhp, offset, vlen);
        return err;
 }
 
This page took 0.048089 seconds and 5 git commands to generate.