From 006270c0f9a1fa1e78574a7eaa04bb9ae1ef62b6 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Thu, 12 Feb 2015 16:38:00 -0800 Subject: [PATCH] iscsid: don't re-read config file for every session logout Follow up to the safe_logout feature patch. Cache the safe_logout setting when iscsid is started. Signed-off-by: Chris Leech --- usr/initiator.c | 6 +----- usr/iscsid.c | 6 ++++++ usr/iscsid.h | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/usr/initiator.c b/usr/initiator.c index 2f17882..b25ded8 100644 --- a/usr/initiator.c +++ b/usr/initiator.c @@ -2333,7 +2333,6 @@ int session_logout_task(int sid, queue_task_t *qtask) iscsi_session_t *session; iscsi_conn_t *conn; int rc = ISCSI_SUCCESS; - char *safe; session = session_find_by_sid(sid); if (!session) { @@ -2356,14 +2355,11 @@ invalid_state: return ISCSI_ERR_INTERNAL; } - safe = cfg_get_string_param(dconfig->config_file, "iscsid.safe_logout"); - if (safe && !strcmp(safe, "Yes") && session_in_use(sid)) { + if (dconfig->safe_logout && session_in_use(sid)) { log_error("Session is actively in use for mounted storage, " "and iscsid.safe_logout is configured.\n"); - free(safe); return ISCSI_ERR_BUSY; } - free(safe); /* FIXME: logout all active connections */ conn = &session->conn[0]; diff --git a/usr/iscsid.c b/usr/iscsid.c index f4f4f38..033a71f 100644 --- a/usr/iscsid.c +++ b/usr/iscsid.c @@ -341,6 +341,7 @@ int main(int argc, char *argv[]) char *config_file = CONFIG_FILE; char *initiatorname_file = INITIATOR_NAME_FILE; char *pid_file = PID_FILE; + char *safe_logout; int ch, longindex; uid_t uid = 0; struct sigaction sa_old; @@ -520,6 +521,11 @@ int main(int argc, char *argv[]) daemon_config.initiator_name : "NOT SET"); log_debug(1, "InitiatorAlias=%s", daemon_config.initiator_alias); + safe_logout = cfg_get_string_param(config_file, "iscsid.safe_logout"); + if (safe_logout && !strcmp(safe_logout, "Yes")) + daemon_config.safe_logout = 1; + free(safe_logout); + pid = fork(); if (pid == 0) { int nr_found = 0; diff --git a/usr/iscsid.h b/usr/iscsid.h index 15f264f..b9f3d54 100644 --- a/usr/iscsid.h +++ b/usr/iscsid.h @@ -29,6 +29,7 @@ struct iscsi_daemon_config { char *pid_file; char *initiator_name; char *initiator_alias; + int safe_logout; }; extern struct iscsi_daemon_config *dconfig; -- 2.1.0