linux-trace-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-trace-devel@vger.kernel.org
Subject: [PATCH 09/38] trace-cmd: Move size and cmd in tracecmd_msg into its own header struct
Date: Wed, 03 Jan 2018 12:52:11 -0500	[thread overview]
Message-ID: <20180103175336.060949341@goodmis.org> (raw)
In-Reply-To: 20180103175202.044283643@goodmis.org

[-- Attachment #1: 0009-trace-cmd-Move-size-and-cmd-in-tracecmd_msg-into-its.patch --]
[-- Type: text/plain, Size: 6661 bytes --]

From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

Move the size and cmd fields of the structure tracecmd_msg into its own
header. This will allow us to remove the individual pointers that exist in
the anonymous union of the tracecmd_msg structure into their own union. But
that will require the individual msg types size defines changing. That
change will be simplified if the header is separate.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 trace-msg.c | 63 ++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 33 insertions(+), 30 deletions(-)

diff --git a/trace-msg.c b/trace-msg.c
index 09202d930ace..2e4a9bfb1d64 100644
--- a/trace-msg.c
+++ b/trace-msg.c
@@ -44,8 +44,7 @@ typedef __be32 be32;
 /* Two (4k) pages is the max transfer for now */
 #define MSG_MAX_LEN			8192
 
-					/* size + cmd */
-#define MSG_HDR_LEN			((sizeof(be32)) + (sizeof(be32)))
+#define MSG_HDR_LEN			sizeof(struct tracecmd_msg_header)
 
 #define MSG_DATA_LEN			(MSG_MAX_LEN - MSG_HDR_LEN)
 
@@ -105,13 +104,17 @@ enum tracecmd_msg_cmd {
 	MSG_FINMETA	= 7,
 };
 
+struct tracecmd_msg_header {
+	be32	size;
+	be32	cmd;
+} __attribute__((packed));
+
 struct tracecmd_msg {
-	be32 size;
-	be32 cmd;
+	struct tracecmd_msg_header		hdr;
 	union {
-		struct tracecmd_msg_tinit tinit;
-		struct tracecmd_msg_rinit rinit;
-		struct tracecmd_msg_meta meta;
+		struct tracecmd_msg_tinit	tinit;
+		struct tracecmd_msg_rinit	rinit;
+		struct tracecmd_msg_meta	meta;
 	};
 } __attribute__((packed));
 
@@ -124,16 +127,16 @@ static int msg_write(int fd, struct tracecmd_msg *msg, int size, void *addr)
 	ret = __do_write_check(fd, msg, size);
 	if (ret < 0)
 		return ret;
-	if (ntohl(msg->size) <= size)
+	if (ntohl(msg->hdr.size) <= size)
 		return 0;
-	return __do_write_check(fd, addr, ntohl(msg->size) - size);
+	return __do_write_check(fd, addr, ntohl(msg->hdr.size) - size);
 }
 
 static ssize_t msg_do_write_check(int fd, struct tracecmd_msg *msg)
 {
 	int ret;
 
-	switch (ntohl(msg->cmd)) {
+	switch (ntohl(msg->hdr.cmd)) {
 	case MSG_TINIT:
 		ret = msg_write(fd, msg, MIN_TINIT_SIZE, msg->tinit.opt);
 		break;
@@ -144,7 +147,7 @@ static ssize_t msg_do_write_check(int fd, struct tracecmd_msg *msg)
 		ret = msg_write(fd, msg, MIN_META_SIZE, msg->meta.buf);
 		break;
 	default:
-		ret = __do_write_check(fd, msg, ntohl(msg->size));
+		ret = __do_write_check(fd, msg, ntohl(msg->hdr.size));
 	}
 
 	return ret;
@@ -175,7 +178,7 @@ static int make_tinit(struct tracecmd_msg *msg)
 	msg->tinit.page_size = htonl(page_size);
 	msg->tinit.opt_num = htonl(opt_num);
 
-	msg->size = htonl(size);
+	msg->hdr.size = htonl(size);
 
 	return 0;
 }
@@ -204,7 +207,7 @@ static int make_rinit(struct tracecmd_msg *msg)
 		ptr++;
 	}
 
-	msg->size = htonl(size);
+	msg->hdr.size = htonl(size);
 
 	return 0;
 }
@@ -219,7 +222,7 @@ static int tracecmd_msg_create(u32 cmd, struct tracecmd_msg *msg)
 	}
 
 	memset(msg, 0, sizeof(*msg));
-	msg->cmd = htonl(cmd);
+	msg->hdr.cmd = htonl(cmd);
 
 	switch (cmd) {
 	case MSG_TINIT:
@@ -232,14 +235,14 @@ static int tracecmd_msg_create(u32 cmd, struct tracecmd_msg *msg)
 		break;
 	}
 
-	msg->size = htonl(MSG_HDR_LEN);
+	msg->hdr.size = htonl(MSG_HDR_LEN);
 
 	return ret;
 }
 
 static void msg_free(struct tracecmd_msg *msg)
 {
-	switch (ntohl(msg->cmd)) {
+	switch (ntohl(msg->hdr.cmd)) {
 	case MSG_TINIT:
 		free(msg->tinit.opt);
 		break;
@@ -306,11 +309,11 @@ static int msg_read_extra(int fd, void *buf, int *n,
 
 static int tracecmd_msg_read_extra(int fd, struct tracecmd_msg *msg, int *n)
 {
-	int size = ntohl(msg->size);
+	int size = ntohl(msg->hdr.size);
 	int rsize;
 	int ret;
 
-	switch (ntohl(msg->cmd)) {
+	switch (ntohl(msg->hdr.cmd)) {
 	case MSG_TINIT:
 		msg->tinit.opt = NULL;
 
@@ -353,7 +356,7 @@ static int tracecmd_msg_recv(int fd, struct tracecmd_msg *msg)
 	if (ret < 0)
 		return ret;
 
-	size = ntohl(msg->size);
+	size = ntohl(msg->hdr.size);
 	if (size > MSG_MAX_LEN)
 		/* too big */
 		goto error;
@@ -403,7 +406,7 @@ static int tracecmd_msg_wait_for_msg(int fd, struct tracecmd_msg *msg)
 		return ret;
 	}
 
-	cmd = ntohl(msg->cmd);
+	cmd = ntohl(msg->hdr.cmd);
 	if (cmd == MSG_CLOSE)
 		return -ECONNABORTED;
 
@@ -454,9 +457,9 @@ static void error_operation_for_server(struct tracecmd_msg *msg)
 {
 	u32 cmd;
 
-	cmd = ntohl(msg->cmd);
+	cmd = ntohl(msg->hdr.cmd);
 
-	warning("Message: cmd=%d size=%d\n", cmd, ntohl(msg->size));
+	warning("Message: cmd=%d size=%d\n", cmd, ntohl(msg->hdr.size));
 }
 
 #define MAX_OPTION_SIZE 4096
@@ -478,7 +481,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
 		return ret;
 	}
 
-	cmd = ntohl(msg.cmd);
+	cmd = ntohl(msg.hdr.cmd);
 	if (cmd != MSG_TINIT) {
 		ret = -EINVAL;
 		goto error;
@@ -500,7 +503,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
 
 	options = ntohl(msg.tinit.opt_num);
 	for (i = 0; i < options; i++) {
-		if (size + sizeof(*opt) > ntohl(msg.size)) {
+		if (size + sizeof(*opt) > ntohl(msg.hdr.size)) {
 			plog("Not enough message for options\n");
 			ret = -EINVAL;
 			goto error;
@@ -508,7 +511,7 @@ int tracecmd_msg_initial_setting(int fd, int *cpus, int *pagesize)
 		opt = (void *)msg.tinit.opt + offset;
 		offset += ntohl(opt->size);
 		size += ntohl(opt->size);
-		if (ntohl(msg.size) < size) {
+		if (ntohl(msg.hdr.size) < size) {
 			plog("Not enough message for options\n");
 			ret = -EINVAL;
 			goto error;
@@ -583,7 +586,7 @@ int tracecmd_msg_metadata_send(int fd, const char *buf, int size)
 		return -ENOMEM;
 
 	msg.meta.size = htonl(MSG_META_MAX_LEN);
-	msg.size = htonl(MIN_META_SIZE + MSG_META_MAX_LEN);
+	msg.hdr.size = htonl(MIN_META_SIZE + MSG_META_MAX_LEN);
 
 	n = size;
 	do {
@@ -592,7 +595,7 @@ int tracecmd_msg_metadata_send(int fd, const char *buf, int size)
 			n -= MSG_META_MAX_LEN;
 			count += MSG_META_MAX_LEN;
 		} else {
-			msg.size = htonl(MIN_META_SIZE + n);
+			msg.hdr.size = htonl(MIN_META_SIZE + n);
 			msg.meta.size = htonl(n);
 			memcpy(msg.meta.buf, buf+count, n);
 			n = 0;
@@ -641,7 +644,7 @@ int tracecmd_msg_collect_metadata(int ifd, int ofd)
 			return ret;
 		}
 
-		cmd = ntohl(msg.cmd);
+		cmd = ntohl(msg.hdr.cmd);
 		if (cmd == MSG_FINMETA) {
 			/* Finish receiving meta data */
 			break;
@@ -672,12 +675,12 @@ int tracecmd_msg_collect_metadata(int ifd, int ofd)
 			return ret;
 		}
 
-		cmd = ntohl(msg.cmd);
+		cmd = ntohl(msg.hdr.cmd);
 		if (cmd == MSG_CLOSE)
 			/* Finish this connection */
 			break;
 		else {
-			warning("Not accept the message %d", ntohl(msg.cmd));
+			warning("Not accept the message %d", ntohl(msg.hdr.cmd));
 			ret = -EINVAL;
 			goto error;
 		}
-- 
2.13.2

  parent reply	other threads:[~2018-01-03 17:53 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03 17:52 [PATCH 00/38] trace-cmd: Simplify the msg handling Steven Rostedt
2018-01-03 17:52 ` [PATCH 01/38] trace-cmd recorder: Check if pipe_size was modified by fcntl(F_GETPIPE_SZ) Steven Rostedt
2018-01-03 17:52 ` [PATCH 02/38] pevent: Simplify pointer print logic and fix %pF Steven Rostedt
2018-01-03 17:52 ` [PATCH 03/38] pevent: Handle new pointer processing of bprint strings Steven Rostedt
2018-01-03 17:52 ` [PATCH 04/38] trace-cmd record: Fix clearing out the ctx->instance when used in for_all_instances() Steven Rostedt
2018-01-03 17:52 ` [PATCH 05/38] trace-cmd: Remove the creating of msg out of tracecmd_msg_send() Steven Rostedt
2018-01-03 17:52 ` [PATCH 06/38] trace-cmd: Move tracecmd_msg_send_and_wait_for_msg() into its only user Steven Rostedt
2018-01-03 17:52 ` [PATCH 07/38] trace-cmd: Turn tracecmd_msg data into an anonymous union Steven Rostedt
2018-01-03 17:52 ` [PATCH 08/38] trace-cmd: Remove unused structure tracecmd_msg_error Steven Rostedt
2018-01-03 17:52 ` Steven Rostedt [this message]
2018-01-03 17:52 ` [PATCH 10/38] trace-cmd: Move the tracecmd_msg pointers into their own union Steven Rostedt
2018-01-03 17:52 ` [PATCH 11/38] trace-cmd: Just use the buf field for sending pointers Steven Rostedt
2018-01-03 17:52 ` [PATCH 12/38] trace-cmd: Use an array to map msg types and min sizes Steven Rostedt
2018-01-03 17:52 ` [PATCH 13/38] trace-cmd: Merge msg_do_write_check() into msg_write() Steven Rostedt
2018-01-03 17:52 ` [PATCH 14/38] trace-cmd: Simplify msg_free() by using min sizes Steven Rostedt
2018-01-03 17:52 ` [PATCH 15/38] trace-cmd: Add tracecmd_msg_init() helper function Steven Rostedt
2018-01-03 17:52 ` [PATCH 16/38] trace-cmd: Remove mulitplexer tracecmd_msg_create() Steven Rostedt
2018-01-03 17:52 ` [PATCH 17/38] trace-cmd: Simplify msg_read_extra() Steven Rostedt
2018-01-03 17:52 ` [PATCH 18/38] trace-cmd: Have msg_free() zero out msg contents Steven Rostedt
2018-01-03 17:52 ` [PATCH 19/38] trace-cmd: Verify RINIT was received after TINIT msg sent Steven Rostedt
2018-01-03 17:52 ` [PATCH 20/38] trace-cmd: Make send_metadata a flag in the output handle Steven Rostedt
2018-01-03 17:52 ` [PATCH 21/38] trace-cmd: Pass cpu count and port array to make_rinit() Steven Rostedt
2018-01-03 17:52 ` [PATCH 22/38] trace-cmd: Pass cpu_count instead of having it as a global Steven Rostedt
2018-01-03 17:52 ` [PATCH 23/38] trace-cmd: Pass in client_ports instead of using a global variable Steven Rostedt
2018-01-03 17:52 ` [PATCH 24/38] trace-cmd msg: Add debug prints of messages sent and received Steven Rostedt
2018-01-03 17:52 ` [PATCH 25/38] trace-cmd msg: Move the saved closing fd to the caller Steven Rostedt
2018-01-03 17:52 ` [PATCH 26/38] trace-cmd listen: Add better output on error of connections Steven Rostedt
2018-01-03 17:52 ` [PATCH 27/38] trace-cmd msg: Create a msg_handle to pass around for saved state Steven Rostedt
2018-01-03 17:52 ` [PATCH 28/38] trace-cmd msg: Add server structure of msg_handler Steven Rostedt
2018-01-03 20:31   ` [PATCH 28/38 v2] " Steven Rostedt
2018-01-03 17:52 ` [PATCH 29/38] trace-cmd: Remove global use_tcp variable Steven Rostedt
2018-01-03 17:52 ` [PATCH 30/38] trace-cmd: Move protocol version into msg_handler Steven Rostedt
2018-01-03 17:52 ` [PATCH 31/38] tracecmd: Clean up handling of cpu_count Steven Rostedt
2018-01-03 17:52 ` [PATCH 32/38] tracecmd listen: Have pagesize passed as return not parameter Steven Rostedt
2018-01-03 17:52 ` [PATCH 33/38] trace-cmd: Have cpu_count reside in instances and not be global Steven Rostedt
2018-01-03 17:52 ` [PATCH 34/38] trace-cmd: Add option CPUCOUNT to buffer instance options Steven Rostedt
2018-01-03 17:52 ` [PATCH 35/38] trace-cmd: Have msg_handle part of the buffer instance Steven Rostedt
2018-01-03 17:52 ` [PATCH 36/38] trace-cmd record: Allow instances to be recorded over the network Steven Rostedt
2018-01-03 17:52 ` [PATCH 37/38] trace-cmd: Have keep and profile be flags of buffer instance Steven Rostedt
2018-01-03 17:52 ` [PATCH 38/38] trace-cmd: Add network handle into " Steven Rostedt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180103175336.060949341@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=linux-trace-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).