|
@@ -123,10 +123,8 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
|
|
|
fh_dup2(current_fh, &resfh);
|
|
|
|
|
|
/* set reply cache */
|
|
|
- open->op_stateowner->so_replay.rp_openfh_len = resfh.fh_handle.fh_size;
|
|
|
- memcpy(open->op_stateowner->so_replay.rp_openfh,
|
|
|
- &resfh.fh_handle.fh_base, resfh.fh_handle.fh_size);
|
|
|
-
|
|
|
+ fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh,
|
|
|
+ &resfh.fh_handle);
|
|
|
if (!created)
|
|
|
status = do_open_permission(rqstp, current_fh, open,
|
|
|
NFSD_MAY_NOP);
|
|
@@ -152,10 +150,8 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_
|
|
|
memset(&open->op_cinfo, 0, sizeof(struct nfsd4_change_info));
|
|
|
|
|
|
/* set replay cache */
|
|
|
- open->op_stateowner->so_replay.rp_openfh_len = current_fh->fh_handle.fh_size;
|
|
|
- memcpy(open->op_stateowner->so_replay.rp_openfh,
|
|
|
- ¤t_fh->fh_handle.fh_base,
|
|
|
- current_fh->fh_handle.fh_size);
|
|
|
+ fh_copy_shallow(&open->op_stateowner->so_replay.rp_openfh,
|
|
|
+ ¤t_fh->fh_handle);
|
|
|
|
|
|
open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) &&
|
|
|
(open->op_iattr.ia_size == 0);
|
|
@@ -187,9 +183,8 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|
|
if (status == nfserr_replay_me) {
|
|
|
struct nfs4_replay *rp = &open->op_stateowner->so_replay;
|
|
|
fh_put(&cstate->current_fh);
|
|
|
- cstate->current_fh.fh_handle.fh_size = rp->rp_openfh_len;
|
|
|
- memcpy(&cstate->current_fh.fh_handle.fh_base, rp->rp_openfh,
|
|
|
- rp->rp_openfh_len);
|
|
|
+ fh_copy_shallow(&cstate->current_fh.fh_handle,
|
|
|
+ &rp->rp_openfh);
|
|
|
status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP);
|
|
|
if (status)
|
|
|
dprintk("nfsd4_open: replay failed"
|