When getting DREQ at TCP_CLOSE_WAIT state, CMA ref count is taken
and not returned. This happens because CMA timer is not started.
Signed-off-by: Amir Vadai <amirv@mellanox.co.il>
void sdp_reset(struct sock *sk);
int sdp_tx_wait_memory(struct sdp_sock *ssk, long *timeo_p, int *credits_needed);
void sdp_skb_entail(struct sock *sk, struct sk_buff *skb);
+void sdp_start_cma_timewait_timeout(struct sdp_sock *ssk, int timeo);
extern struct rw_semaphore device_removal_lock;
/* sdp_proc.c */
"TCP_CLOSE_WAIT taking reference to "
"let close() finish the work\n");
sock_hold(sk, SOCK_REF_CMA);
+ sdp_start_cma_timewait_timeout(sdp_sk(sk),
+ SDP_CMA_TIMEWAIT_TIMEOUT);
+
}
sdp_set_error(sk, -EPIPE);
rc = sdp_disconnected_handler(sk);
*/
}
-static inline void sdp_start_cma_timewait_timeout(struct sdp_sock *ssk, int timeo)
+void sdp_start_cma_timewait_timeout(struct sdp_sock *ssk, int timeo)
{
queue_delayed_work(sdp_wq, &ssk->cma_timewait_work, timeo);
ssk->cma_timewait_timeout = 1;