Re: [mdadm PATCH 6/9] mdmon: connect_monitor should use socket from either dir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 28 Feb 2010 15:44:24 +0100
Luca Berra <bluca@xxxxxxxxxx> wrote:

> connect_monitor is called by ping_monitor in various places
> the socket should be checked in either VAR_RUN or ALT_RUN

I agree with this even less, for much the same reasons.

If you still see a need for something like this in my latest git tree (not
yet published - wait an hour or two at least), please explain.

Thanks,
NeilBrown

> 
> Signed-off-by: Luca Berra <bluca@xxxxxxxxxx>
> ---
>   mdmon.c |    2 +-
>   msg.c   |   15 ++++++++++++---
>   msg.h   |    2 +-
>   util.c  |    2 +-
>   4 files changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/mdmon.c b/mdmon.c
> index 3410e84..3627a80 100644
> --- a/mdmon.c
> +++ b/mdmon.c
> @@ -447,7 +447,7 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
>   			victim = mdmon_pid(container->devnum, pid_dir);
>   		}
>   		if (victim >= 0)
> -			victim_sock = connect_monitor(container->devname);
> +			victim_sock = connect_monitor(container->devname, pid_dir);
>   	}
>   
>   	ignore = chdir("/");
> diff --git a/msg.c b/msg.c
> index d2d8445..78a7964 100644
> --- a/msg.c
> +++ b/msg.c
> @@ -138,7 +138,7 @@ int wait_reply(int fd, int tmo)
>   	return receive_message(fd, &msg, tmo);
>   }
>   
> -int connect_monitor(char *devname)
> +int connect_monitor(char *devname, const char *pid_dir)
>   {
>   	char path[100];
>   	int sfd;
> @@ -147,6 +147,15 @@ int connect_monitor(char *devname)
>   	int pos;
>   	char *c;
>   
> +	/* if pid_dir is null try to detect it */
> +	if (!pid_dir) {
> +		sfd = connect_monitor(devname, VAR_RUN);
> +		if (sfd >= 0)
> +			return sfd;
> +		else
> +			return connect_monitor(devname, ALT_RUN);
> +	}
> +
>   	pos = sprintf(path, "%s/", pid_dir);
>   	if (is_subarray(devname)) {
>   		devname++;
> @@ -199,7 +208,7 @@ int fping_monitor(int sfd)
>   /* give the monitor a chance to update the metadata */
>   int ping_monitor(char *devname)
>   {
> -	int sfd = connect_monitor(devname);
> +	int sfd = connect_monitor(devname, NULL);
>   	int err = fping_monitor(sfd);
>   
>   	close(sfd);
> @@ -213,7 +222,7 @@ int ping_monitor(char *devname)
>    */
>   int ping_manager(char *devname)
>   {
> -	int sfd = connect_monitor(devname);
> +	int sfd = connect_monitor(devname, NULL);
>   	struct metadata_update msg = { .len = -1 };
>   	int err = 0;
>   
> diff --git a/msg.h b/msg.h
> index f8e89fd..46299db 100644
> --- a/msg.h
> +++ b/msg.h
> @@ -25,7 +25,7 @@ extern int receive_message(int fd, struct metadata_update *msg, int tmo);
>   extern int send_message(int fd, struct metadata_update *msg, int tmo);
>   extern int ack(int fd, int tmo);
>   extern int wait_reply(int fd, int tmo);
> -extern int connect_monitor(char *devname);
> +extern int connect_monitor(char *devname, const char *pid_dir);
>   extern int ping_monitor(char *devname);
>   extern int fping_monitor(int sock);
>   extern int ping_manager(char *devname);
> diff --git a/util.c b/util.c
> index 50e04bf..c22886b 100644
> --- a/util.c
> +++ b/util.c
> @@ -1585,7 +1585,7 @@ int flush_metadata_updates(struct supertype *st)
>   		return -1;
>   	}
>   
> -	sfd = connect_monitor(devnum2devname(st->container_dev));
> +	sfd = connect_monitor(devnum2devname(st->container_dev), NULL);
>   	if (sfd < 0)
>   		return -1;
>   

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux