From patchwork Mon Jun 13 12:44:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongji Xie X-Patchwork-Id: 12879454 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E6C16C43334 for ; Mon, 13 Jun 2022 12:48:22 +0000 (UTC) Received: from localhost ([::1]:53914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jUR-0005df-V0 for qemu-devel@archiver.kernel.org; Mon, 13 Jun 2022 08:48:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50906) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jRR-00030G-Dg for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:14 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:38735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o0jRL-0005uq-Qg for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:10 -0400 Received: by mail-pl1-x636.google.com with SMTP id n18so5007418plg.5 for ; Mon, 13 Jun 2022 05:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hzDd+xOOmP7Hcut1ZZgj5ewS4q2+QDOC60lzlhKXxHQ=; b=UCF1kNdjUKjlva684bc8w6mH95K41eN1EMqVAJv7+OBD9hqsx7PyJ9JMsa5D7YJ3o1 wUaaZFDScY9d8eIggMwz919LIX6SbiSZevsxYJYlCQme3150DVnfXjLlNwSIi1C+hQg9 XmsaTwKKzB13W+RVQykOD2F6vbAs7Ms9UPhXY4revKgy6luWxXk0H4Y9BpuOW8IYEPd4 AsSHl/EcDiyGtGpqrrCZ9qkALqdaFb5u/BKhB2wLgl0y5aesepspLA/VdVMvtP6lulGS TUOxqGiSBE6Bf2p4jafhjLjsc9s7RpRd4xBYbjaW8yvpkRtpPrTPpXHjtr8vineIPl22 l5Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hzDd+xOOmP7Hcut1ZZgj5ewS4q2+QDOC60lzlhKXxHQ=; b=D57++0WVTqf3EJnYYjzIuIuu7MogDMAjAid3/cASHUzTw7gGT+jlTzasrAX0Tnfp6R F3TuiPoo6zJCRtjEHohKuMDZccl3W8RVxiCEA+JakpGF43Wgym89ArSSU1xKzV2tzr2f wXIFtMI0pJ2HhG37fzRNSpjjmg7jNYq0chQ/xuFYkjwhxtNRiNmvnvbNp4DtaB+4VP5h Kngp1hJEtiFWIQ6+ZiajpeLyLbYFLSOGj0cdkB3ss/LzO2Z56DUE95YUFFZYh7wGZpS4 74OvQfpQGjUHEY0iCmc0Vmrm+zegZSbvLHI7Eb2zVSXkMgxuInzyzHtz+Tn+uxPfpeNO 5n/w== X-Gm-Message-State: AOAM532GmAhxI22FtmxNuGQ9qolL8NomRY83hu2N9XIS3LzwxjWQnaEr eiTYQSOj3AZMBfN2HBteJQu6 X-Google-Smtp-Source: ABdhPJwFVVFPeSreawM0gmRDtEu+DtzdAnp1pFBk/Z4u9afvhQXN/asDwf4YLIIyRiP49cTZRzEfSg== X-Received: by 2002:a17:90b:4d8b:b0:1e3:30bd:5a35 with SMTP id oj11-20020a17090b4d8b00b001e330bd5a35mr15831201pjb.152.1655124306014; Mon, 13 Jun 2022 05:45:06 -0700 (PDT) Received: from localhost ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id t22-20020aa79396000000b0051c4ecb0e3dsm5250050pfe.193.2022.06.13.05.45.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 05:45:05 -0700 (PDT) From: Xie Yongji To: kwolf@redhat.com, stefanha@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 1/5] libvduse: Fix resources leak in vduse_dev_destroy() Date: Mon, 13 Jun 2022 20:44:59 +0800 Message-Id: <20220613124503.156-2-xieyongji@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613124503.156-1-xieyongji@bytedance.com> References: <20220613124503.156-1-xieyongji@bytedance.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=xieyongji@bytedance.com; helo=mail-pl1-x636.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" This fixes resource leak when the fd is zero in vduse_dev_destroy(). Fixes: 8dbd281c1675 ("libvduse: Add VDUSE (vDPA Device in Userspace) library") Signed-off-by: Xie Yongji --- subprojects/libvduse/libvduse.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subprojects/libvduse/libvduse.c b/subprojects/libvduse/libvduse.c index 78bb777402..e781bfa907 100644 --- a/subprojects/libvduse/libvduse.c +++ b/subprojects/libvduse/libvduse.c @@ -1374,11 +1374,11 @@ int vduse_dev_destroy(VduseDev *dev) free(dev->vqs[i].resubmit_list); } free(dev->vqs); - if (dev->fd > 0) { + if (dev->fd >= 0) { close(dev->fd); dev->fd = -1; } - if (dev->ctrl_fd > 0) { + if (dev->ctrl_fd >= 0) { if (ioctl(dev->ctrl_fd, VDUSE_DESTROY_DEV, dev->name)) { ret = -errno; } From patchwork Mon Jun 13 12:45:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongji Xie X-Patchwork-Id: 12879456 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 17967C43334 for ; Mon, 13 Jun 2022 12:52:27 +0000 (UTC) Received: from localhost ([::1]:58450 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jYQ-0000Zb-3g for qemu-devel@archiver.kernel.org; Mon, 13 Jun 2022 08:52:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jRS-00033d-9p for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:14 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:44003) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o0jRQ-0005vg-6Y for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:13 -0400 Received: by mail-pl1-x630.google.com with SMTP id r1so4986183plo.10 for ; Mon, 13 Jun 2022 05:45:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0y2TFEqOSWX2sasE6c7pK+W7e00REmrQJniw6QVW8Dc=; b=hoSeOVOMbmnI0lpTHpA+4EFlINclzEXOy49z1vBrnf5cYtH4ouzFdcPE86RnFZQsQK goeSwgKJoVTGOOPSoj6q5c4VakkeB7dEqnDSxYYrnXKVNqbbkyMoU5s3GWZcQKb3KZzO eDqgVOohzlFbCKJHVnflJtL8xJezyWl6v3/glP7XgMeGSN7/i+94cpfFWrowUFv4kWPD lw8L5mOsicXd9AvD3YeESMZlba+sc1o6ySSKNV3OPGVfHjriGlwg9W93pFg/mUIKHnkv k5xT+bORb3eiQialUM9+SlnneHc+gue3YD5xP2mNJa+jekb0zpjVpAzRQleBlnTUJZa6 V4eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0y2TFEqOSWX2sasE6c7pK+W7e00REmrQJniw6QVW8Dc=; b=oZVUtEipZnvFy+jaSDK0Nwxd4FFgM8EQrtFHOb3/LBMAofM+tJeI81qUr+qDMUvSPR BbnKF4EZgFE1PD0+tyma8kaprRpVYlxb09+uc04GGuxITK3WoFXeASJt+mRFgKHDkxTC kEhoeShy47UBPAgYtedscWdSADVcNG9owhM7lwFquMTszLEsoz/w/spyvYF1x6NeONXa 20wrcluLLW+MReUA1mzxXtRi9zEzgnsSCwC4w9D4dm9qo+ncs3rgSD+22zDfsTLKV7xN dgf1H31KfWMiw3IFT0U13g0hjSpEEF7UlMkwur3cpfLfUfncd2z/2fzMfEcfg1OELRvx W9YA== X-Gm-Message-State: AOAM533X57rYEsUWmWBGUEm/SVpqHDbkWxBjZU+cqs2k+3/6eEypPIEq X+mBwfX/vQB09ZlJoozQIFiX X-Google-Smtp-Source: ABdhPJw4UoTzkOCLkPWZuj3zHaSDm0uxWtXmNFB6sd6LIl0PyEQxdzT0g7aQ+SCsaINq47J9e27ABA== X-Received: by 2002:a17:902:ea0c:b0:163:ed09:9e5f with SMTP id s12-20020a170902ea0c00b00163ed099e5fmr58561385plg.86.1655124310532; Mon, 13 Jun 2022 05:45:10 -0700 (PDT) Received: from localhost ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id t14-20020a62d14e000000b00519303c55acsm5304851pfl.1.2022.06.13.05.45.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 05:45:09 -0700 (PDT) From: Xie Yongji To: kwolf@redhat.com, stefanha@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 2/5] vduse-blk: Don't unlink the reconnect file if device exists Date: Mon, 13 Jun 2022 20:45:00 +0800 Message-Id: <20220613124503.156-3-xieyongji@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613124503.156-1-xieyongji@bytedance.com> References: <20220613124503.156-1-xieyongji@bytedance.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=xieyongji@bytedance.com; helo=mail-pl1-x630.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We should not unlink the reconnect file if vduse_dev_destroy() fails with -EBUSY which means the VDUSE device has not been removed from the vDPA bus. Otherwise, we might fail on the reconnection later. Fixes: 730abef0e873 ("libvduse: Add support for reconnecting") Signed-off-by: Xie Yongji --- block/export/vduse-blk.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/block/export/vduse-blk.c b/block/export/vduse-blk.c index 3b10349173..c3a89894ae 100644 --- a/block/export/vduse-blk.c +++ b/block/export/vduse-blk.c @@ -316,12 +316,15 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, static void vduse_blk_exp_delete(BlockExport *exp) { VduseBlkExport *vblk_exp = container_of(exp, VduseBlkExport, export); + int ret; blk_remove_aio_context_notifier(exp->blk, blk_aio_attached, blk_aio_detach, vblk_exp); blk_set_dev_ops(exp->blk, NULL, NULL); - vduse_dev_destroy(vblk_exp->dev); - unlink(vblk_exp->recon_file); + ret = vduse_dev_destroy(vblk_exp->dev); + if (ret != -EBUSY) { + unlink(vblk_exp->recon_file); + } g_free(vblk_exp->recon_file); } From patchwork Mon Jun 13 12:45:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongji Xie X-Patchwork-Id: 12879533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B7F12C433EF for ; Mon, 13 Jun 2022 13:04:53 +0000 (UTC) Received: from localhost ([::1]:45356 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jkS-0002zm-Ja for qemu-devel@archiver.kernel.org; Mon, 13 Jun 2022 09:04:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51086) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jRg-0003J0-3G for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:28 -0400 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]:35442) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o0jRe-00064R-F3 for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:27 -0400 Received: by mail-qv1-xf31.google.com with SMTP id u8so4240423qvj.2 for ; Mon, 13 Jun 2022 05:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tpwj4iCawFu7SFnzkW//trv7YNVTZc0mprYQAMb2zUk=; b=YOUgvN/9fxKGg0XUditFHOEJ+eQiZBS8Rphwab8WRfB6B4QjqDuM4TU2IkhYokmU3h RMLjNAyPq10zR8RTMece7q+imVH5jdu+ewjOxWt5jTmLokyHVXDxa2fBGVoWa+6usTRi Xr9c/eOC5ZiP6BJ1BPZGzzxM5rZdlLLTMNVaHbv6OePiRKEWAFQbg3EksMxxFXQVbaQm Arm/k6FFaETVy2gIR4CKSTra+aZ93Q3Cm9zZXKlLIAyYkwOlwUPEWR20ObqCHAf+3KK1 0cBDlJqS9wrSiL5cjr97L8W3ODqQu6XqkQFXSgu60NC4WNO8bOtRxStTaenvtUq9ATnM pwAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tpwj4iCawFu7SFnzkW//trv7YNVTZc0mprYQAMb2zUk=; b=iurNrjRyZY2tKMMix+lQvxt8YJqk5CaZPDc0oTfvk2rx8KPVRpzUPwsBmXOPOuSFP7 8SPRtsuShSg5nzSFKFieQ3f+ZBmNgzO+v1SJHxJkmLqvz27bFeORkemQimsTp2RjuFqo cdvEBhSCZXvBOock/NpKvR7Y9jEhKQco2trR3avKHIMzjI35rIoBikWIpQlhWZFdWuyw i5nR+guc5Y5Prxyp+1+pORIBWkRQ1lEBgQln1liIwD0l6s+4YXxfqT18c4BbGdyENHTP eldQrwVALaS0+t7JAc1jXmCCZ+i4f1xyliAJZboiHJOtHyJ/grvEZeSftK4Fvw4zLwEY QB3g== X-Gm-Message-State: AOAM530f/l7/HrTqjvfLBzkbt/Lf2a3a+gF9KuZg2jiO7+Cj9hqtQnb1 xet+JTVy2pycXcgXkv5dM6uYHo/AkXn/EgE= X-Google-Smtp-Source: ABdhPJxje0I+Uw6FfvHWPZMCgGaiH+9RKF51u7zEdjcoscAlKOdvYcQUM+De9/7N76ByloZp3rrdww== X-Received: by 2002:a05:6a00:170b:b0:51b:cf4b:9187 with SMTP id h11-20020a056a00170b00b0051bcf4b9187mr57176893pfc.15.1655124314732; Mon, 13 Jun 2022 05:45:14 -0700 (PDT) Received: from localhost ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id pg8-20020a17090b1e0800b001e28e80a8d6sm5112097pjb.38.2022.06.13.05.45.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 05:45:13 -0700 (PDT) From: Xie Yongji To: kwolf@redhat.com, stefanha@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 3/5] vduse-blk: Don't delete the export until all inflight I/Os completed Date: Mon, 13 Jun 2022 20:45:01 +0800 Message-Id: <20220613124503.156-4-xieyongji@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613124503.156-1-xieyongji@bytedance.com> References: <20220613124503.156-1-xieyongji@bytedance.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::f31; envelope-from=xieyongji@bytedance.com; helo=mail-qv1-xf31.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Don't delete the export until all inflight I/Os completed. Otherwise, it might lead to a use-after-free. Fixes: cc241b5505b2 ("vduse-blk: Implement vduse-blk export") Signed-off-by: Xie Yongji --- block/export/vduse-blk.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/block/export/vduse-blk.c b/block/export/vduse-blk.c index c3a89894ae..251d73c841 100644 --- a/block/export/vduse-blk.c +++ b/block/export/vduse-blk.c @@ -31,6 +31,7 @@ typedef struct VduseBlkExport { VduseDev *dev; uint16_t num_queues; char *recon_file; + unsigned int inflight; } VduseBlkExport; typedef struct VduseBlkReq { @@ -38,6 +39,18 @@ typedef struct VduseBlkReq { VduseVirtq *vq; } VduseBlkReq; +static void vduse_blk_inflight_inc(VduseBlkExport *vblk_exp) +{ + vblk_exp->inflight++; +} + +static void vduse_blk_inflight_dec(VduseBlkExport *vblk_exp) +{ + if (--vblk_exp->inflight == 0) { + aio_wait_kick(); + } +} + static void vduse_blk_req_complete(VduseBlkReq *req, size_t in_len) { vduse_queue_push(req->vq, &req->elem, in_len); @@ -68,10 +81,13 @@ static void coroutine_fn vduse_blk_virtio_process_req(void *opaque) } vduse_blk_req_complete(req, in_len); + vduse_blk_inflight_dec(vblk_exp); } static void vduse_blk_vq_handler(VduseDev *dev, VduseVirtq *vq) { + VduseBlkExport *vblk_exp = vduse_dev_get_priv(dev); + while (1) { VduseBlkReq *req; @@ -83,6 +99,8 @@ static void vduse_blk_vq_handler(VduseDev *dev, VduseVirtq *vq) Coroutine *co = qemu_coroutine_create(vduse_blk_virtio_process_req, req); + + vduse_blk_inflight_inc(vblk_exp); qemu_coroutine_enter(co); } } @@ -168,6 +186,8 @@ static void vduse_blk_detach_ctx(VduseBlkExport *vblk_exp) } aio_set_fd_handler(vblk_exp->export.ctx, vduse_dev_get_fd(vblk_exp->dev), true, NULL, NULL, NULL, NULL, NULL); + + AIO_WAIT_WHILE(vblk_exp->export.ctx, vblk_exp->inflight > 0); } @@ -332,7 +352,9 @@ static void vduse_blk_exp_request_shutdown(BlockExport *exp) { VduseBlkExport *vblk_exp = container_of(exp, VduseBlkExport, export); + aio_context_acquire(vblk_exp->export.ctx); vduse_blk_detach_ctx(vblk_exp); + aio_context_acquire(vblk_exp->export.ctx); } const BlockExportDriver blk_exp_vduse_blk = { From patchwork Mon Jun 13 12:45:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongji Xie X-Patchwork-Id: 12879529 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8CBACCCA47B for ; Mon, 13 Jun 2022 13:02:08 +0000 (UTC) Received: from localhost ([::1]:42108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jhm-0000h2-TW for qemu-devel@archiver.kernel.org; Mon, 13 Jun 2022 09:02:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51080) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jRf-0003Hy-ID for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:27 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:46686) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o0jRZ-0005zg-Tz for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:27 -0400 Received: by mail-pg1-x529.google.com with SMTP id l4so4366479pgh.13 for ; Mon, 13 Jun 2022 05:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CZ7G7Gujczw3DW8+iuBOrN7bUoP98YSa5d9uHEJ9yLY=; b=TqXP022yl6wNwxai99Ut2DOZR9pMvYNPV/tJ+WQQ0Ul/OqZEWsJJNe7uMjZFuU4RDj KVW1SbgI4YgmXM6GCzNGOGYRys+FV5t9KBXnx7/LCGLHmUutGk9/UTNOIZhuysTJ6DUY vYWTOZcJWgmdmKePG5qEy/qCx5FR/e8SMPL/iRahvh1NYFZ+KIF7MGU1bF+f9fgapUrS 84wvkFJvl5ACkaZzIq5MGZ/DW8HFlYffGWELLOjQPxuxY++VgGy5z7hCMZAo0KKn+x5R HfkpWtmueFcf/DFoDtg81/bL85C7pf6oLLpjHMDJzGxDcuII7pUQtmY9UO1qHXJxHrAZ lzDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CZ7G7Gujczw3DW8+iuBOrN7bUoP98YSa5d9uHEJ9yLY=; b=KJxQGe+MKPqb9wjlydrY5ey0+aIgmqnxRCLKDELKm+H4y4Ki6e4WlIufknhQ0yJgZr GM/JqW6l734sWIuNrkWRad5hB4uBYNsomTFkg/5nVcQNHwT96bEBlQoWxYTuehaztyVq VQ2mNkOGZE9wI59sNu1SE2oFd/PKYiZoNhq6+MMCRPO0Oyql6ltJsRvumunnAw4eOuY6 CHR8JDopXEZ7sTwXZMUCIdeRmqBsU1j28mh38vOStmrM0bZIpDMEmEa6NzQUH4DZVeV3 27fxszKdwBwOYhywRmDX8L0WNunSQLtqlaHN74IR/8wrcvW4ijXNZmNNkvVav3RrjHJM jQaQ== X-Gm-Message-State: AOAM531kL/nPFRv7+2KRsbzhpRDIaXrrybnhYUPVf7h3+LFxRjR7zYnG IztbAjvnAEbP6dqM9ff75d3K X-Google-Smtp-Source: ABdhPJxRNgoUDcXjY1UlKX/kM4ml3yvzcyrKcVlKuuAcSXS9+nMB8F5kLyfL2mmQhMj7/eIel0PUTw== X-Received: by 2002:a63:8443:0:b0:3fc:a29a:49ae with SMTP id k64-20020a638443000000b003fca29a49aemr52125733pgd.592.1655124320507; Mon, 13 Jun 2022 05:45:20 -0700 (PDT) Received: from localhost ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id iz4-20020a170902ef8400b00162037fbb68sm4986017plb.215.2022.06.13.05.45.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 05:45:18 -0700 (PDT) From: Xie Yongji To: kwolf@redhat.com, stefanha@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 4/5] vduse-blk: Add serial option Date: Mon, 13 Jun 2022 20:45:02 +0800 Message-Id: <20220613124503.156-5-xieyongji@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613124503.156-1-xieyongji@bytedance.com> References: <20220613124503.156-1-xieyongji@bytedance.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=xieyongji@bytedance.com; helo=mail-pg1-x529.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Add a 'serial' option to allow user to specify this value explicitly. And the default value is changed to an empty string as what we did in "hw/block/virtio-blk.c". Signed-off-by: Xie Yongji --- block/export/vduse-blk.c | 20 ++++++++++++++------ block/export/vhost-user-blk-server.c | 4 +++- block/export/virtio-blk-handler.h | 2 +- docs/tools/qemu-storage-daemon.rst | 2 +- qapi/block-export.json | 4 +++- storage-daemon/qemu-storage-daemon.c | 1 + 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/block/export/vduse-blk.c b/block/export/vduse-blk.c index 251d73c841..066e088b00 100644 --- a/block/export/vduse-blk.c +++ b/block/export/vduse-blk.c @@ -235,7 +235,7 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, Error *local_err = NULL; struct virtio_blk_config config = { 0 }; uint64_t features; - int i; + int i, ret; if (vblk_opts->has_num_queues) { num_queues = vblk_opts->num_queues; @@ -265,7 +265,8 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, } vblk_exp->num_queues = num_queues; vblk_exp->handler.blk = exp->blk; - vblk_exp->handler.serial = exp->id; + vblk_exp->handler.serial = g_strdup(vblk_opts->has_serial ? + vblk_opts->serial : ""); vblk_exp->handler.logical_block_size = logical_block_size; vblk_exp->handler.writable = opts->writable; @@ -306,16 +307,16 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, vblk_exp); if (!vblk_exp->dev) { error_setg(errp, "failed to create vduse device"); - return -ENOMEM; + ret = -ENOMEM; + goto err_dev; } vblk_exp->recon_file = g_strdup_printf("%s/vduse-blk-%s", g_get_tmp_dir(), exp->id); if (vduse_set_reconnect_log_file(vblk_exp->dev, vblk_exp->recon_file)) { error_setg(errp, "failed to set reconnect log file"); - vduse_dev_destroy(vblk_exp->dev); - g_free(vblk_exp->recon_file); - return -EINVAL; + ret = -EINVAL; + goto err; } for (i = 0; i < num_queues; i++) { @@ -331,6 +332,12 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, blk_set_dev_ops(exp->blk, &vduse_block_ops, exp); return 0; +err: + vduse_dev_destroy(vblk_exp->dev); + g_free(vblk_exp->recon_file); +err_dev: + g_free(vblk_exp->handler.serial); + return ret; } static void vduse_blk_exp_delete(BlockExport *exp) @@ -346,6 +353,7 @@ static void vduse_blk_exp_delete(BlockExport *exp) unlink(vblk_exp->recon_file); } g_free(vblk_exp->recon_file); + g_free(vblk_exp->handler.serial); } static void vduse_blk_exp_request_shutdown(BlockExport *exp) diff --git a/block/export/vhost-user-blk-server.c b/block/export/vhost-user-blk-server.c index c9c290cc4c..3409d9e02e 100644 --- a/block/export/vhost-user-blk-server.c +++ b/block/export/vhost-user-blk-server.c @@ -282,7 +282,7 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, return -EINVAL; } vexp->handler.blk = exp->blk; - vexp->handler.serial = "vhost_user_blk"; + vexp->handler.serial = g_strdup("vhost_user_blk"); vexp->handler.logical_block_size = logical_block_size; vexp->handler.writable = opts->writable; @@ -296,6 +296,7 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, num_queues, &vu_blk_iface, errp)) { blk_remove_aio_context_notifier(exp->blk, blk_aio_attached, blk_aio_detach, vexp); + g_free(vexp->handler.serial); return -EADDRNOTAVAIL; } @@ -308,6 +309,7 @@ static void vu_blk_exp_delete(BlockExport *exp) blk_remove_aio_context_notifier(exp->blk, blk_aio_attached, blk_aio_detach, vexp); + g_free(vexp->handler.serial); } const BlockExportDriver blk_exp_vhost_user_blk = { diff --git a/block/export/virtio-blk-handler.h b/block/export/virtio-blk-handler.h index 1c7a5e32ad..150d44cff2 100644 --- a/block/export/virtio-blk-handler.h +++ b/block/export/virtio-blk-handler.h @@ -23,7 +23,7 @@ typedef struct { BlockBackend *blk; - const char *serial; + char *serial; uint32_t logical_block_size; bool writable; } VirtioBlkHandler; diff --git a/docs/tools/qemu-storage-daemon.rst b/docs/tools/qemu-storage-daemon.rst index fbeaf76954..034f2809a6 100644 --- a/docs/tools/qemu-storage-daemon.rst +++ b/docs/tools/qemu-storage-daemon.rst @@ -77,7 +77,7 @@ Standard options: --export [type=]vhost-user-blk,id=,node-name=,addr.type=unix,addr.path=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]vhost-user-blk,id=,node-name=,addr.type=fd,addr.str=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]fuse,id=,node-name=,mountpoint=[,growable=on|off][,writable=on|off][,allow-other=on|off|auto] - --export [type=]vduse-blk,id=,node-name=[,writable=on|off][,num-queues=][,queue-size=][,logical-block-size=] + --export [type=]vduse-blk,id=,node-name=[,writable=on|off][,num-queues=][,queue-size=][,logical-block-size=][,serial=] is a block export definition. ``node-name`` is the block node that should be exported. ``writable`` determines whether or not the export allows write diff --git a/qapi/block-export.json b/qapi/block-export.json index e4bd4de363..d7aeb1fbf7 100644 --- a/qapi/block-export.json +++ b/qapi/block-export.json @@ -186,13 +186,15 @@ # @queue-size: the size of virtqueue. Defaults to 256. # @logical-block-size: Logical block size in bytes. Range [512, PAGE_SIZE] # and must be power of 2. Defaults to 512 bytes. +# @serial: the serial number of virtio block device. Defaults to empty string. # # Since: 7.1 ## { 'struct': 'BlockExportOptionsVduseBlk', 'data': { '*num-queues': 'uint16', '*queue-size': 'uint16', - '*logical-block-size': 'size'} } + '*logical-block-size': 'size', + '*serial': 'str' } } ## # @NbdServerAddOptions: diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c index 17fd3f2f5f..4e18d3fc85 100644 --- a/storage-daemon/qemu-storage-daemon.c +++ b/storage-daemon/qemu-storage-daemon.c @@ -126,6 +126,7 @@ static void help(void) " [,writable=on|off][,num-queues=]\n" " [,queue-size=]\n" " [,logical-block-size=]\n" +" [,serial=]\n" " export the specified block node as a vduse-blk\n" " device using the id as the VDUSE device name\n" "\n" From patchwork Mon Jun 13 12:45:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongji Xie X-Patchwork-Id: 12879457 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 30E48C43334 for ; Mon, 13 Jun 2022 12:55:38 +0000 (UTC) Received: from localhost ([::1]:35380 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jbV-00047V-2H for qemu-devel@archiver.kernel.org; Mon, 13 Jun 2022 08:55:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jRh-0003LS-FS for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:29 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:39853) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1o0jRe-000645-MJ for qemu-devel@nongnu.org; Mon, 13 Jun 2022 08:45:29 -0400 Received: by mail-pj1-x102b.google.com with SMTP id q12-20020a17090a304c00b001e2d4fb0eb4so8698446pjl.4 for ; Mon, 13 Jun 2022 05:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Zitz3aw7vmqBdlw7whS7nBw2iJZB5B/SiBi5964udmY=; b=3H1T0aEkUUf9tdhR8GCQncqQBcI0ci77EaFqBmHJjLEcLsRcRi+MPuYdfi7DufQMtH BYYw3WzW3RsgQDAwams/JXYDkDxZiDDT0deV8PWIb/y2mNUCHoUQ2a0ObL894MXrbDOm 7FSGReUrkwX62qu03r3sI0PK7xJcn0zYmwWEXGbnAm1K2cd/7ONlQZEqauUbNFkI6DsQ 9eBcNhhBdEwBX7qwshLdpqG3XZxL5wnNhnvASufZWNT/1s99tdlJspjKzYg/5c+2UJN7 zpcSUi5KwvMW+KxA+/nuwwtRyjsPZp0S6Vm7be4+e9oZdbNZaDsBhDmP7AjU8BJ3k7Pv vCPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Zitz3aw7vmqBdlw7whS7nBw2iJZB5B/SiBi5964udmY=; b=TbyzVTpqvNB81OtAD4UGkC50mK8SyJ7y1LVrfNW5+NIjY08G2fU2J7TV3fISq8M3gg nXh/4jeB3u8ji02OEs5Mz0uH5evIaKrUF33Cv42LOfL8AgCtCV2ezyQt9JCnhXHyjinF EXhHqyhhx9k332JQiAkhj6o12tmGMP1uVggD2mJ353lp9FlNwJ7YOuKIxBQLUAPRaIT0 M/MMJjTlfiiW8paskeV3j+cE3lLl2h7wBVCpmfKw8wUO16A1oTlzb08hAxXwQrmspBVI 53S89qbq3yNicakhm4E85wFup2ewI6ykP9xE2AosbumfsVthaqzfvNMhMnaR/yZPC72r h47A== X-Gm-Message-State: AOAM533FrjDjAMd+PXU+pP4b2nS+PnmvkBZVyLjQoZTU6+AUJzS1f+Xn QNtSKEcAH5GZ4ceZPmnoJKUW X-Google-Smtp-Source: ABdhPJyx4qH6ms0hPHsp9RmrRi6apuKSLB/D/Qu29v+Taf1ZKX4M5Wq/HHGs7GkqL/5nXvmTi9P9Gg== X-Received: by 2002:a17:902:dac3:b0:164:13b2:4913 with SMTP id q3-20020a170902dac300b0016413b24913mr57716316plx.169.1655124325188; Mon, 13 Jun 2022 05:45:25 -0700 (PDT) Received: from localhost ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id n2-20020a170902d0c200b0015ec71f72d6sm4975538pln.253.2022.06.13.05.45.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jun 2022 05:45:24 -0700 (PDT) From: Xie Yongji To: kwolf@redhat.com, stefanha@redhat.com Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 5/5] vduse-blk: Add name option Date: Mon, 13 Jun 2022 20:45:03 +0800 Message-Id: <20220613124503.156-6-xieyongji@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613124503.156-1-xieyongji@bytedance.com> References: <20220613124503.156-1-xieyongji@bytedance.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=xieyongji@bytedance.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Currently we use 'id' option as the name of VDUSE device. It's a bit confusing since we use one value for two different purposes: the ID to identfy the export within QEMU (must be distinct from any other exports in the same QEMU process, but can overlap with names used by other processes), and the VDUSE name to uniquely identify it on the host (must be distinct from other VDUSE devices on the same host, but can overlap with other export types like NBD in the same process). To make it clear, this patch adds a separate 'name' option to specify the VDUSE name for the vduse-blk export instead. Signed-off-by: Xie Yongji --- block/export/vduse-blk.c | 4 ++-- docs/tools/qemu-storage-daemon.rst | 5 +++-- qapi/block-export.json | 7 ++++--- storage-daemon/qemu-storage-daemon.c | 8 ++++---- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/block/export/vduse-blk.c b/block/export/vduse-blk.c index 066e088b00..f101c24c3f 100644 --- a/block/export/vduse-blk.c +++ b/block/export/vduse-blk.c @@ -300,7 +300,7 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, features |= 1ULL << VIRTIO_BLK_F_RO; } - vblk_exp->dev = vduse_dev_create(exp->id, VIRTIO_ID_BLOCK, 0, + vblk_exp->dev = vduse_dev_create(vblk_opts->name, VIRTIO_ID_BLOCK, 0, features, num_queues, sizeof(struct virtio_blk_config), (char *)&config, &vduse_blk_ops, @@ -312,7 +312,7 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts, } vblk_exp->recon_file = g_strdup_printf("%s/vduse-blk-%s", - g_get_tmp_dir(), exp->id); + g_get_tmp_dir(), vblk_opts->name); if (vduse_set_reconnect_log_file(vblk_exp->dev, vblk_exp->recon_file)) { error_setg(errp, "failed to set reconnect log file"); ret = -EINVAL; diff --git a/docs/tools/qemu-storage-daemon.rst b/docs/tools/qemu-storage-daemon.rst index 034f2809a6..ea00149a63 100644 --- a/docs/tools/qemu-storage-daemon.rst +++ b/docs/tools/qemu-storage-daemon.rst @@ -77,7 +77,7 @@ Standard options: --export [type=]vhost-user-blk,id=,node-name=,addr.type=unix,addr.path=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]vhost-user-blk,id=,node-name=,addr.type=fd,addr.str=[,writable=on|off][,logical-block-size=][,num-queues=] --export [type=]fuse,id=,node-name=,mountpoint=[,growable=on|off][,writable=on|off][,allow-other=on|off|auto] - --export [type=]vduse-blk,id=,node-name=[,writable=on|off][,num-queues=][,queue-size=][,logical-block-size=][,serial=] + --export [type=]vduse-blk,id=,node-name=,name=[,writable=on|off][,num-queues=][,queue-size=][,logical-block-size=][,serial=] is a block export definition. ``node-name`` is the block node that should be exported. ``writable`` determines whether or not the export allows write @@ -111,7 +111,8 @@ Standard options: ``allow-other`` to auto (the default) will try enabling this option, and on error fall back to disabling it. - The ``vduse-blk`` export type uses the ``id`` as the VDUSE device name. + The ``vduse-blk`` export type takes a ``name`` (must be unique across the host) + to create the VDUSE device. ``num-queues`` sets the number of virtqueues (the default is 1). ``queue-size`` sets the virtqueue descriptor table size (the default is 256). diff --git a/qapi/block-export.json b/qapi/block-export.json index d7aeb1fbf7..81ef1e3dcd 100644 --- a/qapi/block-export.json +++ b/qapi/block-export.json @@ -182,6 +182,7 @@ # # A vduse-blk block export. # +# @name: the name of VDUSE device (must be unique across the host). # @num-queues: the number of virtqueues. Defaults to 1. # @queue-size: the size of virtqueue. Defaults to 256. # @logical-block-size: Logical block size in bytes. Range [512, PAGE_SIZE] @@ -191,7 +192,8 @@ # Since: 7.1 ## { 'struct': 'BlockExportOptionsVduseBlk', - 'data': { '*num-queues': 'uint16', + 'data': { 'name': 'str', + '*num-queues': 'uint16', '*queue-size': 'uint16', '*logical-block-size': 'size', '*serial': 'str' } } @@ -316,8 +318,7 @@ # Describes a block export, i.e. how single node should be exported on an # external interface. # -# @id: A unique identifier for the block export (across the host for vduse-blk -# export type or across all export types for other types) +# @id: A unique identifier for the block export (across all export types) # # @node-name: The node name of the block node to be exported (since: 5.2) # diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c index 4e18d3fc85..b8e910f220 100644 --- a/storage-daemon/qemu-storage-daemon.c +++ b/storage-daemon/qemu-storage-daemon.c @@ -123,12 +123,12 @@ static void help(void) #endif /* CONFIG_VHOST_USER_BLK_SERVER */ #ifdef CONFIG_VDUSE_BLK_EXPORT " --export [type=]vduse-blk,id=,node-name=\n" -" [,writable=on|off][,num-queues=]\n" -" [,queue-size=]\n" +" ,name=[,writable=on|off]\n" +" [,num-queues=][,queue-size=]\n" " [,logical-block-size=]\n" " [,serial=]\n" -" export the specified block node as a vduse-blk\n" -" device using the id as the VDUSE device name\n" +" export the specified block node as a\n" +" vduse-blk device\n" "\n" #endif /* CONFIG_VDUSE_BLK_EXPORT */ " --monitor [chardev=]name[,mode=control][,pretty[=on|off]]\n"