From: Willy Tarreau Date: Wed, 20 Jan 2021 13:55:01 +0000 (+0100) Subject: MINOR: xprt/mux: export all *_io_cb functions so that "show fd" resolves them X-Git-Tag: v2.4-dev6~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=691d503896f2dc4944782cfe989fc8b44d66a6c0;p=thirdparty%2Fhaproxy.git MINOR: xprt/mux: export all *_io_cb functions so that "show fd" resolves them In FD dumps it's often very important to figure what upper layer function is going to be called. Let's export the few I/O callbacks that appear as tasklet functions so that "show fd" can resolve them instead of printing a pointer relative to main. For example: 1028 : st=0x21(R:rA W:Ra) ev=0x01(heopI) [lc] tmask=0x2 umask=0x2 owner=0x7f00b889b200 iocb=0x65b638(sock_conn_iocb) back=0 cflg=0x00001300 fe=recv mux=H2 ctx=0x7f00c8824de0 h2c.st0=FRH .err=0 .maxid=795 .lastid=-1 .flg=0x0000 .nbst=0 .nbcs=0 .fctl_cnt=0 .send_cnt=0 .tree_cnt=0 .orph_cnt=0 .sub=1 .dsi=795 .dbuf=0@(nil)+0/0 .msi=-1 .mbuf=[1..1|32],h=[0@(nil)+0/0],t=[0@(nil)+0/0] xprt=SSL xprt_ctx=0x7f00c86d0750 xctx.st=0 .xprt=RAW .wait.ev=1 .subs=0x7f00c88252e0(ev=1 tl=0x7f00a07d1aa0 tl.calls=1047 tl.ctx=0x7f00c8824de0 tl.fct=h2_io_cb) .sent_early=0 .early_in=0 --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 9998710f0f..4ce916f048 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -353,7 +353,8 @@ DECLARE_STATIC_POOL(pool_head_fcgi_strm, "fcgi_strm", sizeof(struct fcgi_strm)); static struct task *fcgi_timeout_task(struct task *t, void *context, unsigned short state); static int fcgi_process(struct fcgi_conn *fconn); -static struct task *fcgi_io_cb(struct task *t, void *ctx, unsigned short state); +/* fcgi_io_cb is exported to see it resolved in "show fd" */ +struct task *fcgi_io_cb(struct task *t, void *ctx, unsigned short state); static inline struct fcgi_strm *fcgi_conn_st_by_id(struct fcgi_conn *fconn, int id); static struct task *fcgi_deferred_shut(struct task *t, void *ctx, unsigned short state); static struct fcgi_strm *fcgi_conn_stream_new(struct fcgi_conn *fconn, struct conn_stream *cs, struct session *sess); @@ -2926,7 +2927,7 @@ schedule: } /* this is the tasklet referenced in fconn->wait_event.tasklet */ -static struct task *fcgi_io_cb(struct task *t, void *ctx, unsigned short status) +struct task *fcgi_io_cb(struct task *t, void *ctx, unsigned short status) { struct connection *conn; struct fcgi_conn *fconn; diff --git a/src/mux_h1.c b/src/mux_h1.c index 75eb5f7fa1..857b1c380b 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -258,7 +258,8 @@ DECLARE_STATIC_POOL(pool_head_h1s, "h1s", sizeof(struct h1s)); static int h1_recv(struct h1c *h1c); static int h1_send(struct h1c *h1c); static int h1_process(struct h1c *h1c); -static struct task *h1_io_cb(struct task *t, void *ctx, unsigned short state); +/* h1_io_cb is exported to see it resolved in "show fd" */ +struct task *h1_io_cb(struct task *t, void *ctx, unsigned short state); static struct task *h1_timeout_task(struct task *t, void *context, unsigned short state); static void h1_shutw_conn(struct connection *conn, enum cs_shw_mode mode); static void h1_wake_stream_for_recv(struct h1s *h1s); @@ -2475,7 +2476,7 @@ static int h1_process(struct h1c * h1c) return -1; } -static struct task *h1_io_cb(struct task *t, void *ctx, unsigned short status) +struct task *h1_io_cb(struct task *t, void *ctx, unsigned short status) { struct connection *conn; struct tasklet *tl = (struct tasklet *)t; diff --git a/src/mux_h2.c b/src/mux_h2.c index 55ed8da48b..de8e0974ae 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -545,7 +545,8 @@ static struct task *h2_timeout_task(struct task *t, void *context, unsigned shor static int h2_send(struct h2c *h2c); static int h2_recv(struct h2c *h2c); static int h2_process(struct h2c *h2c); -static struct task *h2_io_cb(struct task *t, void *ctx, unsigned short state); +/* h2_io_cb is exported to see it resolved in "show fd" */ +struct task *h2_io_cb(struct task *t, void *ctx, unsigned short state); static inline struct h2s *h2c_st_by_id(struct h2c *h2c, int id); static int h2c_decode_headers(struct h2c *h2c, struct buffer *rxbuf, uint32_t *flags, unsigned long long *body_len); static int h2_frt_transfer_data(struct h2s *h2s); @@ -3696,7 +3697,7 @@ schedule: } /* this is the tasklet referenced in h2c->wait_event.tasklet */ -static struct task *h2_io_cb(struct task *t, void *ctx, unsigned short status) +struct task *h2_io_cb(struct task *t, void *ctx, unsigned short status) { struct connection *conn; struct tasklet *tl = (struct tasklet *)t; diff --git a/src/mux_pt.c b/src/mux_pt.c index 15309965ce..4191ee6a8c 100644 --- a/src/mux_pt.c +++ b/src/mux_pt.c @@ -53,8 +53,10 @@ static void mux_pt_destroy(struct mux_pt_ctx *ctx) } } -/* Callback, used when we get I/Os while in idle mode */ -static struct task *mux_pt_io_cb(struct task *t, void *tctx, unsigned short status) +/* Callback, used when we get I/Os while in idle mode. This one is exported so + * that "show fd" can resolve it. + */ +struct task *mux_pt_io_cb(struct task *t, void *tctx, unsigned short status) { struct mux_pt_ctx *ctx = tctx; diff --git a/src/ssl_sock.c b/src/ssl_sock.c index f866bfd08f..483662ec23 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -182,7 +182,8 @@ static struct stats_module ssl_stats_module = { INITCALL1(STG_REGISTER, stats_register_module, &ssl_stats_module); -static struct task *ssl_sock_io_cb(struct task *, void *, unsigned short); +/* ssl_sock_io_cb is exported to see it resolved in "show fd" */ +struct task *ssl_sock_io_cb(struct task *, void *, unsigned short); static int ssl_sock_handshake(struct connection *conn, unsigned int flag); /* Methods to implement OpenSSL BIO */ @@ -5578,7 +5579,7 @@ static int ssl_remove_xprt(struct connection *conn, void *xprt_ctx, void *toremo return (ctx->xprt->remove_xprt(conn, ctx->xprt_ctx, toremove_ctx, newops, newctx)); } -static struct task *ssl_sock_io_cb(struct task *t, void *context, unsigned short state) +struct task *ssl_sock_io_cb(struct task *t, void *context, unsigned short state) { struct tasklet *tl = (struct tasklet *)t; struct ssl_sock_ctx *ctx = context; diff --git a/src/xprt_handshake.c b/src/xprt_handshake.c index 752a4f3aec..15e2a8f8df 100644 --- a/src/xprt_handshake.c +++ b/src/xprt_handshake.c @@ -36,7 +36,8 @@ static size_t xprt_handshake_to_buf(struct connection *conn, void *xprt_ctx, str return 0; } -static struct task *xprt_handshake_io_cb(struct task *t, void *bctx, unsigned short state) +/* xprt_handshake_io_cb is exported to see it resolved in "show fd" */ +struct task *xprt_handshake_io_cb(struct task *t, void *bctx, unsigned short state) { struct xprt_handshake_ctx *ctx = bctx; struct connection *conn = ctx->conn; diff --git a/src/xprt_quic.c b/src/xprt_quic.c index a690b2fa8f..f8e807c1ec 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -3852,7 +3852,7 @@ int qc_prep_phdshk_pkts(struct quic_conn *qc) } /* QUIC connection packet handler task. */ -static struct task *quic_conn_io_cb(struct task *t, void *context, unsigned short state) +struct task *quic_conn_io_cb(struct task *t, void *context, unsigned short state) { struct quic_conn_ctx *ctx = context;