Mike Christie wrote: > Yangkook Kim wrote: >> Hi, Mike. Thank you for your patch. >> >>> I do not want to add a login log message to the iscsid_req_* functions >>> because they are generic and could be used for any operation. >> Yes, that's perfectly right idea. That should be bettet than my patch. >> >> I tried your patch, but that still does not output login-success >> message when calling >> iscsid_req_by_rec. >> >> It seems that log_login_msg() would not be called in either login_portal() or >> iscsid_logout_reqs_wait() when iscsid_req_by_rec returns success. >> >> I probably missed something. I will look at it tomorrow again. >> > > Nope. You are right. Nice catch. I messed up. I was only concentrating > on the error paths. I will fix up my patch and resend. Thanks. >
Here is a corrected patch. -- You received this message because you are subscribed to the Google Groups "open-iscsi" group. To post to this group, send email to open-is...@googlegroups.com. To unsubscribe from this group, send email to open-iscsi+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/open-iscsi?hl=.
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c index d4f7925..dbefa39 100644 --- a/usr/iscsiadm.c +++ b/usr/iscsiadm.c @@ -277,6 +277,21 @@ match_startup_mode(node_rec_t *rec, char *mode) return -1; } +static void log_login_msg(struct node_rec *rec, int rc) +{ + if (rc) { + log_error("Could not login to [iface: %s, target: %s, " + "portal: %s,%d].", rec->iface.name, + rec->name, rec->conn[0].address, + rec->conn[0].port); + iscsid_handle_error(rc); + } else + printf("Login to [iface: %s, target: %s, portal: " + "%s,%d] successful.\n", rec->iface.name, + rec->name, rec->conn[0].address, + rec->conn[0].port); +} + struct iscsid_async_req { struct list_head list; void *data; @@ -294,23 +309,28 @@ static int iscsid_login_reqs_wait(struct list_head *list) rec = curr->data; err = iscsid_req_wait(MGMT_IPC_SESSION_LOGIN, curr->fd); - if (err) { - log_error("Could not login to [iface: %s, target: %s, " - "portal: %s,%d]: ", rec->iface.name, - rec->name, rec->conn[0].address, - rec->conn[0].port); - iscsid_handle_error(err); - ret = err; - } else - printf("Login to [iface: %s, target: %s, portal: " - "%s,%d]: successful\n", rec->iface.name, - rec->name, rec->conn[0].address, - rec->conn[0].port); + log_login_msg(rec, err); list_del(&curr->list); free(curr); } return ret; } + +static void log_logout_msg(struct session_info *info, int rc) +{ + if (rc) { + log_error("Could not logout of [sid: %d, target: %s, " + "portal: %s,%d].", info->sid, + info->targetname, + info->persistent_address, info->port); + iscsid_handle_error(rc); + } else + printf("Logout of [sid: %d, target: %s, " + "portal: %s,%d] successful.\n", + info->sid, info->targetname, + info->persistent_address, info->port); +} + static int iscsid_logout_reqs_wait(struct list_head *list) { struct iscsid_async_req *tmp, *curr; @@ -322,18 +342,9 @@ static int iscsid_logout_reqs_wait(struct list_head *list) info = curr->data; err = iscsid_req_wait(MGMT_IPC_SESSION_LOGOUT, curr->fd); - if (err) { - log_error("Could not logout of [sid: %d, target: %s, " - "portal: %s,%d]: ", info->sid, - info->targetname, - info->persistent_address, info->port); - iscsid_handle_error(err); + log_logout_msg(info, err); + if (err) ret = err; - } else - printf("Logout of [sid: %d, target: %s, " - "portal: %s,%d]: successful\n", - info->sid, info->targetname, - info->persistent_address, info->port); list_del(&curr->list); free(curr); } @@ -393,26 +404,25 @@ static int __logout_portal(struct session_info *info, struct list_head *list) } /* we raced with another app or instance of iscsiadm */ - switch (rc) { - case MGMT_IPC_ERR_NOT_FOUND: - rc = 0; - break; - case MGMT_IPC_OK: - if (async_req) { - list_add_tail(&async_req->list, list); - async_req->fd = fd; - async_req->data = info; - } - return 0; - default: - iscsid_handle_error(rc); - rc = EIO; - break; + if (rc) { + log_logout_msg(info, rc); + if (async_req) + free(async_req); + + if (rc == MGMT_IPC_ERR_NOT_FOUND) + return 0; + + return EIO; } - if (async_req) - free(async_req); - return rc; + if (async_req) { + list_add_tail(&async_req->list, list); + async_req->fd = fd; + async_req->data = info; + } else + log_logout_msg(info, rc); + + return 0; } static int @@ -523,8 +533,8 @@ logout_portal(void *data, struct list_head *list, struct session_info *info) /* we do not support this yet */ if (t->caps & CAP_FW_DB) { - log_error("Could not logout session [sid: %d, " - "target: %s, portal: %s,%d]", info->sid, + log_error("Could not logout session of [sid: %d, " + "target: %s, portal: %s,%d].", info->sid, info->targetname, info->persistent_address, info->port); log_error("Logout not supported for driver: %s.", t->name); @@ -602,15 +612,15 @@ static int login_portal(void *data, struct list_head *list, rec, &fd); else rc = iscsid_req_by_rec(MGMT_IPC_SESSION_LOGIN, rec); - /* we raced with another app or instance of iscsiadm */ - if (rc == MGMT_IPC_ERR_EXISTS) { - if (async_req) - free(async_req); - return 0; - } else if (rc) { - iscsid_handle_error(rc); + + if (rc) { + log_login_msg(rec, rc); if (async_req) free(async_req); + /* we raced with another app or instance of iscsiadm */ + if (rc == MGMT_IPC_ERR_EXISTS) + return 0; + return ENOTCONN; } @@ -618,7 +628,9 @@ static int login_portal(void *data, struct list_head *list, list_add_tail(&async_req->list, list); async_req->fd = fd; async_req->data = rec; - } + } else + log_login_msg(rec, rc); + return 0; }