RETURN_STATUS(nfserr_io);
        nfserr = nfsd_write(rqstp, &resp->fh, argp->offset,
                            rqstp->rq_vec, nvecs, &cnt,
-                           resp->committed);
+                           resp->committed, resp->verf);
        resp->count = cnt;
        RETURN_STATUS(nfserr);
 }
 
 nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p)
 {
        struct nfsd3_writeres *resp = rqstp->rq_resp;
-       struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
-       __be32 verf[2];
 
        p = encode_wcc_data(rqstp, p, &resp->fh);
        if (resp->status == 0) {
                *p++ = htonl(resp->count);
                *p++ = htonl(resp->committed);
-               /* unique identifier, y2038 overflow can be ignored */
-               nfsd_copy_boot_verifier(verf, nn);
-               *p++ = verf[0];
-               *p++ = verf[1];
+               *p++ = resp->verf[0];
+               *p++ = resp->verf[1];
        }
        return xdr_ressize_check(rqstp, p);
 }
 
        }
 
        write->wr_how_written = write->wr_stable_how;
-       gen_boot_verifier(&write->wr_verifier, SVC_NET(rqstp));
 
        nvecs = svc_fill_write_vector(rqstp, write->wr_pagelist,
                                      &write->wr_head, write->wr_buflen);
 
        status = nfsd_vfs_write(rqstp, &cstate->current_fh, nf,
                                write->wr_offset, rqstp->rq_vec, nvecs, &cnt,
-                               write->wr_how_written);
+                               write->wr_how_written,
+                               (__be32 *)write->wr_verifier.data);
        nfsd_file_put(nf);
 
        write->wr_bytes_written = cnt;
 
                return nfserr_io;
        nfserr = nfsd_write(rqstp, fh_copy(&resp->fh, &argp->fh),
                            argp->offset, rqstp->rq_vec, nvecs,
-                           &cnt, NFS_DATA_SYNC);
+                           &cnt, NFS_DATA_SYNC, NULL);
        return nfsd_return_attrs(nfserr, resp);
 }
 
 
 __be32
 nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfsd_file *nf,
                                loff_t offset, struct kvec *vec, int vlen,
-                               unsigned long *cnt, int stable)
+                               unsigned long *cnt, int stable,
+                               __be32 *verf)
 {
        struct file             *file = nf->nf_file;
        struct svc_export       *exp;
                up_write(&nf->nf_rwsem);
        } else {
                down_read(&nf->nf_rwsem);
+               if (verf)
+                       nfsd_copy_boot_verifier(verf,
+                                       net_generic(SVC_NET(rqstp),
+                                       nfsd_net_id));
                host_err = vfs_iter_write(file, &iter, &pos, flags);
                up_read(&nf->nf_rwsem);
        }
  */
 __be32
 nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
-          struct kvec *vec, int vlen, unsigned long *cnt, int stable)
+          struct kvec *vec, int vlen, unsigned long *cnt, int stable,
+          __be32 *verf)
 {
        struct nfsd_file *nf;
        __be32 err;
                goto out;
 
        err = nfsd_vfs_write(rqstp, fhp, nf, offset, vec,
-                       vlen, cnt, stable);
+                       vlen, cnt, stable, verf);
        nfsd_file_put(nf);
 out:
        trace_nfsd_write_done(rqstp, fhp, offset, *cnt);
 
                                loff_t, struct kvec *, int, unsigned long *,
                                u32 *eof);
 __be32                 nfsd_write(struct svc_rqst *, struct svc_fh *, loff_t,
-                               struct kvec *, int, unsigned long *, int);
+                               struct kvec *, int, unsigned long *,
+                               int stable, __be32 *verf);
 __be32         nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp,
                                struct nfsd_file *nf, loff_t offset,
                                struct kvec *vec, int vlen, unsigned long *cnt,
-                               int stable);
+                               int stable, __be32 *verf);
 __be32         nfsd_readlink(struct svc_rqst *, struct svc_fh *,
                                char *, int *);
 __be32         nfsd_symlink(struct svc_rqst *, struct svc_fh *,
 
        struct svc_fh           fh;
        unsigned long           count;
        int                     committed;
+       __be32                  verf[2];
 };
 
 struct nfsd3_renameres {