c2d5d21256
minor context fixes after rebase of out-of-tree patches iscsiuio is merged upstream, remove old source archive and patches spec cleanups to fix rpmlint issues
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
|
|
|