From 70f471427abbd6e4844cf38ca5394fe32797bcf8 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Fri, 14 Dec 2007 16:43:23 +0000 Subject: [PATCH] Minor fixes and improvements git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@235 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- iscsi-scst/kernel/conn.c | 6 +++--- iscsi-scst/kernel/iscsi.c | 9 +++++++-- iscsi-scst/kernel/nthread.c | 6 ++++++ iscsi-scst/usr/plain.c | 27 +++++++++++++++++++-------- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/iscsi-scst/kernel/conn.c b/iscsi-scst/kernel/conn.c index 9aeb9585e..27a519618 100644 --- a/iscsi-scst/kernel/conn.c +++ b/iscsi-scst/kernel/conn.c @@ -302,15 +302,15 @@ static int iscsi_conn_alloc(struct iscsi_session *session, struct conn_info *inf struct iscsi_conn *conn; int res = 0; - TRACE_MGMT_DBG("Creating connection for sid %#Lx, cid %u", - (unsigned long long)session->sid, info->cid); - conn = kzalloc(sizeof(*conn), GFP_KERNEL); if (!conn) { res = -ENOMEM; goto out_err; } + TRACE_MGMT_DBG("Creating connection %p for sid %#Lx, cid %u", conn, + (unsigned long long)session->sid, info->cid); + /* Changing it, change ISCSI_CONN_IOV_MAX as well !! */ conn->read_iov = (struct iovec *)get_zeroed_page(GFP_KERNEL); if (conn->read_iov == NULL) { diff --git a/iscsi-scst/kernel/iscsi.c b/iscsi-scst/kernel/iscsi.c index 4a3b10281..771d8782d 100644 --- a/iscsi-scst/kernel/iscsi.c +++ b/iscsi-scst/kernel/iscsi.c @@ -1987,8 +1987,13 @@ static void iscsi_session_push_cmnd(struct iscsi_cmnd *cmnd) spin_unlock(&session->sn_lock); - if (unlikely(session->tm_rsp != NULL)) + if (unlikely(session->tm_rsp != NULL)) { + struct iscsi_conn *conn = cmnd->conn; + spin_lock_bh(&conn->cmd_list_lock); + __cmnd_abort(cmnd); + spin_unlock_bh(&conn->cmd_list_lock); iscsi_cond_send_tm_resp(session->tm_rsp, 0); + } iscsi_cmnd_exec(cmnd); @@ -2370,7 +2375,7 @@ static void iscsi_cond_send_tm_resp(struct iscsi_cmnd *rsp, int force) case ISCSI_FUNCTION_ABORT_TASK_SET: case ISCSI_FUNCTION_CLEAR_TASK_SET: case ISCSI_FUNCTION_CLEAR_ACA: - if (after(req_hdr->cmd_sn, sess->exp_cmd_sn)) { + if (before(sess->exp_cmd_sn, req_hdr->cmd_sn)) { TRACE_MGMT_DBG("Delaying TM fn %x response, " "because not all affected commands " "received (rsp %p, cmd sn %x, exp sn " diff --git a/iscsi-scst/kernel/nthread.c b/iscsi-scst/kernel/nthread.c index 6b38c144e..b5bf50fa6 100644 --- a/iscsi-scst/kernel/nthread.c +++ b/iscsi-scst/kernel/nthread.c @@ -120,6 +120,9 @@ static void close_conn(struct iscsi_conn *conn) { struct iscsi_session *session = conn->session; struct iscsi_target *target = conn->target; +#ifdef DEBUG + unsigned long start_waiting = jiffies; +#endif TRACE_ENTRY(); @@ -173,6 +176,9 @@ static void close_conn(struct iscsi_conn *conn) #ifdef NET_PAGE_CALLBACKS_DEFINED struct iscsi_cmnd *rsp; #endif + if (time_after(jiffies, start_waiting+10*HZ)) + trace_flag |= TRACE_CONN_OC_DBG; + spin_lock_bh(&conn->cmd_list_lock); list_for_each_entry(cmnd, &conn->cmd_list, cmd_list_entry) { TRACE_CONN_CLOSE_DBG("cmd %p, scst_state %x, data_waiting " diff --git a/iscsi-scst/usr/plain.c b/iscsi-scst/usr/plain.c index 23c3b8df6..c83b33cf0 100644 --- a/iscsi-scst/usr/plain.c +++ b/iscsi-scst/usr/plain.c @@ -518,6 +518,7 @@ static int plain_main_init(char *filename) char *p, *q; int idx; u32 tid, val; + int res = 0; if (!(config = fopen(filename, "r"))) return -errno; @@ -538,27 +539,37 @@ static int plain_main_init(char *filename) ; } else if (!((idx = param_index_by_name(p, target_keys)) < 0) && tid) { val = strtol(q, &q, 0); - if (param_check_val(target_keys, idx, &val) < 0) - log_warning("Wrong value %u for parameter %s\n", + if (param_check_val(target_keys, idx, &val) < 0) { + log_error("Wrong value %u for parameter %s\n", val, target_keys[idx].name); + res = -1; + break; + } iscsi_param_partial_set(tid, 0, key_target, idx, val); } else if (!((idx = param_index_by_name(p, session_keys)) < 0) && tid) { char *str = target_sep_string(&q); if (param_str_to_val(session_keys, idx, str, &val) < 0) { - log_warning("Wrong value %s for parameter %s\n", + log_error("Wrong value %s for parameter %s\n", str, session_keys[idx].name); - continue; + res = -1; + break; } - if (param_check_val(session_keys, idx, &val) < 0) - log_warning("Wrong value %u for parameter %s\n", + if (param_check_val(session_keys, idx, &val) < 0) { + log_error("Wrong value %u for parameter %s\n", val, session_keys[idx].name); + res = -1; + break; + } iscsi_param_partial_set(tid, 0, key_session, idx, val); - } else if (param_index_by_name(p, user_keys) < 0) + } else if (param_index_by_name(p, user_keys) < 0) { log_warning("Unknown iscsi-scstd.conf param: %s\n", p); + res = -1; + break; + } } fclose(config); - return 0; + return res; } static int plain_default_load(char *params)