Exemplo n.º 1
0
int isert_connection_closed(struct iscsi_conn *iscsi_conn)
{
	int res = 0;

	TRACE_ENTRY();

	if (iscsi_conn->rd_state) {
		res = isert_handle_close_connection(iscsi_conn);
	} else {
		struct isert_conn_dev *dev = isert_get_priv(iscsi_conn);

		if (dev) {
			isert_del_timer(dev);
			dev->state = CS_DISCONNECTED;
			if (dev->login_req) {
				res = isert_task_abort(dev->login_req);
				spin_lock(&dev->pdu_lock);
				dev->login_req = NULL;
				spin_unlock(&dev->pdu_lock);
			}

			wake_up(&dev->waitqueue);
			isert_dev_release(dev);
		}

		isert_free_connection(iscsi_conn);
	}

	TRACE_EXIT_RES(res);
	return res;
}
Exemplo n.º 2
0
int isert_handle_close_connection(struct iscsi_conn *conn)
{
	isert_mark_conn_closed(conn, 0);
	/* Take care of case where our connection is being closed
	 * without being connected to a session - if connection allocation
	 * failed for some reason */
	if (unlikely(!conn->session))
		isert_free_connection(conn);
	else
		start_close_conn(conn);
	return 0;
}
Exemplo n.º 3
0
static void isert_free_conn(struct iscsi_conn *conn)
{
	isert_free_connection(conn);
}