From nobody Fri Dec 19 21:47:40 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1646413410; cv=none; d=zohomail.com; s=zohoarc; b=c3XidG01KtnYVNrkN88h1uziaF0U6zfFyF8KFaX54z6whT4CqNoENVU6KrAVlF7Q57w1k9cn67LEkB8ab2/BNqGR++JiMO1iu4CZGzIgrNXKdzMW8sL017D+LG1kbe/vkRrFuEuXXDCGcPsOL3g8EreDQzM8AaEXNYn70tmH/ds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646413410; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=N3T3OAZawTd3+Cmmka1mE/tIuTurkvGvdz+HOStlLm8=; b=lm5sQSMQ5NqJmtocxOyR6RdXheyPIM4dxlD2a+ItAjIoEHknOLYvcpk6kOExY/1CY+AEFfiPA1NQPJm3Q9q0UUGpR1TDm6lHbhLEnkQb+6FJ8vegZPdzrW9wMH0KaVXzcs66PsgW47FkOSMw3BzDF72wWFbt+ZGoCimdn6QurNk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646413410861748.9092882826915; Fri, 4 Mar 2022 09:03:30 -0800 (PST) Received: from localhost ([::1]:33220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nQBKz-00054P-Kb for importer@patchew.org; Fri, 04 Mar 2022 12:03:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:51716) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nQB5r-0005JA-7g for qemu-devel@nongnu.org; Fri, 04 Mar 2022 11:47:52 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:56396) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nQB5l-0007P4-VZ for qemu-devel@nongnu.org; Fri, 04 Mar 2022 11:47:49 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-635-R_gSd9b2MsSJ8KswrppQmg-1; Fri, 04 Mar 2022 11:47:43 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 01636824FA7; Fri, 4 Mar 2022 16:47:42 +0000 (UTC) Received: from merkur.redhat.com (unknown [10.39.194.38]) by smtp.corp.redhat.com (Postfix) with ESMTP id 053B583BF9; Fri, 4 Mar 2022 16:47:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646412465; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=N3T3OAZawTd3+Cmmka1mE/tIuTurkvGvdz+HOStlLm8=; b=NAMQA3WFLdmEJVJYS+/th0FXWxNXYlsyMQ8bP9HwgflT9GY7+t3qgv6GGy60U3WkXyUzft y2QRhnzNIqxmXRzpHmCxeXoLsRp3InhDN0j8qaIgvu3dA04Bfgut8SANi6lu6rkMzW3pgI LKV731q7vSNqQxqztT4oz4bTfu0RSqc= X-MC-Unique: R_gSd9b2MsSJ8KswrppQmg-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PULL 19/50] block/export/fuse.c: allow writable exports to take RESIZE permission Date: Fri, 4 Mar 2022 17:46:40 +0100 Message-Id: <20220304164711.474713-20-kwolf@redhat.com> In-Reply-To: <20220304164711.474713-1-kwolf@redhat.com> References: <20220304164711.474713-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, 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: , Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1646413411573100001 Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito Allow writable exports to get BLK_PERM_RESIZE permission from creation, in fuse_export_create(). In this way, there is no need to give the permission in fuse_do_truncate(), which might be run in an iothread. Permissions should be set only in the main thread, so in any case if an iothread tries to set RESIZE, it will be blocked. Also assert in fuse_do_truncate that if we give the RESIZE permission we can then restore the original ones. Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Hanna Reitz Message-Id: <20220303151616.325444-7-eesposit@redhat.com> Signed-off-by: Kevin Wolf --- block/export/fuse.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/block/export/fuse.c b/block/export/fuse.c index fdda8e3c81..5029e70f84 100644 --- a/block/export/fuse.c +++ b/block/export/fuse.c @@ -86,8 +86,8 @@ static int fuse_export_create(BlockExport *blk_exp, =20 assert(blk_exp_args->type =3D=3D BLOCK_EXPORT_TYPE_FUSE); =20 - /* For growable exports, take the RESIZE permission */ - if (args->growable) { + /* For growable and writable exports, take the RESIZE permission */ + if (args->growable || blk_exp_args->writable) { uint64_t blk_perm, blk_shared_perm; =20 blk_get_perm(exp->common.blk, &blk_perm, &blk_shared_perm); @@ -392,14 +392,23 @@ static int fuse_do_truncate(const FuseExport *exp, in= t64_t size, { uint64_t blk_perm, blk_shared_perm; BdrvRequestFlags truncate_flags =3D 0; - int ret; + bool add_resize_perm; + int ret, ret_check; + + /* Growable and writable exports have a permanent RESIZE permission */ + add_resize_perm =3D !exp->growable && !exp->writable; =20 if (req_zero_write) { truncate_flags |=3D BDRV_REQ_ZERO_WRITE; } =20 - /* Growable exports have a permanent RESIZE permission */ - if (!exp->growable) { + if (add_resize_perm) { + + if (!qemu_in_main_thread()) { + /* Changing permissions like below only works in the main thre= ad */ + return -EPERM; + } + blk_get_perm(exp->common.blk, &blk_perm, &blk_shared_perm); =20 ret =3D blk_set_perm(exp->common.blk, blk_perm | BLK_PERM_RESIZE, @@ -412,9 +421,11 @@ static int fuse_do_truncate(const FuseExport *exp, int= 64_t size, ret =3D blk_truncate(exp->common.blk, size, true, prealloc, truncate_flags, NULL); =20 - if (!exp->growable) { + if (add_resize_perm) { /* Must succeed, because we are only giving up the RESIZE permissi= on */ - blk_set_perm(exp->common.blk, blk_perm, blk_shared_perm, &error_ab= ort); + ret_check =3D blk_set_perm(exp->common.blk, blk_perm, + blk_shared_perm, &error_abort); + assert(ret_check =3D=3D 0); } =20 return ret; --=20 2.35.1