You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.2 KiB
180 lines
4.2 KiB
From 220f360b81246a45d6246b85f7b6bf4133f3c213 Mon Sep 17 00:00:00 2001 |
|
From: Chris Leech <cleech@redhat.com> |
|
Date: Tue, 13 Aug 2013 11:34:31 -0700 |
|
Subject: [PATCH] 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 caec94f..2b4f0da 100644 |
|
--- a/usr/idbm.c |
|
+++ b/usr/idbm.c |
|
@@ -2000,7 +2000,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; |
|
@@ -2012,38 +2012,8 @@ static int idbm_rec_write(node_rec_t *rec) |
|
log_error("Could not alloc portal"); |
|
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", 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", 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) { |
|
@@ -2064,11 +2034,11 @@ static int idbm_rec_write(node_rec_t *rec) |
|
log_error("Could not convert %s: %s", portal, |
|
strerror(errno)); |
|
rc = ISCSI_ERR_IDBM; |
|
- goto unlock; |
|
+ goto free_portal; |
|
} |
|
} else { |
|
rc = ISCSI_ERR_INVAL; |
|
- goto unlock; |
|
+ goto free_portal; |
|
} |
|
|
|
mkdir_portal: |
|
@@ -2079,24 +2049,96 @@ mkdir_portal: |
|
log_error("Could not make dir %s: %s", |
|
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: %s", 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"); |
|
+ 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: %s", 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"); |
|
+ 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", 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", 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); |
|
-- |
|
2.5.5 |
|
|
|
|