diff options
Diffstat (limited to 'drivers/target/iscsi/iscsi_target_util.c')
| -rw-r--r-- | drivers/target/iscsi/iscsi_target_util.c | 22 | 
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c index afd98ccd40a..1a91195ab61 100644 --- a/drivers/target/iscsi/iscsi_target_util.c +++ b/drivers/target/iscsi/iscsi_target_util.c @@ -488,7 +488,7 @@ void iscsit_add_cmd_to_immediate_queue(  	atomic_set(&conn->check_immediate_queue, 1);  	spin_unlock_bh(&conn->immed_queue_lock); -	wake_up_process(conn->thread_set->tx_thread); +	wake_up(&conn->queues_wq);  }  struct iscsi_queue_req *iscsit_get_cmd_from_immediate_queue(struct iscsi_conn *conn) @@ -562,7 +562,7 @@ void iscsit_add_cmd_to_response_queue(  	atomic_inc(&cmd->response_queue_count);  	spin_unlock_bh(&conn->response_queue_lock); -	wake_up_process(conn->thread_set->tx_thread); +	wake_up(&conn->queues_wq);  }  struct iscsi_queue_req *iscsit_get_cmd_from_response_queue(struct iscsi_conn *conn) @@ -616,6 +616,24 @@ static void iscsit_remove_cmd_from_response_queue(  	}  } +bool iscsit_conn_all_queues_empty(struct iscsi_conn *conn) +{ +	bool empty; + +	spin_lock_bh(&conn->immed_queue_lock); +	empty = list_empty(&conn->immed_queue_list); +	spin_unlock_bh(&conn->immed_queue_lock); + +	if (!empty) +		return empty; + +	spin_lock_bh(&conn->response_queue_lock); +	empty = list_empty(&conn->response_queue_list); +	spin_unlock_bh(&conn->response_queue_lock); + +	return empty; +} +  void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *conn)  {  	struct iscsi_queue_req *qr, *qr_tmp;  |