spinlock_t receive_credit_lock;
int recv_credits;
- int recv_credit_target;
+ u16 recv_credit_target;
spinlock_t lock_new_recv_credits;
int new_recv_credits;
struct smbdirect_data_transfer *data_transfer =
(struct smbdirect_data_transfer *)recvmsg->packet;
u32 remaining_data_length, data_offset, data_length;
- int old_recv_credit_target;
+ u16 old_recv_credit_target;
if (wc->byte_len <
offsetof(struct smbdirect_data_transfer, padding)) {
old_recv_credit_target = t->recv_credit_target;
t->recv_credit_target =
le16_to_cpu(data_transfer->credits_requested);
+ t->recv_credit_target =
+ min_t(u16, t->recv_credit_target, sp->recv_credit_max);
+ t->recv_credit_target =
+ max_t(u16, t->recv_credit_target, 1);
atomic_add(le16_to_cpu(data_transfer->credits_granted),
&sc->send_io.credits.count);
t->recv_credits = 0;
sp->recv_credit_max = smb_direct_receive_credit_max;
- t->recv_credit_target = 10;
+ t->recv_credit_target = 1;
t->new_recv_credits = 0;
sp->send_credit_target = smb_direct_send_credit_target;
le32_to_cpu(req->max_fragmented_size);
sp->max_fragmented_recv_size =
(sp->recv_credit_max * sp->max_recv_size) / 2;
+ st->recv_credit_target = le16_to_cpu(req->credits_requested);
+ st->recv_credit_target = min_t(u16, st->recv_credit_target, sp->recv_credit_max);
+ st->recv_credit_target = max_t(u16, st->recv_credit_target, 1);
ret = smb_direct_send_negotiate_response(st, ret);
out: