]> git.ipfire.org Git - people/ms/linux.git/blobdiff - fs/nfsd/nfsfh.c
Merge branch 'for-6.0/dax' into libnvdimm-fixes
[people/ms/linux.git] / fs / nfsd / nfsfh.c
index c29baa03dfafd672c1d3f7c7f4a6b47a1d1649a8..a5b71526cee0fa779b1302b1a61b9e8c1b8b65aa 100644 (file)
@@ -331,8 +331,6 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, int access)
        struct dentry   *dentry;
        __be32          error;
 
-       dprintk("nfsd: fh_verify(%s)\n", SVCFH_fmt(fhp));
-
        if (!fhp->fh_dentry) {
                error = nfsd_set_fh_dentry(rqstp, fhp);
                if (error)
@@ -340,6 +338,9 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, int access)
        }
        dentry = fhp->fh_dentry;
        exp = fhp->fh_export;
+
+       trace_nfsd_fh_verify(rqstp, fhp, type, access);
+
        /*
         * We still have to do all these permission checks, even when
         * fh_dentry is already set:
@@ -548,7 +549,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry,
        if (ref_fh == fhp)
                fh_put(ref_fh);
 
-       if (fhp->fh_locked || fhp->fh_dentry) {
+       if (fhp->fh_dentry) {
                printk(KERN_ERR "fh_compose: fh %pd2 not initialized!\n",
                       dentry);
        }
@@ -671,6 +672,25 @@ void fh_fill_post_attrs(struct svc_fh *fhp)
                        nfsd4_change_attribute(&fhp->fh_post_attr, inode);
 }
 
+/**
+ * fh_fill_both_attrs - Fill pre-op and post-op attributes
+ * @fhp: file handle to be updated
+ *
+ * This is used when the directory wasn't changed, but wcc attributes
+ * are needed anyway.
+ */
+void fh_fill_both_attrs(struct svc_fh *fhp)
+{
+       fh_fill_post_attrs(fhp);
+       if (!fhp->fh_post_saved)
+               return;
+       fhp->fh_pre_change = fhp->fh_post_change;
+       fhp->fh_pre_mtime = fhp->fh_post_attr.mtime;
+       fhp->fh_pre_ctime = fhp->fh_post_attr.ctime;
+       fhp->fh_pre_size = fhp->fh_post_attr.size;
+       fhp->fh_pre_saved = true;
+}
+
 /*
  * Release a file handle.
  */
@@ -680,7 +700,6 @@ fh_put(struct svc_fh *fhp)
        struct dentry * dentry = fhp->fh_dentry;
        struct svc_export * exp = fhp->fh_export;
        if (dentry) {
-               fh_unlock(fhp);
                fhp->fh_dentry = NULL;
                dput(dentry);
                fh_clear_pre_post_attrs(fhp);