181 lines
4.2 KiB
Diff
181 lines
4.2 KiB
Diff
|
From 954a9492b5ed1de5907ad2a7d7cc0ae6215d8fac Mon Sep 17 00:00:00 2001
|
||
|
From: Chris Leech <cleech@redhat.com>
|
||
|
Date: Tue, 13 Aug 2013 11:34:31 -0700
|
||
|
Subject: idbm_rec_write, seperate old and new style writes
|
||
|
|
||
|
Duplicates a small bit of code, but easier to understand and extened.
|
||
|
---
|
||
|
usr/idbm.c | 116 +++++++++++++++++++++++++++++++++++++++++--------------------
|
||
|
1 file changed, 79 insertions(+), 37 deletions(-)
|
||
|
|
||
|
diff --git a/usr/idbm.c b/usr/idbm.c
|
||
|
index 0a88699..cb6ffd1 100644
|
||
|
--- a/usr/idbm.c
|
||
|
+++ b/usr/idbm.c
|
||
|
@@ -1808,7 +1808,7 @@ mkdir_portal:
|
||
|
return f;
|
||
|
}
|
||
|
|
||
|
-static int idbm_rec_write(node_rec_t *rec)
|
||
|
+static int idbm_rec_write_new(node_rec_t *rec)
|
||
|
{
|
||
|
struct stat statb;
|
||
|
FILE *f;
|
||
|
@@ -1820,38 +1820,8 @@ static int idbm_rec_write(node_rec_t *rec)
|
||
|
log_error("Could not alloc portal\n");
|
||
|
return ISCSI_ERR_NOMEM;
|
||
|
}
|
||
|
-
|
||
|
- snprintf(portal, PATH_MAX, "%s", NODE_CONFIG_DIR);
|
||
|
- if (access(portal, F_OK) != 0) {
|
||
|
- if (mkdir(portal, 0660) != 0) {
|
||
|
- log_error("Could not make %s: %s\n", portal,
|
||
|
- strerror(errno));
|
||
|
- rc = ISCSI_ERR_IDBM;
|
||
|
- goto free_portal;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- snprintf(portal, PATH_MAX, "%s/%s", NODE_CONFIG_DIR, rec->name);
|
||
|
- if (access(portal, F_OK) != 0) {
|
||
|
- if (mkdir(portal, 0660) != 0) {
|
||
|
- log_error("Could not make %s: %s\n", portal,
|
||
|
- strerror(errno));
|
||
|
- rc = ISCSI_ERR_IDBM;
|
||
|
- goto free_portal;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
snprintf(portal, PATH_MAX, "%s/%s/%s,%d", NODE_CONFIG_DIR,
|
||
|
rec->name, rec->conn[0].address, rec->conn[0].port);
|
||
|
- log_debug(5, "Looking for config file %s", portal);
|
||
|
-
|
||
|
- rc = idbm_lock();
|
||
|
- if (rc)
|
||
|
- goto free_portal;
|
||
|
-
|
||
|
- if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
|
||
|
- /* drop down to old style portal as config */
|
||
|
- goto open_conf;
|
||
|
|
||
|
rc = stat(portal, &statb);
|
||
|
if (rc) {
|
||
|
@@ -1872,11 +1842,11 @@ static int idbm_rec_write(node_rec_t *rec)
|
||
|
log_error("Could not convert %s: %s\n", portal,
|
||
|
strerror(errno));
|
||
|
rc = ISCSI_ERR_IDBM;
|
||
|
- goto unlock;
|
||
|
+ goto free_portal;
|
||
|
}
|
||
|
} else {
|
||
|
rc = ISCSI_ERR_INVAL;
|
||
|
- goto unlock;
|
||
|
+ goto free_portal;
|
||
|
}
|
||
|
|
||
|
mkdir_portal:
|
||
|
@@ -1887,24 +1857,96 @@ mkdir_portal:
|
||
|
log_error("Could not make dir %s: %s\n",
|
||
|
portal, strerror(errno));
|
||
|
rc = ISCSI_ERR_IDBM;
|
||
|
- goto unlock;
|
||
|
+ goto free_portal;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
snprintf(portal, PATH_MAX, "%s/%s/%s,%d,%d/%s", NODE_CONFIG_DIR,
|
||
|
rec->name, rec->conn[0].address, rec->conn[0].port, rec->tpgt,
|
||
|
rec->iface.name);
|
||
|
-open_conf:
|
||
|
+/* open_conf: */
|
||
|
f = fopen(portal, "w");
|
||
|
if (!f) {
|
||
|
log_error("Could not open %s: %sd\n", portal, strerror(errno));
|
||
|
rc = ISCSI_ERR_IDBM;
|
||
|
- goto unlock;
|
||
|
+ goto free_portal;
|
||
|
}
|
||
|
|
||
|
idbm_print(IDBM_PRINT_TYPE_NODE, rec, 1, f);
|
||
|
fclose(f);
|
||
|
-unlock:
|
||
|
+free_portal:
|
||
|
+ free(portal);
|
||
|
+ return rc;
|
||
|
+}
|
||
|
+
|
||
|
+static int idbm_rec_write_old(node_rec_t *rec)
|
||
|
+{
|
||
|
+ FILE *f;
|
||
|
+ char *portal;
|
||
|
+ int rc = 0;
|
||
|
+
|
||
|
+ portal = malloc(PATH_MAX);
|
||
|
+ if (!portal) {
|
||
|
+ log_error("Could not alloc portal\n");
|
||
|
+ return ISCSI_ERR_NOMEM;
|
||
|
+ }
|
||
|
+ snprintf(portal, PATH_MAX, "%s/%s/%s,%d", NODE_CONFIG_DIR,
|
||
|
+ rec->name, rec->conn[0].address, rec->conn[0].port);
|
||
|
+
|
||
|
+ f = fopen(portal, "w");
|
||
|
+ if (!f) {
|
||
|
+ log_error("Could not open %s: %sd\n", portal, strerror(errno));
|
||
|
+ rc = ISCSI_ERR_IDBM;
|
||
|
+ goto free_portal;
|
||
|
+ }
|
||
|
+ idbm_print(IDBM_PRINT_TYPE_NODE, rec, 1, f);
|
||
|
+ fclose(f);
|
||
|
+free_portal:
|
||
|
+ free(portal);
|
||
|
+ return rc;
|
||
|
+}
|
||
|
+
|
||
|
+static int idbm_rec_write(node_rec_t *rec)
|
||
|
+{
|
||
|
+ char *portal;
|
||
|
+ int rc = 0;
|
||
|
+
|
||
|
+ portal = malloc(PATH_MAX);
|
||
|
+ if (!portal) {
|
||
|
+ log_error("Could not alloc portal\n");
|
||
|
+ return ISCSI_ERR_NOMEM;
|
||
|
+ }
|
||
|
+
|
||
|
+ snprintf(portal, PATH_MAX, "%s", NODE_CONFIG_DIR);
|
||
|
+ if (access(portal, F_OK) != 0) {
|
||
|
+ if (mkdir(portal, 0660) != 0) {
|
||
|
+ log_error("Could not make %s: %s\n", portal,
|
||
|
+ strerror(errno));
|
||
|
+ rc = ISCSI_ERR_IDBM;
|
||
|
+ goto free_portal;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ snprintf(portal, PATH_MAX, "%s/%s", NODE_CONFIG_DIR, rec->name);
|
||
|
+ if (access(portal, F_OK) != 0) {
|
||
|
+ if (mkdir(portal, 0660) != 0) {
|
||
|
+ log_error("Could not make %s: %s\n", portal,
|
||
|
+ strerror(errno));
|
||
|
+ rc = ISCSI_ERR_IDBM;
|
||
|
+ goto free_portal;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ rc = idbm_lock();
|
||
|
+ if (rc)
|
||
|
+ goto free_portal;
|
||
|
+
|
||
|
+ if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
|
||
|
+ /* old style portal as config */
|
||
|
+ rc = idbm_rec_write_old(rec);
|
||
|
+ else
|
||
|
+ rc = idbm_rec_write_new(rec);
|
||
|
+
|
||
|
idbm_unlock();
|
||
|
free_portal:
|
||
|
free(portal);
|
||
|
--
|
||
|
1.8.1.4
|
||
|
|