From: Steven Rostedt <rostedt@goodmis.org>
To: linux-trace-devel@vger.kernel.org
Subject: [PATCH 29/38] trace-cmd: Remove global use_tcp variable
Date: Wed, 03 Jan 2018 12:52:31 -0500 [thread overview]
Message-ID: <20180103175339.084944880@goodmis.org> (raw)
In-Reply-To: 20180103175202.044283643@goodmis.org
[-- Attachment #1: 0029-trace-cmd-Remove-global-use_tcp-variable.patch --]
[-- Type: text/plain, Size: 8003 bytes --]
From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
In order to have trace-listen be able to do a handshake before the fork, it
can not have a use_tcp variables. Turn use_tcp as a flag in msg_handle.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
trace-cmd.h | 2 ++
trace-listen.c | 25 +++++++++++++------------
trace-msg.c | 18 ++++++++----------
trace-msg.h | 4 ----
trace-record.c | 6 ++++++
5 files changed, 29 insertions(+), 26 deletions(-)
diff --git a/trace-cmd.h b/trace-cmd.h
index 2fe4b208c561..30badbd47cc6 100644
--- a/trace-cmd.h
+++ b/trace-cmd.h
@@ -303,11 +303,13 @@ void tracecmd_enable_tracing(void);
enum tracecmd_msg_bits {
TRACECMD_MSG_BIT_CLIENT = 0,
TRACECMD_MSG_BIT_SERVER = 1,
+ TRACECMD_MSG_BIT_USE_TCP = 2,
};
enum tracecmd_msg_flags {
TRACECMD_MSG_FL_CLIENT = (1 << TRACECMD_MSG_BIT_CLIENT),
TRACECMD_MSG_FL_SERVER = (1 << TRACECMD_MSG_BIT_SERVER),
+ TRACECMD_MSG_FL_USE_TCP = (1 << TRACECMD_MSG_BIT_USE_TCP),
};
/* for both client and server */
diff --git a/trace-listen.c b/trace-listen.c
index 2e17839cffec..a1e35ef19761 100644
--- a/trace-listen.c
+++ b/trace-listen.c
@@ -112,11 +112,11 @@ static int read_string(int fd, char *buf, size_t size)
return i;
}
-static int process_option(char *option)
+static int process_option(struct tracecmd_msg_handle *msg_handle, char *option)
{
/* currently the only option we have is to us TCP */
if (strcmp(option, "TCP") == 0) {
- use_tcp = 1;
+ msg_handle->flags |= TRACECMD_MSG_FL_USE_TCP;
return 1;
}
return 0;
@@ -225,7 +225,7 @@ void pdie(const char *fmt, ...)
}
static int process_udp_child(int sfd, const char *host, const char *port,
- int cpu, int page_size)
+ int cpu, int page_size, int use_tcp)
{
struct sockaddr_storage peer_addr;
socklen_t peer_addr_len;
@@ -292,7 +292,7 @@ static int process_udp_child(int sfd, const char *host, const char *port,
#define START_PORT_SEARCH 1500
#define MAX_PORT_SEARCH 6000
-static int udp_bind_a_port(int start_port, int *sfd)
+static int udp_bind_a_port(int start_port, int *sfd, int use_tcp)
{
struct addrinfo hints;
struct addrinfo *result, *rp;
@@ -337,7 +337,7 @@ static int udp_bind_a_port(int start_port, int *sfd)
}
static void fork_udp_reader(int sfd, const char *node, const char *port,
- int *pid, int cpu, int pagesize)
+ int *pid, int cpu, int pagesize, int use_tcp)
{
int ret;
@@ -347,7 +347,7 @@ static void fork_udp_reader(int sfd, const char *node, const char *port,
pdie("creating udp reader");
if (!*pid) {
- ret = process_udp_child(sfd, node, port, cpu, pagesize);
+ ret = process_udp_child(sfd, node, port, cpu, pagesize, use_tcp);
if (ret < 0)
pdie("Problem with udp reader %d", ret);
}
@@ -356,7 +356,7 @@ static void fork_udp_reader(int sfd, const char *node, const char *port,
}
static int open_udp(const char *node, const char *port, int *pid,
- int cpu, int pagesize, int start_port)
+ int cpu, int pagesize, int start_port, int use_tcp)
{
int sfd;
int num_port;
@@ -365,11 +365,11 @@ static int open_udp(const char *node, const char *port, int *pid,
* udp_bind_a_port() currently does not return an error, but if that
* changes in the future, we have a check for it now.
*/
- num_port = udp_bind_a_port(start_port, &sfd);
+ num_port = udp_bind_a_port(start_port, &sfd, use_tcp);
if (num_port < 0)
return num_port;
- fork_udp_reader(sfd, node, port, pid, cpu, pagesize);
+ fork_udp_reader(sfd, node, port, pid, cpu, pagesize, use_tcp);
return num_port;
}
@@ -495,7 +495,7 @@ static int communicate_with_client(struct tracecmd_msg_handle *msg_handle,
s = size - t;
} while (t);
- s = process_option(option);
+ s = process_option(msg_handle, option);
free(option);
/* do we understand this option? */
ret = -EINVAL;
@@ -504,7 +504,7 @@ static int communicate_with_client(struct tracecmd_msg_handle *msg_handle,
}
}
- if (use_tcp)
+ if (msg_handle->flags & TRACECMD_MSG_FL_USE_TCP)
plog("Using TCP for live connection\n");
ret = 0;
@@ -547,6 +547,7 @@ static void destroy_all_readers(int cpus, int *pid_array, const char *node,
static int *create_all_readers(int cpus, const char *node, const char *port,
int pagesize, struct tracecmd_msg_handle *msg_handle)
{
+ int use_tcp = msg_handle->flags & TRACECMD_MSG_FL_USE_TCP;
char buf[BUFSIZ];
int *port_array;
int *pid_array;
@@ -572,7 +573,7 @@ static int *create_all_readers(int cpus, const char *node, const char *port,
/* Now create a UDP port for each CPU */
for (cpu = 0; cpu < cpus; cpu++) {
udp_port = open_udp(node, port, &pid, cpu,
- pagesize, start_port);
+ pagesize, start_port, use_tcp);
if (udp_port < 0)
goto out_free;
port_array[cpu] = udp_port;
diff --git a/trace-msg.c b/trace-msg.c
index 9b01197574da..0d564c4aee32 100644
--- a/trace-msg.c
+++ b/trace-msg.c
@@ -75,10 +75,6 @@ static inline void dprint(const char *fmt, ...)
#define MIN_META_SIZE (sizeof(struct tracecmd_msg_header) + \
sizeof(struct tracecmd_msg_meta))
-/* for both client and server */
-bool use_tcp;
-
-/* for client */
unsigned int page_size;
struct tracecmd_msg_server {
@@ -198,13 +194,14 @@ enum msg_opt_command {
MSGOPT_USETCP = 1,
};
-static int make_tinit(struct tracecmd_msg *msg, int total_cpus)
+static int make_tinit(struct tracecmd_msg_handle *msg_handle,
+ struct tracecmd_msg *msg, int total_cpus)
{
struct tracecmd_msg_opt *opt;
int opt_num = 0;
int size = MIN_TINIT_SIZE;
- if (use_tcp) {
+ if (msg_handle->flags & TRACECMD_MSG_FL_USE_TCP) {
opt_num++;
opt = malloc(sizeof(*opt));
if (!opt)
@@ -434,7 +431,7 @@ int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
*client_ports = NULL;
tracecmd_msg_init(MSG_TINIT, &send_msg);
- ret = make_tinit(&send_msg, total_cpus);
+ ret = make_tinit(msg_handle, &send_msg, total_cpus);
if (ret < 0)
return ret;
@@ -459,11 +456,12 @@ int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle,
return 0;
}
-static bool process_option(struct tracecmd_msg_opt *opt)
+static bool process_option(struct tracecmd_msg_handle *msg_handle,
+ struct tracecmd_msg_opt *opt)
{
/* currently the only option we have is to us TCP */
if (ntohl(opt->opt_cmd) == MSGOPT_USETCP) {
- use_tcp = true;
+ msg_handle->flags |= TRACECMD_MSG_FL_USE_TCP;
return true;
}
return false;
@@ -539,7 +537,7 @@ int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle,
ret = -EINVAL;
goto error;
}
- s = process_option(opt);
+ s = process_option(msg_handle, opt);
/* do we understand this option? */
if (!s) {
plog("Cannot understand(%d:%d:%d)\n",
diff --git a/trace-msg.h b/trace-msg.h
index da563ea55c85..bfd065c06324 100644
--- a/trace-msg.h
+++ b/trace-msg.h
@@ -10,10 +10,6 @@
#define V1_PROTOCOL 1
#define V2_PROTOCOL 2
-/* for both client and server */
-extern bool use_tcp;
-
-/* for client */
extern unsigned int page_size;
void plog(const char *fmt, ...);
diff --git a/trace-record.c b/trace-record.c
index 3decb57a9a6c..9512fd9853ad 100644
--- a/trace-record.c
+++ b/trace-record.c
@@ -95,6 +95,8 @@ static struct tracecmd_output *network_handle;
/* Max size to let a per cpu file get */
static int max_kb;
+static bool use_tcp;
+
static int do_ptrace;
static int filter_task;
@@ -2719,6 +2721,7 @@ static void communicate_with_listener_v1(struct tracecmd_msg_handle *msg_handle)
if (page_size >= UDP_MAX_PACKET) {
warning("page size too big for UDP using TCP in live read");
use_tcp = 1;
+ msg_handle->flags |= TRACECMD_MSG_FL_USE_TCP;
}
if (use_tcp) {
@@ -2859,6 +2862,9 @@ again:
if (!msg_handle)
die("Failed to allocate message handle");
+ if (use_tcp)
+ msg_handle->flags |= TRACECMD_MSG_FL_USE_TCP;
+
if (proto_ver == V2_PROTOCOL) {
check_protocol_version(msg_handle);
if (proto_ver == V1_PROTOCOL) {
--
2.13.2
next prev 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 ` [PATCH 09/38] trace-cmd: Move size and cmd in tracecmd_msg into its own header struct Steven Rostedt
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 ` Steven Rostedt [this message]
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=20180103175339.084944880@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).