[dm-devel] [PATCH 23/35] multipathd: uxlsnr: move client handling to separate function

Benjamin Marzinski bmarzins at redhat.com
Thu Sep 16 02:21:52 UTC 2021


On Fri, Sep 10, 2021 at 01:41:08PM +0200, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
> 
> No functional changes at this point. handle_client() will become
> the state machine for handling client requests.
> 
> Signed-off-by: Martin Wilck <mwilck at suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> ---
>  multipathd/uxlsnr.c | 67 ++++++++++++++++++++++-----------------------
>  1 file changed, 32 insertions(+), 35 deletions(-)
> 
> diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c
> index 147f81a..2fb23c8 100644
> --- a/multipathd/uxlsnr.c
> +++ b/multipathd/uxlsnr.c
> @@ -394,14 +394,42 @@ static int uxsock_trigger(char *str, char **reply, int *len,
>  	return r;
>  }
>  
> +static void handle_client(struct client *c, void *trigger_data)
> +{
> +	int rlen;
> +	char *inbuf, *reply;
> +
> +	if (recv_packet_from_client(c->fd, &inbuf, uxsock_timeout) != 0) {
> +		dead_client(c);
> +		return;
> +	}
> +
> +	if (!inbuf) {
> +		condlog(4, "recv_packet_from_client get null request");
> +		return;
> +	}
> +
> +	condlog(4, "cli[%d]: Got request [%s]", c->fd, inbuf);
> +	uxsock_trigger(inbuf, &reply, &rlen,
> +		       _socket_client_is_root(c->fd),
> +		       trigger_data);
> +
> +	if (reply) {
> +		if (send_packet(c->fd, reply) != 0)
> +			dead_client(c);
> +		else
> +			condlog(4, "cli[%d]: Reply [%d bytes]", c->fd, rlen);
> +		FREE(reply);
> +		reply = NULL;
> +	}
> +	FREE(inbuf);
> +}
> +
>  /*
>   * entry point
>   */
>  void *uxsock_listen(long ux_sock, void *trigger_data)
>  {
> -	int rlen;
> -	char *inbuf;
> -	char *reply;
>  	sigset_t mask;
>  	int max_pfds = MIN_POLLS + POLLFDS_BASE;
>  	/* conf->sequence_nr will be 1 when uxsock_listen is first called */
> @@ -504,8 +532,6 @@ void *uxsock_listen(long ux_sock, void *trigger_data)
>  		/* see if a client wants to speak to us */
>  		for (i = POLLFDS_BASE; i < n_pfds; i++) {
>  			if (polls[i].revents & (POLLIN|POLLHUP|POLLERR)) {
> -				struct timespec start_time;
> -
>  				c = NULL;
>  				pthread_mutex_lock(&client_lock);
>  				list_for_each_entry(tmp, &clients, node) {
> @@ -526,36 +552,7 @@ void *uxsock_listen(long ux_sock, void *trigger_data)
>  					dead_client(c);
>  					continue;
>  				}
> -				get_monotonic_time(&start_time);
> -				if (recv_packet_from_client(c->fd, &inbuf,
> -							    uxsock_timeout)
> -				    != 0) {
> -					dead_client(c);
> -					continue;
> -				}
> -				if (!inbuf) {
> -					condlog(4, "recv_packet_from_client "
> -						"get null request");
> -					continue;
> -				}
> -				condlog(4, "cli[%d]: Got request [%s]",
> -					polls[i].fd, inbuf);
> -				uxsock_trigger(inbuf, &reply, &rlen,
> -					       _socket_client_is_root(c->fd),
> -					       trigger_data);
> -				if (reply) {
> -					if (send_packet(c->fd,
> -							reply) != 0) {
> -						dead_client(c);
> -					} else {
> -						condlog(4, "cli[%d]: "
> -							"Reply [%d bytes]",
> -							polls[i].fd, rlen);
> -					}
> -					FREE(reply);
> -					reply = NULL;
> -				}
> -				FREE(inbuf);
> +				handle_client(c, trigger_data);
>  			}
>  		}
>  		/* see if we got a non-fatal signal */
> -- 
> 2.33.0




More information about the dm-devel mailing list