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;
 }
 

Reply via email to