소스 검색

knet: Don't lose log messages when knet gets busy (#165)

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Chrissie Caulfield 9 년 전
부모
커밋
65219a6300
1개의 변경된 파일7개의 추가작업 그리고 6개의 파일을 삭제
  1. 7 6
      exec/totemknet.c

+ 7 - 6
exec/totemknet.c

@@ -88,9 +88,6 @@
 /* Should match that used by cfg */
 /* Should match that used by cfg */
 #define CFG_INTERFACE_STATUS_MAX_LEN 512
 #define CFG_INTERFACE_STATUS_MAX_LEN 512
 
 
-/* Log messages received from libknet */
-#define LOG_BUFFER_SIZE 8192
-
 struct totemknet_instance {
 struct totemknet_instance {
 	struct crypto_instance *crypto_inst;
 	struct crypto_instance *crypto_inst;
 
 
@@ -457,12 +454,14 @@ static int log_deliver_fn (
 	void *data)
 	void *data)
 {
 {
 	struct totemknet_instance *instance = (struct totemknet_instance *)data;
 	struct totemknet_instance *instance = (struct totemknet_instance *)data;
-	char buffer[LOG_BUFFER_SIZE];
+	char buffer[KNET_MAX_LOG_MSG_SIZE*4];
+	char *bufptr = buffer;
+	int done = 0;
 	int len;
 	int len;
 
 
 	len = read(fd, buffer, sizeof(buffer));
 	len = read(fd, buffer, sizeof(buffer));
-	if (len) {
-		struct knet_log_msg *msg = (struct knet_log_msg *)buffer;
+	while (done < len) {
+		struct knet_log_msg *msg = (struct knet_log_msg *)bufptr;
 		switch (msg->msglevel) {
 		switch (msg->msglevel) {
 		case KNET_LOG_ERR:
 		case KNET_LOG_ERR:
 			libknet_log_printf (LOGSYS_LEVEL_ERROR, "%s", msg->msg);
 			libknet_log_printf (LOGSYS_LEVEL_ERROR, "%s", msg->msg);
@@ -477,6 +476,8 @@ static int log_deliver_fn (
 			libknet_log_printf (LOGSYS_LEVEL_DEBUG, "%s", msg->msg);
 			libknet_log_printf (LOGSYS_LEVEL_DEBUG, "%s", msg->msg);
 			break;
 			break;
 		}
 		}
+		bufptr += KNET_MAX_LOG_MSG_SIZE;
+		done += KNET_MAX_LOG_MSG_SIZE;
 	}
 	}
 	return 0;
 	return 0;
 }
 }