Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5fb4ce3 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args,

struct cb_recallslotargs {
	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,
					 void *dummy,
+5 −7
Original line number Diff line number Diff line
@@ -561,22 +561,20 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy,
	if (!cps->clp) /* set in cb_sequence */
		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),
		args->crsa_target_max_slots);
		args->crsa_target_highest_slotid);

	fc_tbl = &cps->clp->cl_session->fc_slot_table;

	status = htonl(NFS4ERR_BAD_HIGH_SLOT);
	if (args->crsa_target_max_slots > fc_tbl->max_slots ||
	    args->crsa_target_max_slots < 1)
	if (args->crsa_target_highest_slotid >= fc_tbl->max_slots ||
	    args->crsa_target_highest_slotid < 1)
		goto out;

	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);
out:
	dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
+1 −1
Original line number Diff line number Diff line
@@ -520,7 +520,7 @@ static __be32 decode_recallslot_args(struct svc_rqst *rqstp,
	p = read_buf(xdr, 4);
	if (unlikely(p == NULL))
		return htonl(NFS4ERR_BADXDR);
	args->crsa_target_max_slots = ntohl(*p++);
	args->crsa_target_highest_slotid = ntohl(*p++);
	return 0;
}