Commit d5fb4ce3 authored by Trond Myklebust's avatar Trond Myklebust

NFSv4.1: Don't confuse target_highest_slotid and max_slots in cb_recall_slot

Don't confuse the table size and the target_highest_slotid...
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent ce008c4b
...@@ -142,7 +142,7 @@ extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args, ...@@ -142,7 +142,7 @@ extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args,
struct cb_recallslotargs { struct cb_recallslotargs {
struct sockaddr *crsa_addr; struct sockaddr *crsa_addr;
uint32_t crsa_target_max_slots; uint32_t crsa_target_highest_slotid;
}; };
extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args,
void *dummy, void *dummy,
......
...@@ -561,22 +561,20 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy, ...@@ -561,22 +561,20 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy,
if (!cps->clp) /* set in cb_sequence */ if (!cps->clp) /* set in cb_sequence */
goto out; goto out;
dprintk_rcu("NFS: CB_RECALL_SLOT request from %s target max slots %d\n", dprintk_rcu("NFS: CB_RECALL_SLOT request from %s target highest slotid %d\n",
rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR), rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR),
args->crsa_target_max_slots); args->crsa_target_highest_slotid);
fc_tbl = &cps->clp->cl_session->fc_slot_table; fc_tbl = &cps->clp->cl_session->fc_slot_table;
status = htonl(NFS4ERR_BAD_HIGH_SLOT); status = htonl(NFS4ERR_BAD_HIGH_SLOT);
if (args->crsa_target_max_slots > fc_tbl->max_slots || if (args->crsa_target_highest_slotid >= fc_tbl->max_slots ||
args->crsa_target_max_slots < 1) args->crsa_target_highest_slotid < 1)
goto out; goto out;
status = htonl(NFS4_OK); status = htonl(NFS4_OK);
if (args->crsa_target_max_slots == fc_tbl->max_slots)
goto out;
nfs41_set_target_slotid(fc_tbl, args->crsa_target_max_slots); nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid);
nfs41_handle_recall_slot(cps->clp); nfs41_handle_recall_slot(cps->clp);
out: out:
dprintk("%s: exit with status = %d\n", __func__, ntohl(status)); dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
......
...@@ -520,7 +520,7 @@ static __be32 decode_recallslot_args(struct svc_rqst *rqstp, ...@@ -520,7 +520,7 @@ static __be32 decode_recallslot_args(struct svc_rqst *rqstp,
p = read_buf(xdr, 4); p = read_buf(xdr, 4);
if (unlikely(p == NULL)) if (unlikely(p == NULL))
return htonl(NFS4ERR_BADXDR); return htonl(NFS4ERR_BADXDR);
args->crsa_target_max_slots = ntohl(*p++); args->crsa_target_highest_slotid = ntohl(*p++);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment