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

Re: [PATCH] tools: remove xenstore entries on vchan server closure


  • To: "anthony.perard@xxxxxxxxxx" <anthony.perard@xxxxxxxxxx>
  • From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
  • Date: Tue, 15 Feb 2022 11:30:14 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=742Cnv8Lj8ogmhysj6T2IvuwDHMG6TjprE6oM5U6oPU=; b=K61go//pwqQuIzAYDgKugVi3Q4jjl8LMCNtSkH32DSWWGMtNIUHihavT8v5XSFuErxYYbefd9VE3GMAIaShPPNS7s2L6ONbT3xe6HBchVyxMy8AYgIYMVDimrTLAjcL011H1N2PTJuoFkxT2elBITc7XD8nTlhsQUTKUIKVflfoQKf/X3uYPg0MWfLBlkqFXDg7dTztKu5ppwtLsM9TVZVySWt5KdaiY9wNS9YK4vZjRUt8AOjHxwScsGzxEIsJP4ihKgRWAB9BWwLIxu7J9RJYVU/Vtkyql1trXTcd8yBGgxW5fUo8PA/TGf5a/M9chW71wczWPoQjfGO/CDgnJtA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cq1XW1xTQLIeQ2z2+RWP10ULhy9e+VrifKStoD+bjZfEDCmNAJ3R83/S3jJ+eb2q4jzOMUHtAHGUiUSB3eknTLGDqvpaVCzMjR5NObLJa2vbEtiZ4LaqGeDbDkvG9URhdIiAexz3W6KPFSbG+eUH1GmVacX/LTp8u9zxnAESQEJq6l36Lcx1zbGu9rZwEXTn7ZS8XTE+fGkHnH0tFm5TZjJbBNvBCCSXE4fPlli/9rNSHKQSqWLvSwQwRrIxZaCVEOR09LCDITVE9XnpeisgurJP1bEXi3QYynce5UMkTeu+4PGTynal4ceh3EETfhD4hDFciMaVaSpagF7lkJk7iA==
  • Cc: "wl@xxxxxxx" <wl@xxxxxxx>, "jgross@xxxxxxxx" <jgross@xxxxxxxx>, Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 15 Feb 2022 11:30:40 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHX7cJnOJurcgYme0yvunOBFlJKtayU40cA
  • Thread-topic: [PATCH] tools: remove xenstore entries on vchan server closure

Anthony, could you please take a look?

Thank you in advance,
Oleksandr

On 10.12.21 14:35, Oleksandr Andrushchenko wrote:
> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
>
> vchan server creates XenStore entries to advertise its event channel and
> ring, but those are not removed after the server quits.
> Add additional cleanup step, so those are removed, so clients do not try
> to connect to a non-existing server.
>
> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
> ---
>   tools/include/libxenvchan.h |  5 +++++
>   tools/libs/vchan/init.c     | 23 +++++++++++++++++++++++
>   tools/libs/vchan/io.c       |  4 ++++
>   tools/libs/vchan/vchan.h    | 31 +++++++++++++++++++++++++++++++
>   4 files changed, 63 insertions(+)
>   create mode 100644 tools/libs/vchan/vchan.h
>
> diff --git a/tools/include/libxenvchan.h b/tools/include/libxenvchan.h
> index d6010b145df2..30cc73cf97e3 100644
> --- a/tools/include/libxenvchan.h
> +++ b/tools/include/libxenvchan.h
> @@ -86,6 +86,11 @@ struct libxenvchan {
>       int blocking:1;
>       /* communication rings */
>       struct libxenvchan_ring read, write;
> +     /**
> +      * Base xenstore path for storing ring/event data used by the server
> +      * during cleanup.
> +      * */
> +     char *xs_path;
>   };
>   
>   /**
> diff --git a/tools/libs/vchan/init.c b/tools/libs/vchan/init.c
> index c8510e6ce98a..c6b8674ef541 100644
> --- a/tools/libs/vchan/init.c
> +++ b/tools/libs/vchan/init.c
> @@ -46,6 +46,8 @@
>   #include <xen/sys/gntdev.h>
>   #include <libxenvchan.h>
>   
> +#include "vchan.h"
> +
>   #ifndef PAGE_SHIFT
>   #define PAGE_SHIFT 12
>   #endif
> @@ -251,6 +253,10 @@ static int init_xs_srv(struct libxenvchan *ctrl, int 
> domain, const char* xs_base
>       char ref[16];
>       char* domid_str = NULL;
>       xs_transaction_t xs_trans = XBT_NULL;
> +
> +     // store the base path so we can clean up on server closure
> +     ctrl->xs_path = strdup(xs_base);
> +
>       xs = xs_open(0);
>       if (!xs)
>               goto fail;
> @@ -298,6 +304,23 @@ retry_transaction:
>       return ret;
>   }
>   
> +void close_xs_srv(struct libxenvchan *ctrl)
> +{
> +     struct xs_handle *xs;
> +
> +     if (!ctrl->xs_path)
> +             return;
> +
> +     xs = xs_open(0);
> +     if (!xs)
> +             goto fail;
> +
> +     xs_rm(xs, XBT_NULL, ctrl->xs_path);
> +
> +fail:
> +     free(ctrl->xs_path);
> +}
> +
>   static int min_order(size_t siz)
>   {
>       int rv = PAGE_SHIFT;
> diff --git a/tools/libs/vchan/io.c b/tools/libs/vchan/io.c
> index da303fbc01ca..1f201ad554f2 100644
> --- a/tools/libs/vchan/io.c
> +++ b/tools/libs/vchan/io.c
> @@ -40,6 +40,8 @@
>   #include <xenctrl.h>
>   #include <libxenvchan.h>
>   
> +#include "vchan.h"
> +
>   #ifndef PAGE_SHIFT
>   #define PAGE_SHIFT 12
>   #endif
> @@ -384,5 +386,7 @@ void libxenvchan_close(struct libxenvchan *ctrl)
>               if (ctrl->gnttab)
>                       xengnttab_close(ctrl->gnttab);
>       }
> +     if (ctrl->is_server)
> +             close_xs_srv(ctrl);
>       free(ctrl);
>   }
> diff --git a/tools/libs/vchan/vchan.h b/tools/libs/vchan/vchan.h
> new file mode 100644
> index 000000000000..621016ef42e5
> --- /dev/null
> +++ b/tools/libs/vchan/vchan.h
> @@ -0,0 +1,31 @@
> +/**
> + * @file
> + * @section AUTHORS
> + *
> + * Copyright (C) 2021 EPAM Systems Inc.
> + *
> + * @section LICENSE
> + *
> + *  This library is free software; you can redistribute it and/or
> + *  modify it under the terms of the GNU Lesser General Public
> + *  License as published by the Free Software Foundation; either
> + *  version 2.1 of the License, or (at your option) any later version.
> + *
> + *  This library is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + *  Lesser General Public License for more details.
> + *
> + *  You should have received a copy of the GNU Lesser General Public
> + *  License along with this library; If not, see 
> <http://www.gnu.org/licenses/>.
> + *
> + * @section DESCRIPTION
> + *
> + *  This file contains common libxenvchan declarations.
> + */
> +#ifndef LIBVCHAN_H
> +#define LIBVCHAN_H
> +
> +void close_xs_srv(struct libxenvchan *ctrl);
> +
> +#endif /* LIBVCHAN_H */

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.