From patchwork Tue Sep 12 13:48:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksandr Grytsov X-Patchwork-Id: 9949271 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0B92660360 for ; Tue, 12 Sep 2017 13:51:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EE49428F9C for ; Tue, 12 Sep 2017 13:51:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E1899287A9; Tue, 12 Sep 2017 13:51:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 122B3287A9 for ; Tue, 12 Sep 2017 13:51:07 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1drlYQ-0005ed-4i; Tue, 12 Sep 2017 13:48:42 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1drlYO-0005XC-BY for xen-devel@lists.xenproject.org; Tue, 12 Sep 2017 13:48:40 +0000 Received: from [85.158.143.35] by server-4.bemta-6.messagelabs.com id A9/1D-03283-8B5E7B95; Tue, 12 Sep 2017 13:48:40 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNIsWRWlGSWpSXmKPExsVyMfS6k+6Wp9s jDeadFrf4vmUykwOjx+EPV1gCGKNYM/OS8isSWDM+H97GXvAmomLnpuWsDYzbHbsYuTiEBGYw Slx5eYQZxGEReMkisXleK5gjIdDPKvGk8wFTFyMnkJMksX7/TVYIO03i1I5tzBB2pcTr3SvZQ WwhAXmJgy2X2SHGTmGSaDh1iQ0kwSagJXH/9gowW0RASeLeqslgQ5kFUiT2rmtjBLGFBYIk/v 8/ClbDIqAq8atxMlicV8BR4sXDRWwQy+Qkbp7rBFvMCRRv/93FDLHYQeLKmj1sExgFFzAyrGL UKE4tKkst0jU01EsqykzPKMlNzMzRNTQw08tNLS5OTE/NSUwq1kvOz93ECAw6BiDYwfhpWcAh RkkOJiVRXuX72yOF+JLyUyozEosz4otKc1KLDzFqcHAI/Hz6t4VRiiUvPy9VSYJ30hOgOsGi1 PTUirTMHGBcwJRKcPAoifBWgqR5iwsSc4sz0yFSpxjtOS7cufSHiePYpstA8sCeW0Cy4+bdP0 xCYFOlxHnzQdoEQNoySvPghsLi+BKjrJQwLyPQyUI8BalFuZklqPKvGMU5GJWEebeATOHJzCu B2/0K6CwmoLN4Lm0BOaskESEl1cB4cK3CLfnNk8s3ahQJmr96bcUWz+wq1/GFM7Uuuvdnpt+m 4qQf/8O5tl2WmWUXJhRjnf8pc3v7/8BaHxHlj3NZrx3nED3ImVKp1J05sfakR2z3SkWnGWtLd 7rsUD4VnzZJ1jpCrOM2p1Vz1A4Nu0MXW4TUXOrknOXijtq8fPeioIspR2QBlxJLcUaioRZzUX EiAHt2TLreAgAA X-Env-Sender: al1img@gmail.com X-Msg-Ref: server-13.tower-21.messagelabs.com!1505224115!76595955!1 X-Originating-IP: [209.85.215.66] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 35552 invoked from network); 12 Sep 2017 13:48:36 -0000 Received: from mail-lf0-f66.google.com (HELO mail-lf0-f66.google.com) (209.85.215.66) by server-13.tower-21.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 12 Sep 2017 13:48:36 -0000 Received: by mail-lf0-f66.google.com with SMTP id m199so5376102lfe.5 for ; Tue, 12 Sep 2017 06:48:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=x42iH691Fi3mn5Zj+JaqhoqOH//E0j9cgW60X/J9nps=; b=CmQutuzc7SL57r0BeBdz7eLTrJL7z4Zjc0KyEoJWe3Dy+meHx2eYoTJzadRGOktn21 yQwtsjlIm7DL4bh/KVjPpPxplSkBdHZVPru3193jZGLVJXRZWDiB2XuJpwn0j3Tbciux gV74jh8A3PV5XbXkn7x+h0uNb2igoN3igTexOyEKfQwUKa0NzFPa6y+Bhkzs5wQUiPZs T5Bgz0IOoUuPNPM8Aj9xCUV4lLHzpZLBKAtC1Peb/3fRv3gScZ4cDHGEuTe2uZGncUk/ eb+TSqBqqLn9JG0L4Lg/5NgqaSUjQu+FiNYbWxGXkJ52NaxpohoKY2pdXEBSmVYAW3PR mKXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=x42iH691Fi3mn5Zj+JaqhoqOH//E0j9cgW60X/J9nps=; b=BiyN/4GAIm7q7JRJH0un2UNk+jzOTvYCZfufTnzgoB+5QysNFV/zQ4fif8w3JCVtIy cw6xaTw9opCeTz+VQrpg3D5cYW2h8d4ACYvFXVG+mmxiAq+S8bmwaR32h3ow2CCSRyDd KFNZEF7JROOinNhmumZoDCAMrnYCn7uzKYKGks7132IyDC24/cJBzIpswW1d5jxwpWeK k9BSVniZ18EB0AGnq6AL+RdgAbSfyY+EmuySA5DUbOFRYrZ4IXycen9FIyC2JBHfJsJN Rcnbw7nkoTDkWQLBd7UOOgIbVr5IAhT79/qKQQLuzwpxVB7Yei9AiNL6ri0YUgXIPT7P N/9g== X-Gm-Message-State: AHPjjUjdxKKd0gljV8TpRw/XBwBXyOr6zJq+FFBJl1Xpbi3g9Gp/2EXh RQauG/QfZ9yUsHYEsfA= X-Google-Smtp-Source: AOwi7QCcWg95lCE9IxZLql9FFnCENjg2J02XTaebJP/FLVmNIuswCNpEwwxJsr9xwrEKwfE6G2XJ/g== X-Received: by 10.25.196.70 with SMTP id u67mr5874186lff.144.1505224115297; Tue, 12 Sep 2017 06:48:35 -0700 (PDT) Received: from al1-pc.kyiv.epam.com (ll-56.209.223.85.sovam.net.ua. [85.223.209.56]) by smtp.gmail.com with ESMTPSA id s5sm690074lfb.14.2017.09.12.06.48.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 12 Sep 2017 06:48:34 -0700 (PDT) From: Oleksandr Grytsov To: xen-devel@lists.xenproject.org Date: Tue, 12 Sep 2017 16:48:14 +0300 Message-Id: <1505224098-19330-10-git-send-email-al1img@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1505224098-19330-1-git-send-email-al1img@gmail.com> References: <1505224098-19330-1-git-send-email-al1img@gmail.com> Cc: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, Oleksandr Grytsov Subject: [Xen-devel] [PATCH v6 09/13] libxl: change disk to use generic getting list functions X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Oleksandr Grytsov Signed-off-by: Oleksandr Grytsov Acked-by: Wei Liu --- tools/libxl/libxl.h | 9 +++- tools/libxl/libxl_checkpoint_device.c | 7 ++- tools/libxl/libxl_create.c | 4 +- tools/libxl/libxl_disk.c | 83 +++++++++-------------------------- tools/libxl/libxl_internal.h | 7 --- tools/ocaml/libs/xl/xenlight_stubs.c | 3 +- tools/xl/xl_block.c | 3 +- 7 files changed, 34 insertions(+), 82 deletions(-) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index e386357..d5a3ab7 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -1749,9 +1749,14 @@ int libxl_device_disk_destroy(libxl_ctx *ctx, uint32_t domid, const libxl_asyncop_how *ao_how) LIBXL_EXTERNAL_CALLERS_ONLY; -libxl_device_disk *libxl_device_disk_list(libxl_ctx *ctx, uint32_t domid, int *num); +libxl_device_disk *libxl_device_disk_list(libxl_ctx *ctx, + uint32_t domid, int *num) + LIBXL_EXTERNAL_CALLERS_ONLY; +void libxl_device_disk_list_free(libxl_device_disk* list, int num) + LIBXL_EXTERNAL_CALLERS_ONLY; int libxl_device_disk_getinfo(libxl_ctx *ctx, uint32_t domid, - libxl_device_disk *disk, libxl_diskinfo *diskinfo); + libxl_device_disk *disk, libxl_diskinfo *diskinfo) + LIBXL_EXTERNAL_CALLERS_ONLY; /* * Insert a CD-ROM device. A device corresponding to disk must already diff --git a/tools/libxl/libxl_checkpoint_device.c b/tools/libxl/libxl_checkpoint_device.c index 01e74b5..f6a4437 100644 --- a/tools/libxl/libxl_checkpoint_device.c +++ b/tools/libxl/libxl_checkpoint_device.c @@ -66,7 +66,8 @@ void libxl__checkpoint_devices_setup(libxl__egc *egc, cds->nics = libxl_device_nic_list(CTX, cds->domid, &cds->num_nics); if (cds->device_kind_flags & (1 << LIBXL__DEVICE_KIND_VBD)) - cds->disks = libxl_device_disk_list(CTX, cds->domid, &cds->num_disks); + cds->disks = libxl__device_list(gc, &libxl__disk_devtype, cds->domid, + "disk", &cds->num_disks); if (cds->num_nics == 0 && cds->num_disks == 0) goto out; @@ -221,9 +222,7 @@ static void devices_teardown_cb(libxl__egc *egc, cds->num_nics = 0; /* clean disk */ - for (i = 0; i < cds->num_disks; i++) - libxl_device_disk_dispose(&cds->disks[i]); - free(cds->disks); + libxl__device_list_free(&libxl__disk_devtype, cds->disks, cds->num_disks); cds->disks = NULL; cds->num_disks = 0; diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 70048fe..0ef54d2 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -938,8 +938,8 @@ static void initiate_domain_create(libxl__egc *egc, store_libxl_entry(gc, domid, &d_config->b_info); for (i = 0; i < d_config->num_disks; i++) { - ret = libxl__device_disk_setdefault(gc, domid, &d_config->disks[i], - false); + ret = libxl__disk_devtype.set_default(gc, domid, &d_config->disks[i], + false); if (ret) { LOGD(ERROR, domid, "Unable to set disk defaults for disk %d", i); goto error_out; diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c index 91c77ad..c20cc49 100644 --- a/tools/libxl/libxl_disk.c +++ b/tools/libxl/libxl_disk.c @@ -152,8 +152,8 @@ void libxl_evdisable_disk_eject(libxl_ctx *ctx, libxl_evgen_disk_eject *evg) { GC_FREE; } -int libxl__device_disk_setdefault(libxl__gc *gc, uint32_t domid, - libxl_device_disk *disk, bool hotplug) +static int libxl__device_disk_setdefault(libxl__gc *gc, uint32_t domid, + libxl_device_disk *disk, bool hotplug) { int rc; @@ -181,7 +181,7 @@ int libxl__device_disk_setdefault(libxl__gc *gc, uint32_t domid, return rc; } -int libxl__device_from_disk(libxl__gc *gc, uint32_t domid, +static int libxl__device_from_disk(libxl__gc *gc, uint32_t domid, const libxl_device_disk *disk, libxl__device *device) { @@ -472,17 +472,15 @@ static void libxl__device_disk_add(libxl__egc *egc, uint32_t domid, device_disk_add(egc, domid, disk, aodev, NULL, NULL); } -static int libxl__device_disk_from_xenstore(libxl__gc *gc, - const char *libxl_path, - libxl_device_disk *disk) +static int libxl__disk_from_xenstore(libxl__gc *gc, const char *libxl_path, + libxl_devid devid, + libxl_device_disk *disk) { libxl_ctx *ctx = libxl__gc_owner(gc); unsigned int len; char *tmp; int rc; - libxl_device_disk_init(disk); - const char *backend_path; rc = libxl__xs_read_checked(gc, XBT_NULL, GCSPRINTF("%s/backend", libxl_path), @@ -617,69 +615,28 @@ int libxl_vdev_to_device_disk(libxl_ctx *ctx, uint32_t domid, } libxl_path = GCSPRINTF("%s/device/vbd/%d", dom_xl_path, devid); - rc = libxl__device_disk_from_xenstore(gc, libxl_path, disk); + rc = libxl__disk_from_xenstore(gc, libxl_path, devid, disk); out: GC_FREE; return rc; } -static int libxl__append_disk_list(libxl__gc *gc, - uint32_t domid, - libxl_device_disk **disks, - int *ndisks) -{ - char *libxl_dir_path = NULL; - char **dir = NULL; - unsigned int n = 0; - libxl_device_disk *pdisk = NULL, *pdisk_end = NULL; - int rc=0; - int initial_disks = *ndisks; - - libxl_dir_path = GCSPRINTF("%s/device/vbd", - libxl__xs_libxl_path(gc, domid)); - dir = libxl__xs_directory(gc, XBT_NULL, libxl_dir_path, &n); - if (dir && n) { - libxl_device_disk *tmp; - tmp = realloc(*disks, sizeof (libxl_device_disk) * (*ndisks + n)); - if (tmp == NULL) - return ERROR_NOMEM; - *disks = tmp; - pdisk = *disks + initial_disks; - pdisk_end = *disks + initial_disks + n; - for (; pdisk < pdisk_end; pdisk++, dir++) { - const char *p; - p = GCSPRINTF("%s/%s", libxl_dir_path, *dir); - if ((rc=libxl__device_disk_from_xenstore(gc, p, pdisk))) - goto out; - *ndisks += 1; - } - } -out: - return rc; -} - libxl_device_disk *libxl_device_disk_list(libxl_ctx *ctx, uint32_t domid, int *num) { - GC_INIT(ctx); - libxl_device_disk *disks = NULL; - int rc; + libxl_device_disk *r; - *num = 0; + GC_INIT(ctx); - rc = libxl__append_disk_list(gc, domid, &disks, num); - if (rc) goto out_err; + r = libxl__device_list(gc, &libxl__disk_devtype, domid, "disk", num); GC_FREE; - return disks; -out_err: - LOG(ERROR, "Unable to list disks"); - while (disks && *num) { - (*num)--; - libxl_device_disk_dispose(&disks[*num]); - } - free(disks); - return NULL; + return r; +} + +void libxl_device_disk_list_free(libxl_device_disk *list, int num) +{ + libxl__device_list_free(&libxl__disk_devtype, list, num); } int libxl_device_disk_getinfo(libxl_ctx *ctx, uint32_t domid, @@ -783,7 +740,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, goto out; } - disks = libxl_device_disk_list(ctx, domid, &num); + disks = libxl__device_list(gc, &libxl__disk_devtype, domid, "disk", &num); for (i = 0; i < num; i++) { if (disks[i].is_cdrom && !strcmp(disk->vdev, disks[i].vdev)) { @@ -921,9 +878,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, out: libxl__xs_transaction_abort(gc, &t); - for (i = 0; i < num; i++) - libxl_device_disk_dispose(&disks[i]); - free(disks); + libxl__device_list_free(&libxl__disk_devtype, disks, num); libxl_device_disk_dispose(&disk_empty); libxl_device_disk_dispose(&disk_saved); libxl_domain_config_dispose(&d_config); @@ -1250,6 +1205,8 @@ static int libxl_device_disk_dm_needed(void *e, unsigned domid) DEFINE_DEVICE_TYPE_STRUCT(disk, .merge = libxl_device_disk_merge, .dm_needed = libxl_device_disk_dm_needed, + .from_xenstore = (int (*)(libxl__gc *, const char *, libxl_devid, void *)) + libxl__disk_from_xenstore, .skip_attach = 1 ); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 6b21812..de1706c 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1242,9 +1242,6 @@ _hidden int libxl__domain_create_info_setdefault(libxl__gc *gc, libxl_domain_create_info *c_info); _hidden int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info); -_hidden int libxl__device_disk_setdefault(libxl__gc *gc, uint32_t domid, - libxl_device_disk *disk, - bool hotplug); _hidden int libxl__device_nic_setdefault(libxl__gc *gc, uint32_t domid, libxl_device_nic *nic, bool hotplug); _hidden void libxl__rdm_setdefault(libxl__gc *gc, @@ -1754,10 +1751,6 @@ _hidden char *libxl__blktap_devpath(libxl__gc *gc, */ _hidden int libxl__device_destroy_tapdisk(libxl__gc *gc, const char *params); -_hidden int libxl__device_from_disk(libxl__gc *gc, uint32_t domid, - const libxl_device_disk *disk, - libxl__device *device); - /* Calls poll() again - useful to check whether a signaled condition * is still true. Cannot fail. Returns currently-true revents. */ _hidden short libxl__fd_poll_recheck(libxl__egc *egc, int fd, short events); diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c index 98b52b9..55f09d7 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -763,9 +763,8 @@ value stub_xl_device_disk_list(value ctx, value domid) Field(list, 1) = temp; temp = list; Store_field(list, 0, Val_device_disk(&c_list[i])); - libxl_device_disk_dispose(&c_list[i]); } - free(c_list); + libxl_device_disk_list_free(c_list, nb); CAMLreturn(list); } diff --git a/tools/xl/xl_block.c b/tools/xl/xl_block.c index da337ef..acaf9b9 100644 --- a/tools/xl/xl_block.c +++ b/tools/xl/xl_block.c @@ -88,9 +88,8 @@ int main_blocklist(int argc, char **argv) diskinfo.state, diskinfo.evtch, diskinfo.rref, diskinfo.backend); libxl_diskinfo_dispose(&diskinfo); } - libxl_device_disk_dispose(&disks[i]); } - free(disks); + libxl_device_disk_list_free(disks, nb); } return 0; }