Commit f88a10f8 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Martin K. Petersen

scsi: target: iscsi: Redo iscsit_check_session_usage_count() return code

The return value of iscsit_check_session_usage_count() is only checked if
it was not allowed to sleep. If it returns `2' then a timer is prepared. If
it returns something else or if it was allowed to sleep then it is ignored.

Let iscsit_check_session_usage_count() return true if it needs to arm the
timer - otherwise false. This simplifies the code flow of the only caller.

Link: https://lore.kernel.org/r/20201220203638.43615-4-bigeasy@linutronix.deSigned-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent efc9d730
...@@ -4399,14 +4399,10 @@ int iscsit_close_session(struct iscsi_session *sess, bool can_sleep) ...@@ -4399,14 +4399,10 @@ int iscsit_close_session(struct iscsi_session *sess, bool can_sleep)
* time2retain handler) and contain and active session usage count we * time2retain handler) and contain and active session usage count we
* restart the timer and exit. * restart the timer and exit.
*/ */
if (can_sleep) { if (iscsit_check_session_usage_count(sess, can_sleep)) {
iscsit_check_session_usage_count(sess, can_sleep); atomic_set(&sess->session_logout, 0);
} else { iscsit_start_time2retain_handler(sess);
if (iscsit_check_session_usage_count(sess, can_sleep) == 2) { return 0;
atomic_set(&sess->session_logout, 0);
iscsit_start_time2retain_handler(sess);
return 0;
}
} }
transport_deregister_session(sess->se_sess); transport_deregister_session(sess->se_sess);
......
...@@ -779,21 +779,22 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown) ...@@ -779,21 +779,22 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd, bool shutdown)
} }
EXPORT_SYMBOL(iscsit_free_cmd); EXPORT_SYMBOL(iscsit_free_cmd);
int iscsit_check_session_usage_count(struct iscsi_session *sess, bool can_sleep) bool iscsit_check_session_usage_count(struct iscsi_session *sess,
bool can_sleep)
{ {
spin_lock_bh(&sess->session_usage_lock); spin_lock_bh(&sess->session_usage_lock);
if (sess->session_usage_count != 0) { if (sess->session_usage_count != 0) {
sess->session_waiting_on_uc = 1; sess->session_waiting_on_uc = 1;
spin_unlock_bh(&sess->session_usage_lock); spin_unlock_bh(&sess->session_usage_lock);
if (!can_sleep) if (!can_sleep)
return 2; return true;
wait_for_completion(&sess->session_waiting_on_uc_comp); wait_for_completion(&sess->session_waiting_on_uc_comp);
return 1; return false;
} }
spin_unlock_bh(&sess->session_usage_lock); spin_unlock_bh(&sess->session_usage_lock);
return 0; return false;
} }
void iscsit_dec_session_usage_count(struct iscsi_session *sess) void iscsit_dec_session_usage_count(struct iscsi_session *sess)
......
...@@ -40,7 +40,7 @@ extern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *); ...@@ -40,7 +40,7 @@ extern void iscsit_free_queue_reqs_for_conn(struct iscsi_conn *);
extern void iscsit_release_cmd(struct iscsi_cmd *); extern void iscsit_release_cmd(struct iscsi_cmd *);
extern void __iscsit_free_cmd(struct iscsi_cmd *, bool); extern void __iscsit_free_cmd(struct iscsi_cmd *, bool);
extern void iscsit_free_cmd(struct iscsi_cmd *, bool); extern void iscsit_free_cmd(struct iscsi_cmd *, bool);
extern int iscsit_check_session_usage_count(struct iscsi_session *sess, bool can_sleep); extern bool iscsit_check_session_usage_count(struct iscsi_session *sess, bool can_sleep);
extern void iscsit_dec_session_usage_count(struct iscsi_session *); extern void iscsit_dec_session_usage_count(struct iscsi_session *);
extern void iscsit_inc_session_usage_count(struct iscsi_session *); extern void iscsit_inc_session_usage_count(struct iscsi_session *);
extern struct iscsi_conn *iscsit_get_conn_from_cid(struct iscsi_session *, u16); extern struct iscsi_conn *iscsit_get_conn_from_cid(struct iscsi_session *, u16);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment