|
@@ -760,8 +760,6 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
{
|
|
|
__be32 status;
|
|
|
|
|
|
- /* no need to check permission - this will be done in nfsd_read() */
|
|
|
-
|
|
|
read->rd_filp = NULL;
|
|
|
if (read->rd_offset >= OFFSET_MAX)
|
|
|
return nfserr_inval;
|
|
@@ -778,9 +776,9 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
clear_bit(RQ_SPLICE_OK, &rqstp->rq_flags);
|
|
|
|
|
|
/* check stateid */
|
|
|
- if ((status = nfs4_preprocess_stateid_op(SVC_NET(rqstp),
|
|
|
- cstate, &read->rd_stateid,
|
|
|
- RD_STATE, &read->rd_filp))) {
|
|
|
+ status = nfs4_preprocess_stateid_op(rqstp, cstate, &read->rd_stateid,
|
|
|
+ RD_STATE, &read->rd_filp, &read->rd_tmp_file);
|
|
|
+ if (status) {
|
|
|
dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
|
|
|
goto out;
|
|
|
}
|
|
@@ -924,8 +922,8 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
int err;
|
|
|
|
|
|
if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
|
|
|
- status = nfs4_preprocess_stateid_op(SVC_NET(rqstp), cstate,
|
|
|
- &setattr->sa_stateid, WR_STATE, NULL);
|
|
|
+ status = nfs4_preprocess_stateid_op(rqstp, cstate,
|
|
|
+ &setattr->sa_stateid, WR_STATE, NULL, NULL);
|
|
|
if (status) {
|
|
|
dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n");
|
|
|
return status;
|
|
@@ -986,13 +984,11 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
unsigned long cnt;
|
|
|
int nvecs;
|
|
|
|
|
|
- /* no need to check permission - this will be done in nfsd_write() */
|
|
|
-
|
|
|
if (write->wr_offset >= OFFSET_MAX)
|
|
|
return nfserr_inval;
|
|
|
|
|
|
- status = nfs4_preprocess_stateid_op(SVC_NET(rqstp),
|
|
|
- cstate, stateid, WR_STATE, &filp);
|
|
|
+ status = nfs4_preprocess_stateid_op(rqstp, cstate, stateid, WR_STATE,
|
|
|
+ &filp, NULL);
|
|
|
if (status) {
|
|
|
dprintk("NFSD: nfsd4_write: couldn't process stateid!\n");
|
|
|
return status;
|
|
@@ -1005,11 +1001,10 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
nvecs = fill_in_write_vector(rqstp->rq_vec, write);
|
|
|
WARN_ON_ONCE(nvecs > ARRAY_SIZE(rqstp->rq_vec));
|
|
|
|
|
|
- status = nfsd_write(rqstp, &cstate->current_fh, filp,
|
|
|
- write->wr_offset, rqstp->rq_vec, nvecs,
|
|
|
- &cnt, &write->wr_how_written);
|
|
|
- if (filp)
|
|
|
- fput(filp);
|
|
|
+ status = nfsd_vfs_write(rqstp, &cstate->current_fh, filp,
|
|
|
+ write->wr_offset, rqstp->rq_vec, nvecs, &cnt,
|
|
|
+ &write->wr_how_written);
|
|
|
+ fput(filp);
|
|
|
|
|
|
write->wr_bytes_written = cnt;
|
|
|
|
|
@@ -1023,15 +1018,13 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
__be32 status = nfserr_notsupp;
|
|
|
struct file *file;
|
|
|
|
|
|
- status = nfs4_preprocess_stateid_op(SVC_NET(rqstp), cstate,
|
|
|
+ status = nfs4_preprocess_stateid_op(rqstp, cstate,
|
|
|
&fallocate->falloc_stateid,
|
|
|
- WR_STATE, &file);
|
|
|
+ WR_STATE, &file, NULL);
|
|
|
if (status != nfs_ok) {
|
|
|
dprintk("NFSD: nfsd4_fallocate: couldn't process stateid!\n");
|
|
|
return status;
|
|
|
}
|
|
|
- if (!file)
|
|
|
- return nfserr_bad_stateid;
|
|
|
|
|
|
status = nfsd4_vfs_fallocate(rqstp, &cstate->current_fh, file,
|
|
|
fallocate->falloc_offset,
|
|
@@ -1064,15 +1057,13 @@ nfsd4_seek(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
__be32 status;
|
|
|
struct file *file;
|
|
|
|
|
|
- status = nfs4_preprocess_stateid_op(SVC_NET(rqstp), cstate,
|
|
|
+ status = nfs4_preprocess_stateid_op(rqstp, cstate,
|
|
|
&seek->seek_stateid,
|
|
|
- RD_STATE, &file);
|
|
|
+ RD_STATE, &file, NULL);
|
|
|
if (status) {
|
|
|
dprintk("NFSD: nfsd4_seek: couldn't process stateid!\n");
|
|
|
return status;
|
|
|
}
|
|
|
- if (!file)
|
|
|
- return nfserr_bad_stateid;
|
|
|
|
|
|
switch (seek->seek_whence) {
|
|
|
case NFS4_CONTENT_DATA:
|