diff options
Diffstat (limited to 'drivers/scsi/iscsi_tcp.c')
| -rw-r--r-- | drivers/scsi/iscsi_tcp.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index 02143af7c1a..7608310e19e 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c @@ -206,8 +206,10 @@ static void iscsi_sw_tcp_conn_set_callbacks(struct iscsi_conn *conn)  }  static void -iscsi_sw_tcp_conn_restore_callbacks(struct iscsi_sw_tcp_conn *tcp_sw_conn) +iscsi_sw_tcp_conn_restore_callbacks(struct iscsi_conn *conn)  { +	struct iscsi_tcp_conn *tcp_conn = conn->dd_data; +	struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data;  	struct sock *sk = tcp_sw_conn->sock->sk;  	/* restore socket callbacks, see also: iscsi_conn_set_callbacks() */ @@ -555,7 +557,7 @@ static void iscsi_sw_tcp_release_conn(struct iscsi_conn *conn)  		return;  	sock_hold(sock->sk); -	iscsi_sw_tcp_conn_restore_callbacks(tcp_sw_conn); +	iscsi_sw_tcp_conn_restore_callbacks(conn);  	sock_put(sock->sk);  	spin_lock_bh(&session->lock); @@ -599,9 +601,9 @@ static void iscsi_sw_tcp_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)  	set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_rx);  	write_unlock_bh(&tcp_sw_conn->sock->sk->sk_callback_lock); -	if (sock->sk->sk_sleep) { +	if (sk_sleep(sock->sk) && waitqueue_active(sk_sleep(sock->sk))) {  		sock->sk->sk_err = EIO; -		wake_up_interruptible(sock->sk->sk_sleep); +		wake_up_interruptible(sk_sleep(sock->sk));  	}  	iscsi_conn_stop(cls_conn, flag);  |