Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99367f01 authored by Nicholas Bellinger's avatar Nicholas Bellinger
Browse files

iscsi-target: Convert to use target_put_session + sess_kref



This patch converts iscsi-target session code to use se_sess->sess_kref
counting for iscsi session shutdown.  The following cases include:

*) last iscsit_close_connection() shutdown path to invoke close session
*) iscsit_logout_post_handler_closesession() for explict logout
*) iscsit_free_session() caller for explict shutdown

It also moves iscsit_stop_session() call from lio_tpg_close_session()
into lio_tpg_shutdown_session() TFO callbacks to invoke an explict
shutdown, and also changes iscsi_check_for_session_reinstatement()
login code to use se_sess->sess_kref.

(v2: Make iscsit_handle_time2retain_timeout() use target_put_session)

Cc: Andy Grover <agrover@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 337c0607
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -4168,7 +4168,7 @@ int iscsit_close_connection(
	if (!atomic_read(&sess->session_reinstatement) &&
	if (!atomic_read(&sess->session_reinstatement) &&
	     atomic_read(&sess->session_fall_back_to_erl0)) {
	     atomic_read(&sess->session_fall_back_to_erl0)) {
		spin_unlock_bh(&sess->conn_lock);
		spin_unlock_bh(&sess->conn_lock);
		iscsit_close_session(sess);
		target_put_session(sess->se_sess);


		return 0;
		return 0;
	} else if (atomic_read(&sess->session_logout)) {
	} else if (atomic_read(&sess->session_logout)) {
@@ -4289,7 +4289,7 @@ static void iscsit_logout_post_handler_closesession(
	iscsit_dec_conn_usage_count(conn);
	iscsit_dec_conn_usage_count(conn);
	iscsit_stop_session(sess, 1, 1);
	iscsit_stop_session(sess, 1, 1);
	iscsit_dec_session_usage_count(sess);
	iscsit_dec_session_usage_count(sess);
	iscsit_close_session(sess);
	target_put_session(sess->se_sess);
}
}


static void iscsit_logout_post_handler_samecid(
static void iscsit_logout_post_handler_samecid(
@@ -4455,7 +4455,7 @@ int iscsit_free_session(struct iscsi_session *sess)
	} else
	} else
		spin_unlock_bh(&sess->conn_lock);
		spin_unlock_bh(&sess->conn_lock);


	iscsit_close_session(sess);
	target_put_session(sess->se_sess);
	return 0;
	return 0;
}
}


+1 −3
Original line number Original line Diff line number Diff line
@@ -1698,8 +1698,8 @@ static int lio_tpg_shutdown_session(struct se_session *se_sess)
	atomic_set(&sess->session_reinstatement, 1);
	atomic_set(&sess->session_reinstatement, 1);
	spin_unlock(&sess->conn_lock);
	spin_unlock(&sess->conn_lock);


	iscsit_inc_session_usage_count(sess);
	iscsit_stop_time2retain_timer(sess);
	iscsit_stop_time2retain_timer(sess);
	iscsit_stop_session(sess, 1, 1);


	return 1;
	return 1;
}
}
@@ -1715,8 +1715,6 @@ static void lio_tpg_close_session(struct se_session *se_sess)
	 * If the iSCSI Session for the iSCSI Initiator Node exists,
	 * If the iSCSI Session for the iSCSI Initiator Node exists,
	 * forcefully shutdown the iSCSI NEXUS.
	 * forcefully shutdown the iSCSI NEXUS.
	 */
	 */
	iscsit_stop_session(sess, 1, 1);
	iscsit_dec_session_usage_count(sess);
	iscsit_close_session(sess);
	iscsit_close_session(sess);
}
}


+1 −1
Original line number Original line Diff line number Diff line
@@ -783,7 +783,7 @@ static void iscsit_handle_time2retain_timeout(unsigned long data)
	}
	}


	spin_unlock_bh(&se_tpg->session_lock);
	spin_unlock_bh(&se_tpg->session_lock);
	iscsit_close_session(sess);
	target_put_session(sess->se_sess);
}
}


extern void iscsit_start_time2retain_handler(struct iscsi_session *sess)
extern void iscsit_start_time2retain_handler(struct iscsi_session *sess)
+4 −2
Original line number Original line Diff line number Diff line
@@ -180,14 +180,16 @@ int iscsi_check_for_session_reinstatement(struct iscsi_conn *conn)
	if (sess->session_state == TARG_SESS_STATE_FAILED) {
	if (sess->session_state == TARG_SESS_STATE_FAILED) {
		spin_unlock_bh(&sess->conn_lock);
		spin_unlock_bh(&sess->conn_lock);
		iscsit_dec_session_usage_count(sess);
		iscsit_dec_session_usage_count(sess);
		return iscsit_close_session(sess);
		target_put_session(sess->se_sess);
		return 0;
	}
	}
	spin_unlock_bh(&sess->conn_lock);
	spin_unlock_bh(&sess->conn_lock);


	iscsit_stop_session(sess, 1, 1);
	iscsit_stop_session(sess, 1, 1);
	iscsit_dec_session_usage_count(sess);
	iscsit_dec_session_usage_count(sess);


	return iscsit_close_session(sess);
	target_put_session(sess->se_sess);
	return 0;
}
}


static void iscsi_login_set_conn_values(
static void iscsi_login_set_conn_values(