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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
		
					parent
					
						
							
								ce008c4bb9
							
						
					
				
			
			
				commit
				
					
						d5fb4ce33e
					
				
			
		
					 3 changed files with 7 additions and 9 deletions
				
			
		| 
						 | 
					@ -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,
 | 
				
			||||||
	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,
 | 
				
			||||||
	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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue