summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/nfs4proc.c39
-rw-r--r--fs/nfs/nfs4state.c7
-rw-r--r--fs/nfs/nfs4xdr.c47
-rw-r--r--fs/nfsd/nfs4proc.c6
-rw-r--r--fs/nfsd/nfs4state.c44
-rw-r--r--fs/nfsd/nfs4xdr.c10
-rw-r--r--include/linux/nfs4.h4
7 files changed, 78 insertions, 79 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 8b742557c1e0..2ef48c737a00 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -54,8 +54,7 @@
extern u32 *nfs4_decode_dirent(u32 *p, struct nfs_entry *entry, int plus);
extern struct rpc_procinfo nfs4_procedures[];
-static nfs4_stateid zero_stateid =
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+extern nfs4_stateid zero_stateid;
static spinlock_t renew_lock = SPIN_LOCK_UNLOCKED;
@@ -336,7 +335,7 @@ nfs4_setup_readdir(struct nfs4_compound *cp, u64 cookie, u32 *verifier,
BUG_ON(bufsize < 80);
readdir->rd_cookie = (cookie > 2) ? cookie : 0;
- memcpy(readdir->rd_req_verifier, verifier, sizeof(nfs4_verifier));
+ memcpy(&readdir->rd_req_verifier, verifier, sizeof(readdir->rd_req_verifier));
readdir->rd_count = bufsize;
readdir->rd_bmval[0] = FATTR4_WORD0_FILEID;
readdir->rd_bmval[1] = 0;
@@ -464,7 +463,7 @@ nfs4_setup_setclientid(struct nfs4_compound *cp, u32 program, unsigned short por
u32 *p;
tv = CURRENT_TIME;
- p = (u32 *)setclientid->sc_verifier;
+ p = (u32 *)setclientid->sc_verifier.data;
*p++ = tv.tv_sec;
*p++ = tv.tv_nsec;
setclientid->sc_name = server->ip_addr;
@@ -606,7 +605,7 @@ nfs4_do_open(struct inode *dir, struct qstr *name, int flags, struct iattr *satt
goto out;
}
if (o_arg.createmode & NFS4_CREATE_EXCLUSIVE){
- u32 *p = (u32 *) o_arg.u.verifier;
+ u32 *p = (u32 *) o_arg.u.verifier.data;
p[0] = jiffies;
p[1] = current->pid;
} else if (o_arg.createmode == NFS4_CREATE_UNCHECKED) {
@@ -648,14 +647,14 @@ nfs4_do_open(struct inode *dir, struct qstr *name, int flags, struct iattr *satt
.rpc_cred = cred,
};
- memcpy(oc_arg.stateid, o_res.stateid, sizeof(nfs4_stateid));
+ memcpy(&oc_arg.stateid, &o_res.stateid, sizeof(oc_arg.stateid));
status = rpc_call_sync(server->client, &msg, 0);
if (status)
goto out_up;
nfs4_increment_seqid(status, sp);
- memcpy(state->stateid, oc_res.stateid, sizeof(state->stateid));
+ memcpy(&state->stateid, &oc_res.stateid, sizeof(state->stateid));
} else
- memcpy(state->stateid, o_res.stateid, sizeof(state->stateid));
+ memcpy(&state->stateid, &o_res.stateid, sizeof(state->stateid));
state->state |= flags & (FMODE_READ|FMODE_WRITE);
state->pid = current->pid;
@@ -703,9 +702,9 @@ nfs4_do_setattr(struct nfs_server *server, struct nfs_fattr *fattr,
fattr->valid = 0;
if (state)
- memcpy(arg.stateid, state->stateid, sizeof(arg.stateid));
+ memcpy(&arg.stateid, &state->stateid, sizeof(arg.stateid));
else
- memcpy(arg.stateid, zero_stateid, sizeof(arg.stateid));
+ memcpy(&arg.stateid, &zero_stateid, sizeof(arg.stateid));
return(rpc_call_sync(server->client, &msg, 0));
}
@@ -738,7 +737,7 @@ nfs4_do_close(struct inode *inode, struct nfs4_state *state)
.rpc_resp = &res,
};
- memcpy(arg.stateid, state->stateid, sizeof(arg.stateid));
+ memcpy(&arg.stateid, &state->stateid, sizeof(arg.stateid));
/* Serialization for the sequence id */
arg.seqid = sp->so_seqid,
status = rpc_call_sync(NFS_SERVER(inode)->client, &msg, 0);
@@ -1034,7 +1033,6 @@ nfs4_proc_read(struct nfs_read_data *rdata, struct file *filp)
int flags = rdata->flags;
struct inode *inode = rdata->inode;
struct nfs_fattr *fattr = rdata->res.fattr;
- nfs4_stateid *stateid = &rdata->args.stateid;
struct nfs_server *server = NFS_SERVER(inode);
struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_READ],
@@ -1054,9 +1052,9 @@ nfs4_proc_read(struct nfs_read_data *rdata, struct file *filp)
if (filp) {
struct nfs4_state *state;
state = (struct nfs4_state *)filp->private_data;
- memcpy(stateid, state->stateid, sizeof(stateid));
+ memcpy(&rdata->args.stateid, &state->stateid, sizeof(rdata->args.stateid));
} else
- memcpy(stateid, zero_stateid, sizeof(stateid));
+ memcpy(&rdata->args.stateid, &zero_stateid, sizeof(rdata->args.stateid));
fattr->valid = 0;
status = rpc_call_sync(server->client, &msg, flags);
@@ -1076,7 +1074,6 @@ nfs4_proc_write(struct nfs_write_data *wdata, struct file *filp)
int rpcflags = wdata->flags;
struct inode *inode = wdata->inode;
struct nfs_fattr *fattr = wdata->res.fattr;
- nfs4_stateid *stateid = &wdata->args.stateid;
struct nfs_server *server = NFS_SERVER(inode);
struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_WRITE],
@@ -1095,9 +1092,9 @@ nfs4_proc_write(struct nfs_write_data *wdata, struct file *filp)
if (filp) {
struct nfs4_state *state;
state = (struct nfs4_state *)filp->private_data;
- memcpy(stateid, state->stateid, sizeof(stateid));
+ memcpy(&wdata->args.stateid, &state->stateid, sizeof(wdata->args.stateid));
} else
- memcpy(stateid, zero_stateid, sizeof(stateid));
+ memcpy(&wdata->args.stateid, &zero_stateid, sizeof(wdata->args.stateid));
fattr->valid = 0;
status = rpc_call_sync(server->client, &msg, rpcflags);
@@ -1476,9 +1473,9 @@ nfs4_proc_read_setup(struct nfs_read_data *data, unsigned int count)
data->timestamp = jiffies;
if (req->wb_state)
- memcpy(data->args.stateid, req->wb_state->stateid, sizeof(data->args.stateid));
+ memcpy(&data->args.stateid, &req->wb_state->stateid, sizeof(data->args.stateid));
else
- memcpy(data->args.stateid, zero_stateid, sizeof(data->args.stateid));
+ memcpy(&data->args.stateid, &zero_stateid, sizeof(data->args.stateid));
/* N.B. Do we need to test? Never called for swapfile inode */
flags = RPC_TASK_ASYNC | (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0);
@@ -1555,9 +1552,9 @@ nfs4_proc_write_setup(struct nfs_write_data *data, unsigned int count, int how)
data->timestamp = jiffies;
if (req->wb_state)
- memcpy(data->args.stateid, req->wb_state->stateid, sizeof(data->args.stateid));
+ memcpy(&data->args.stateid, &req->wb_state->stateid, sizeof(data->args.stateid));
else
- memcpy(data->args.stateid, zero_stateid, sizeof(data->args.stateid));
+ memcpy(&data->args.stateid, &zero_stateid, sizeof(data->args.stateid));
/* Set the initial flags for the task. */
flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC;
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index fd5a93d948e5..42a2344a2893 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -46,11 +46,12 @@
static spinlock_t state_spinlock = SPIN_LOCK_UNLOCKED;
-nfs4_stateid zero_stateid =
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+nfs4_stateid zero_stateid;
+#if 0
nfs4_stateid one_stateid =
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+#endif
static LIST_HEAD(nfs4_clientid_list);
@@ -228,7 +229,7 @@ nfs4_alloc_open_state(void)
return NULL;
state->pid = current->pid;
state->state = 0;
- memset(state->stateid, 0, sizeof(state->stateid));
+ memset(state->stateid.data, 0, sizeof(state->stateid.data));
atomic_set(&state->count, 1);
return state;
}
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index ac89bf9ac336..9d944780865d 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -205,6 +205,7 @@ struct compound_hdr {
#define RESERVE_SPACE(nbytes) do { \
p = xdr_reserve_space(xdr, nbytes); \
+ if (!p) printk("RESERVE_SPACE(%d) failed in function %s\n", nbytes, __FUNCTION__); \
BUG_ON(!p); \
} while (0)
@@ -382,10 +383,10 @@ encode_close(struct xdr_stream *xdr, struct nfs_closeargs *arg)
{
uint32_t *p;
- RESERVE_SPACE(8+sizeof(nfs4_stateid));
+ RESERVE_SPACE(8+sizeof(arg->stateid.data));
WRITE32(OP_CLOSE);
WRITE32(arg->seqid);
- WRITEMEM(arg->stateid, sizeof(nfs4_stateid));
+ WRITEMEM(arg->stateid.data, sizeof(arg->stateid.data));
return 0;
}
@@ -575,7 +576,7 @@ encode_open(struct xdr_stream *xdr, struct nfs_openargs *arg)
if (arg->createmode == NFS4_CREATE_EXCLUSIVE) {
RESERVE_SPACE(12);
WRITE32(arg->createmode);
- WRITEMEM(arg->u.verifier, sizeof(nfs4_verifier));
+ WRITEMEM(arg->u.verifier.data, sizeof(arg->u.verifier.data));
}
else if (arg->u.attrs) {
RESERVE_SPACE(4);
@@ -604,9 +605,9 @@ encode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmargs *arg)
{
uint32_t *p;
- RESERVE_SPACE(8+sizeof(nfs4_stateid));
+ RESERVE_SPACE(8+sizeof(arg->stateid.data));
WRITE32(OP_OPEN_CONFIRM);
- WRITEMEM(arg->stateid, sizeof(nfs4_stateid));
+ WRITEMEM(arg->stateid.data, sizeof(arg->stateid.data));
WRITE32(arg->seqid);
return 0;
@@ -645,7 +646,7 @@ encode_read(struct xdr_stream *xdr, struct nfs_readargs *args)
RESERVE_SPACE(32);
WRITE32(OP_READ);
- WRITEMEM(args->stateid, sizeof(nfs4_stateid));
+ WRITEMEM(args->stateid.data, sizeof(args->stateid.data));
WRITE64(args->offset);
WRITE32(args->count);
@@ -662,7 +663,7 @@ encode_readdir(struct xdr_stream *xdr, struct nfs4_readdir *readdir, struct rpc_
RESERVE_SPACE(32+sizeof(nfs4_verifier));
WRITE32(OP_READDIR);
WRITE64(readdir->rd_cookie);
- WRITEMEM(readdir->rd_req_verifier, sizeof(nfs4_verifier));
+ WRITEMEM(readdir->rd_req_verifier.data, sizeof(readdir->rd_req_verifier.data));
WRITE32(readdir->rd_count >> 5); /* meaningless "dircount" field */
WRITE32(readdir->rd_count);
WRITE32(2);
@@ -771,9 +772,9 @@ encode_setattr(struct xdr_stream *xdr, struct nfs_setattrargs *arg,
int status;
uint32_t *p;
- RESERVE_SPACE(4+sizeof(nfs4_stateid));
+ RESERVE_SPACE(4+sizeof(arg->stateid.data));
WRITE32(OP_SETATTR);
- WRITEMEM(arg->stateid, sizeof(nfs4_stateid));
+ WRITEMEM(arg->stateid.data, sizeof(arg->stateid.data));
if ((status = encode_attrs(xdr, arg->iap, server)))
return status;
@@ -792,11 +793,11 @@ encode_setclientid(struct xdr_stream *xdr, struct nfs4_setclientid *setclientid)
len2 = strlen(setclientid->sc_netid);
len3 = strlen(setclientid->sc_uaddr);
total_len = XDR_QUADLEN(len1) + XDR_QUADLEN(len2) + XDR_QUADLEN(len3);
- total_len = (total_len << 2) + 24 + sizeof(nfs4_verifier);
+ total_len = (total_len << 2) + 24 + sizeof(setclientid->sc_verifier.data);
RESERVE_SPACE(total_len);
WRITE32(OP_SETCLIENTID);
- WRITEMEM(setclientid->sc_verifier, sizeof(nfs4_verifier));
+ WRITEMEM(setclientid->sc_verifier.data, sizeof(setclientid->sc_verifier.data));
WRITE32(len1);
WRITEMEM(setclientid->sc_name, len1);
WRITE32(setclientid->sc_prog);
@@ -814,10 +815,10 @@ encode_setclientid_confirm(struct xdr_stream *xdr, struct nfs4_client *client_st
{
uint32_t *p;
- RESERVE_SPACE(12 + sizeof(nfs4_verifier));
+ RESERVE_SPACE(12 + sizeof(client_state->cl_confirm.data));
WRITE32(OP_SETCLIENTID_CONFIRM);
WRITE64(client_state->cl_clientid);
- WRITEMEM(client_state->cl_confirm,sizeof(nfs4_verifier));
+ WRITEMEM(client_state->cl_confirm.data, sizeof(client_state->cl_confirm.data));
return 0;
}
@@ -829,7 +830,7 @@ encode_write(struct xdr_stream *xdr, struct nfs_writeargs *args)
RESERVE_SPACE(36);
WRITE32(OP_WRITE);
- WRITEMEM(args->stateid, sizeof(nfs4_stateid));
+ WRITEMEM(args->stateid.data, sizeof(args->stateid.data));
WRITE64(args->offset);
WRITE32(args->stable);
WRITE32(args->count);
@@ -1256,8 +1257,8 @@ decode_close(struct xdr_stream *xdr, struct nfs_closeres *res)
status = decode_op_hdr(xdr, OP_CLOSE);
if (status)
return status;
- READ_BUF(sizeof(nfs4_stateid));
- COPYMEM(res->stateid, sizeof(nfs4_stateid));
+ READ_BUF(sizeof(res->stateid.data));
+ COPYMEM(res->stateid.data, sizeof(res->stateid.data));
return 0;
}
@@ -1744,8 +1745,8 @@ decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
status = decode_op_hdr(xdr, OP_OPEN);
if (status)
return status;
- READ_BUF(sizeof(nfs4_stateid));
- COPYMEM(res->stateid, sizeof(nfs4_stateid));
+ READ_BUF(sizeof(res->stateid.data));
+ COPYMEM(res->stateid.data, sizeof(res->stateid.data));
decode_change_info(xdr, res->cinfo);
@@ -1772,8 +1773,8 @@ decode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmres *res)
res->status = decode_op_hdr(xdr, OP_OPEN_CONFIRM);
if (res->status)
return res->status;
- READ_BUF(sizeof(nfs4_stateid));
- COPYMEM(res->stateid, sizeof(nfs4_stateid));
+ READ_BUF(sizeof(res->stateid.data));
+ COPYMEM(res->stateid.data, sizeof(res->stateid.data));
return 0;
}
@@ -1833,7 +1834,7 @@ decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs4_readdir
if (status)
return status;
READ_BUF(8);
- COPYMEM(readdir->rd_resp_verifier, 8);
+ COPYMEM(readdir->rd_resp_verifier.data, 8);
hdrlen = (char *) p - (char *) iov->iov_base;
recvd = req->rq_received - hdrlen;
@@ -2026,9 +2027,9 @@ decode_setclientid(struct xdr_stream *xdr, struct nfs4_setclientid *setclientid)
}
READ32(nfserr);
if (nfserr == NFS_OK) {
- READ_BUF(8 + sizeof(nfs4_verifier));
+ READ_BUF(8 + sizeof(setclientid->sc_state->cl_confirm.data));
READ64(setclientid->sc_state->cl_clientid);
- COPYMEM(setclientid->sc_state->cl_confirm, sizeof(nfs4_verifier));
+ COPYMEM(setclientid->sc_state->cl_confirm.data, sizeof(setclientid->sc_state->cl_confirm.data));
} else if (nfserr == NFSERR_CLID_INUSE) {
uint32_t len;
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index ba0a43a99548..dc3f183524eb 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -78,7 +78,7 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
status = nfsd_create_v3(rqstp, current_fh, open->op_fname.data,
open->op_fname.len, &open->op_iattr,
&resfh, open->op_createmode,
- (u32 *)open->op_verf, &open->op_truncate);
+ (u32 *)open->op_verf.data, &open->op_truncate);
}
else {
status = nfsd_lookup(rqstp, current_fh,
@@ -204,7 +204,7 @@ nfsd4_access(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_acc
static inline int
nfsd4_commit(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_commit *commit)
{
- u32 *p = (u32 *)commit->co_verf;
+ u32 *p = (u32 *)commit->co_verf.data;
*p++ = nfssvc_boot.tv_sec;
*p++ = nfssvc_boot.tv_usec;
@@ -522,7 +522,7 @@ zero_stateid:
nfs4_unlock_state();
write->wr_bytes_written = write->wr_buflen;
write->wr_how_written = write->wr_stable_how;
- p = (u32 *)write->wr_verifier;
+ p = (u32 *)write->wr_verifier.data;
*p++ = nfssvc_boot.tv_sec;
*p++ = nfssvc_boot.tv_usec;
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 1858b5232685..0d485189c92d 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -228,8 +228,8 @@ out:
}
static void
-copy_verf(struct nfs4_client *target, nfs4_verifier source) {
- memcpy(&target->cl_verifier, source, sizeof(nfs4_verifier));
+copy_verf(struct nfs4_client *target, nfs4_verifier *source) {
+ memcpy(target->cl_verifier.data, source->data, sizeof(target->cl_verifier.data));
}
static void
@@ -256,8 +256,8 @@ cmp_name(struct xdr_netobj *n1, struct xdr_netobj *n2) {
}
static int
-cmp_verf(nfs4_verifier v1, nfs4_verifier v2) {
- return(!memcmp(v1,v2,sizeof(nfs4_verifier)));
+cmp_verf(nfs4_verifier *v1, nfs4_verifier *v2) {
+ return(!memcmp(v1->data,v2->data,sizeof(v1->data)));
}
static int
@@ -286,7 +286,7 @@ gen_confirm(struct nfs4_client *clp) {
u32 * p;
tv = CURRENT_TIME;
- p = (u32 *)clp->cl_confirm;
+ p = (u32 *)clp->cl_confirm.data;
*p++ = tv.tv_sec;
*p++ = tv.tv_nsec;
}
@@ -371,7 +371,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
.len = setclid->se_namelen,
.data = setclid->se_name,
};
- char * clverifier = setclid->se_verf;
+ nfs4_verifier clverifier = setclid->se_verf;
unsigned int strhashval;
struct nfs4_client * conf, * unconf, * new, * clp;
int status;
@@ -439,13 +439,13 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
expire_client(unconf);
if (!(new = create_client(clname)))
goto out;
- copy_verf(new,clverifier);
+ copy_verf(new, &clverifier);
new->cl_addr = ip_addr;
copy_cred(&new->cl_cred,&rqstp->rq_cred);
gen_clid(new);
gen_confirm(new);
add_to_unconfirmed(new, strhashval);
- } else if (cmp_verf(conf->cl_verifier, clverifier)) {
+ } else if (cmp_verf(&conf->cl_verifier, &clverifier)) {
/*
* CASE 1:
* cl_name match, confirmed, principal match
@@ -460,13 +460,13 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
* new cl_confirm
*/
if ((unconf) &&
- cmp_verf(unconf->cl_verifier, conf->cl_verifier) &&
+ cmp_verf(&unconf->cl_verifier, &conf->cl_verifier) &&
cmp_clid(&unconf->cl_clientid, &conf->cl_clientid)) {
expire_client(unconf);
}
if (!(new = create_client(clname)))
goto out;
- copy_verf(new,conf->cl_verifier);
+ copy_verf(new,&conf->cl_verifier);
new->cl_addr = ip_addr;
copy_cred(&new->cl_cred,&rqstp->rq_cred);
copy_clid(new, conf);
@@ -483,14 +483,14 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
*/
if (!(new = create_client(clname)))
goto out;
- copy_verf(new,clverifier);
+ copy_verf(new,&clverifier);
new->cl_addr = ip_addr;
copy_cred(&new->cl_cred,&rqstp->rq_cred);
gen_clid(new);
gen_confirm(new);
add_to_unconfirmed(new, strhashval);
} else if (!cmp_clid(&conf->cl_clientid, &unconf->cl_clientid) &&
- !cmp_verf(conf->cl_confirm, unconf->cl_confirm)) {
+ !cmp_verf(&conf->cl_confirm, &unconf->cl_confirm)) {
/*
* CASE3:
* confirmed found (name, principal match)
@@ -510,7 +510,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
expire_client(unconf);
if (!(new = create_client(clname)))
goto out;
- copy_verf(new,clverifier);
+ copy_verf(new,&clverifier);
new->cl_addr = ip_addr;
copy_cred(&new->cl_cred,&rqstp->rq_cred);
gen_clid(new);
@@ -524,7 +524,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_setclientid *setclid)
}
setclid->se_clientid.cl_boot = new->cl_clientid.cl_boot;
setclid->se_clientid.cl_id = new->cl_clientid.cl_id;
- memcpy(&setclid->se_confirm, new->cl_confirm, sizeof(nfs4_verifier));
+ memcpy(setclid->se_confirm.data, new->cl_confirm.data, sizeof(setclid->se_confirm.data));
printk(KERN_INFO "NFSD: this client will not receive delegations\n");
status = nfs_ok;
out:
@@ -546,7 +546,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
u32 ip_addr = rqstp->rq_addr.sin_addr.s_addr;
unsigned int idhashval;
struct nfs4_client *clp, *conf = NULL, *unconf = NULL;
- char * confirm = setclientid_confirm->sc_confirm;
+ nfs4_verifier confirm = setclientid_confirm->sc_confirm;
clientid_t * clid = &setclientid_confirm->sc_clientid;
struct list_head *pos, *next;
int status;
@@ -601,10 +601,10 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
* conf and unconf records match names, verifiers
*/
if ((conf && unconf) &&
- (cmp_verf(unconf->cl_confirm, confirm)) &&
- (cmp_verf(conf->cl_verifier, unconf->cl_verifier)) &&
+ (cmp_verf(&unconf->cl_confirm, &confirm)) &&
+ (cmp_verf(&conf->cl_verifier, &unconf->cl_verifier)) &&
(cmp_name(&conf->cl_name,&unconf->cl_name)) &&
- (!cmp_verf(conf->cl_confirm, unconf->cl_confirm))) {
+ (!cmp_verf(&conf->cl_confirm, &unconf->cl_confirm))) {
if (!cmp_creds(&conf->cl_cred, &unconf->cl_cred))
status = nfserr_clid_inuse;
else {
@@ -621,7 +621,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
*/
if ((conf && !unconf) ||
((conf && unconf) &&
- (!cmp_verf(conf->cl_verifier, unconf->cl_verifier) ||
+ (!cmp_verf(&conf->cl_verifier, &unconf->cl_verifier) ||
!cmp_name(&conf->cl_name, &unconf->cl_name)))) {
if (!cmp_creds(&conf->cl_cred,&rqstp->rq_cred)) {
status = nfserr_clid_inuse;
@@ -635,7 +635,7 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
* unconf record found.
* unconf->cl_confirm matches input confirm
*/
- if (!conf && unconf && cmp_verf(unconf->cl_confirm, confirm)) {
+ if (!conf && unconf && cmp_verf(&unconf->cl_confirm, &confirm)) {
if (!cmp_creds(&unconf->cl_cred, &rqstp->rq_cred)) {
status = nfserr_clid_inuse;
} else {
@@ -650,8 +650,8 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_setclientid_confi
* unconf record not found, or if unconf, then unconf->cl_confirm
* does not match input confirm.
*/
- if ((!conf || (conf && !cmp_verf(conf->cl_confirm, confirm))) &&
- (!unconf || (unconf && !cmp_verf(unconf->cl_confirm, confirm)))) {
+ if ((!conf || (conf && !cmp_verf(&conf->cl_confirm, &confirm))) &&
+ (!unconf || (unconf && !cmp_verf(&unconf->cl_confirm, &confirm)))) {
status = nfserr_stale_clientid;
goto out;
}
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 476c969412f9..e931a435eebd 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -691,7 +691,7 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
break;
case NFS4_CREATE_EXCLUSIVE:
READ_BUF(8);
- COPYMEM(open->op_verf, 8);
+ COPYMEM(open->op_verf.data, 8);
break;
default:
goto xdr_error;
@@ -798,7 +798,7 @@ nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *read
READ_BUF(24);
READ64(readdir->rd_cookie);
- COPYMEM(readdir->rd_verf, sizeof(nfs4_verifier));
+ COPYMEM(readdir->rd_verf.data, sizeof(readdir->rd_verf.data));
READ32(readdir->rd_dircount); /* just in case you needed a useless field... */
READ32(readdir->rd_maxcount);
if ((status = nfsd4_decode_bitmap(argp, readdir->rd_bmval)))
@@ -873,7 +873,7 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient
DECODE_HEAD;
READ_BUF(12);
- COPYMEM(setclientid->se_verf, 8);
+ COPYMEM(setclientid->se_verf.data, 8);
READ32(setclientid->se_namelen);
READ_BUF(setclientid->se_namelen + 8);
@@ -1740,7 +1740,7 @@ nfsd4_encode_commit(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_com
if (!nfserr) {
RESERVE_SPACE(8);
- WRITEMEM(commit->co_verf, 8);
+ WRITEMEM(commit->co_verf.data, 8);
ADJUST_ARGS();
}
}
@@ -2224,7 +2224,7 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_writ
RESERVE_SPACE(16);
WRITE32(write->wr_bytes_written);
WRITE32(write->wr_how_written);
- WRITEMEM(write->wr_verifier, 8);
+ WRITEMEM(write->wr_verifier.data, 8);
ADJUST_ARGS();
}
}
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index a65be432b9f5..8bb512eb2b43 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -46,8 +46,8 @@
#define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE 2
#define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE 3
-typedef char nfs4_verifier[NFS4_VERIFIER_SIZE];
-typedef char nfs4_stateid[16];
+typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
+typedef struct { char data[16]; } nfs4_stateid;
enum nfs_opnum4 {
OP_ACCESS = 3,