From ffa5a7a9de7023e151bbd5108d522335458c01ba Mon Sep 17 00:00:00 2001 From: Eldad Zinger Date: Mon, 26 Apr 2010 10:48:48 +0300 Subject: [PATCH] sdp: on device removal, ref count taken so that socket won't be destructed On device removal, socket resources that are based on device are destroyed, but the socket itself will be destroyed later, upon user request. Signed-off-by: Eldad Zinger --- drivers/infiniband/ulp/sdp/sdp_dbg.h | 4 ++-- drivers/infiniband/ulp/sdp/sdp_main.c | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/ulp/sdp/sdp_dbg.h b/drivers/infiniband/ulp/sdp/sdp_dbg.h index 9b1a67e5f29d..f25e86dc5e5c 100644 --- a/drivers/infiniband/ulp/sdp/sdp_dbg.h +++ b/drivers/infiniband/ulp/sdp/sdp_dbg.h @@ -112,7 +112,7 @@ extern int sdp_debug_level; }) #define sk_common_release(sk) do { \ - sdp_dbg(sk, "%s:%d - sock_put(" SOCK_REF_BORN \ + sdp_dbg(sk, "%s:%d - sock_put(" SOCK_REF_ALIVE \ ") - refcount = %d from withing sk_common_release\n",\ __func__, __LINE__, atomic_read(&(sk)->sk_refcnt));\ sk_common_release(sk); \ @@ -143,7 +143,7 @@ extern int sdp_data_debug_level; #endif #define SOCK_REF_RESET "RESET" -#define SOCK_REF_BORN "BORN" /* sock_alloc -> destruct_sock */ +#define SOCK_REF_ALIVE "ALIVE" /* sock_alloc -> destruct_sock */ #define SOCK_REF_CLONE "CLONE" #define SOCK_REF_CM_TW "CM_TW" /* TIMEWAIT_ENTER -> TIMEWAIT_EXIT */ #define SOCK_REF_SEQ "SEQ" /* during proc read */ diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index f9d81652f881..de17a566149c 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -249,7 +249,7 @@ static void sdp_keepalive_timer(unsigned long data) out: bh_unlock_sock(sk); - sock_put(sk, SOCK_REF_BORN); + sock_put(sk, SOCK_REF_ALIVE); } static void sdp_init_keepalive_timer(struct sock *sk) @@ -2715,7 +2715,10 @@ kill_socks: sk->sk_shutdown |= RCV_SHUTDOWN; sdp_reset(sk); + sock_hold(sk, SOCK_REF_ALIVE); sdp_close(sk,0); + sdp_destroy_qp(ssk); + ssk->sdp_dev = NULL; if ((1 << sk->sk_state) & (TCPF_FIN_WAIT1 | TCPF_CLOSE_WAIT | -- 2.50.1