diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c index b7d11b5..fcf2a3a 100644 --- a/usr/iscsiadm.c +++ b/usr/iscsiadm.c @@ -465,7 +465,8 @@ static int iface_fn(void *data, node_rec_t *rec) return op_data->fn(op_data->data, rec); } -static int for_each_rec(struct node_rec *rec, void *data, idbm_iface_op_fn *fn) +static int __for_each_rec(int verbose, struct node_rec *rec, + void *data, idbm_iface_op_fn *fn) { struct rec_op_data op_data; int nr_found = 0, rc; @@ -477,16 +478,25 @@ static int for_each_rec(struct node_rec *rec, void *data, idbm_iface_op_fn *fn) rc = idbm_for_each_rec(&nr_found, &op_data, iface_fn); if (rc) { - log_error("Could not execute operation on all " - "records. Err %d.", rc); + if (verbose) + log_error("Could not execute operation on all " + "records. Err %d.", rc); } else if (!nr_found) { - log_error("no records found!"); + if (verbose) + log_error("no records found!"); rc = ENODEV; } return rc; } +static int for_each_rec(struct node_rec *rec, void *data, + idbm_iface_op_fn *fn) +{ + return __for_each_rec(1, rec, data, fn); +} + + static int login_portals(struct node_rec *pattern_rec) { struct list_head rec_list; @@ -1098,9 +1108,9 @@ new_fail: } /* logout and delete records using it first */ - rc = for_each_rec(rec, NULL, delete_node); - if (rc) - break; + rc = __for_each_rec(0, rec, NULL, delete_node); + if (rc && rc != ENODEV) + goto delete_fail; rc = iface_conf_delete(iface); if (rc) @@ -1167,9 +1177,11 @@ delete_fail: if (rc) goto update_fail; - rc = for_each_rec(rec, &set_param, idbm_node_set_param); - if (rc) - break; + rc = __for_each_rec(0, rec, &set_param, idbm_node_set_param); + if (rc == ENODEV) + rc = 0; + else if (rc) + goto update_fail; printf("%s updated.\n", iface->name); break; -- 1.6.6.1