From nobody Thu Apr 2 22:25:44 2026 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=quobyte.com ARC-Seal: i=1; a=rsa-sha256; t=1774516907; cv=none; d=zohomail.com; s=zohoarc; b=L/EycCGOZ8lyh0qKn44pQey/re1KXPc1vgepqITzpDXYGLxb6IOsm6RXFoKeF8y/+cF8FOwm2FId8D2QJcE2z/eYvmBipgvEtCaVYJhBjaVuVEyiFylh4NXJ/6X5QO++v9vU0wlNTa7c4xDNZRCduDi1k8dtt8rOeOfLsmw5AJI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774516907; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7G7nq1NGmHEb9erj4D2akBfJiwls4FugzcHGpskJvPs=; b=K8FuUBDgHKnCmgB2cUM/iADZvLHjZdg0XatUlGq5WKRqT+iBusQhlbs+tsW0sAIOVQr13wtdDnHJib1BARp9TusfvITpJLis9tFHuC2olUnisWZrMYkhgD57l3ugqGRbDUzlflpdb8OqqRa6w49luNp1vmv8heNxSQGoa2/5TV4= 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 1774516907353861.0485966138505; Thu, 26 Mar 2026 02:21:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w5gtm-0000oY-CU; Thu, 26 Mar 2026 05:21:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w5gtk-0000lj-Vt for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:05 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w5gth-0000KS-VX for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:04 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-48540d21f7dso8006935e9.0 for ; Thu, 26 Mar 2026 02:21:01 -0700 (PDT) Received: from kaisers.corp.quobyte.com ([24.134.167.61]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48722c9506dsm16474295e9.7.2026.03.26.02.20.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 02:20:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quobyte.com; s=google; t=1774516860; x=1775121660; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7G7nq1NGmHEb9erj4D2akBfJiwls4FugzcHGpskJvPs=; b=yKtRcrCCXQ492PWxrdnz5Y1JkH69ODHnMtS+7pFLvwo19qBhUp1KIwOKHEF8/jWZTh 0VZyvhWKQH54hAfGES2Anvb8BWtCk185OOHLgus02b4eYIMBp8WBVu/Te1t3ehxWvfe+ Zh9RT4PtN0FMOJNOdkTrVf+tEj9LdnxEd8QjM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774516860; x=1775121660; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7G7nq1NGmHEb9erj4D2akBfJiwls4FugzcHGpskJvPs=; b=gYEU5x4KnIBZN0c5RtYzZaR6W2r15JYYrP4lBetl4aXERKq+t/Gy0aGduS+Jf9TQub 1lkncHgChy9ruOJWdlTOSiu6gXDa6MyW8Z4m+6OH+xtp66tiuZ+RLCbEHLwmg0IadJci BDIZfEhrAvRDOuhAkIw6rw/B/YX7thV/jmYOKXYJ+6CJ5Vags3DwbA+ANMvE8HlsRUoK PUhX01eARhtzswm90XejaivnMymz+0VcFlGudeggQ1OBEaRY99ewR5P2/0SkDqmN7URf q4xmzD17YkdJ3KbKMnDB+zQU4SpJ1fJEWFIZhX4YjRAGuvPMZp04wBtFUVwUafPAQlSk BGSA== X-Gm-Message-State: AOJu0Yzr+aA7VuMcgo1NFhrCBBiey3tNrZWeqMPddv8ftD69lnoJN5Tq l1kIrQ/noJAxDGZn0EVTd2r41C1sKeL+uL7zQZNXKaQbGDm+opXbPj2Pr4xhujk7ATgiO9v8tBC j2yuLoY5dYTw2T1m7yWk988dmSpKjsx1/RbHJ9uRCOaQV52TsTovfl5dzHDVuSJrJdtTX X-Gm-Gg: ATEYQzwyglRdzQ1aluqHu0dBz5XwR65sOVBY792aY/7eQWE2QQo/EgyfbLvpf9+Bcen hxvWRcxvfWw5H+rafNL1hS9VCNggIuKmtU5R6o6KerMsq2NMGUv1/uB5aNpKJSTn2a7EFG8R8Gq 2MRzW3Bgz/uTrb+SWOyh5Ab/L3tg3xKaTN4AvPZBjItkUPgBGYVkFYVnSiAQhlz6kgVtC6q1lBH +kWf0QQ9oVFuL05WkifmatccziaeWNNHRAS/758Zn9BE9y2bZmAMsA5YNJ5tZm60Pzwgp3J3tGj eSm8i00Iig//DzTn9kbUCkvJ7WuVZCtRM+IFaGrF/IPwp1rzRNdb2JRFR033eHfNYQ+bcU+tDJJ CZzJtvJx5LxOwwWveKLUBi9stfzdJmFACsYULwbHmnaXLW/xRM0ujkSIEnjcyrKXDvNR0eL8VG4 nV/Gl2X4IKt2YraVzj4HeIhPy4bM91ZQjqmXgtJYVi3Ql+rZF+y0VhsnkUSOYrR80SzPr3ztF/4 +9UqjEGM4/ct6dryhMhUBXz5ptMyKJAIj6wuaxjN2Sn5+FHUxl6Qv7bInw= X-Received: by 2002:a05:600c:6ca:b0:487:1fb4:7e1 with SMTP id 5b1f17b1804b1-4871fb409d4mr16150575e9.22.1774516859932; Thu, 26 Mar 2026 02:20:59 -0700 (PDT) From: Silvan Kaiser To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, kwolf@redhat.com, hreitz@redhat.com, pierrick.bouvier@linaro.org, eblake@redhat.com, armbru@redhat.com, Silvan Kaiser Subject: [PATCH 1/3] block: Add 'posix' option for file locking Date: Thu, 26 Mar 2026 10:19:46 +0100 Message-ID: <20260326091948.194529-2-silvan@quobyte.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260326091948.194529-1-silvan@quobyte.com> References: <20260326091948.194529-1-silvan@quobyte.com> MIME-Version: 1.0 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=2a00:1450:4864:20::333; envelope-from=silvan@quobyte.com; helo=mail-wm1-x333.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @quobyte.com) X-ZM-MESSAGEID: 1774516909456158500 Content-Type: text/plain; charset="utf-8" The new 'posix' value for the 'locking' property of file-based block devices forces the use of traditional POSIX locks (F_SETLK/F_GETLK) instead of OFD (Open File Descriptor) locks. While OFD locks are preferred when available =E2=80=94 they are per file de= scriptor and thus survive QEMU-internal fd operations such as hot-plug and block jobs = =E2=80=94 some userspace filesystem implementations (e.g. FUSE) handle POSIX locks correct= ly but do not fully support OFD lock semantics. Issues with OFD support detect= ion on underlying file systems and some OFD guarantees not being fully supported can prohibit users from using the default OFD locking. Previously, users in this situation had no way to force POSIX locks without disabling locking entirely; 'locking=3Don' would silently fall back to POSI= X only when OFD was unavailable. The new 'posix' option makes the choice explicit and allows users to set up= a clear POSIX config, allowing users to control the locking setup for any sce= nario where OFD locking is not advisable. Note that the known shortcoming of POSIX locks still applies: locks can be silently lost when QEMU closes and reopens file descriptors during hot-plug or block job operations. Signed-off-by: Silvan Kaiser --- block/file-posix.c | 18 +++++++++++------- include/qemu/osdep.h | 1 + qapi/block-core.json | 18 ++++++++++++++++-- util/osdep.c | 9 +++++++-- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/block/file-posix.c b/block/file-posix.c index e49b13d6ab..c99974000d 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -625,7 +625,7 @@ static int raw_open_common(BlockDriverState *bs, QDict = *options, BlockdevAioOptions aio, aio_default; int fd, ret; struct stat st; - OnOffAuto locking; + BlockdevLockingOptions locking; =20 opts =3D qemu_opts_create(&raw_runtime_opts, NULL, 0, &error_abort); if (!qemu_opts_absorb_qdict(opts, options, errp)) { @@ -666,16 +666,16 @@ static int raw_open_common(BlockDriverState *bs, QDic= t *options, =20 s->aio_max_batch =3D qemu_opt_get_number(opts, "aio-max-batch", 0); =20 - locking =3D qapi_enum_parse(&OnOffAuto_lookup, - qemu_opt_get(opts, "locking"), - ON_OFF_AUTO_AUTO, &local_err); + locking =3D qapi_enum_parse(&BlockdevLockingOptions_lookup, + qemu_opt_get(opts, "locking"), + BLOCKDEV_LOCKING_OPTIONS_AUTO, &local_err); if (local_err) { error_propagate(errp, local_err); ret =3D -EINVAL; goto fail; } switch (locking) { - case ON_OFF_AUTO_ON: + case BLOCKDEV_LOCKING_OPTIONS_ON: s->use_lock =3D true; if (!qemu_has_ofd_lock()) { warn_report("File lock requested but OFD locking syscall is " @@ -684,12 +684,16 @@ static int raw_open_common(BlockDriverState *bs, QDic= t *options, "unexpectedly.\n"); } break; - case ON_OFF_AUTO_OFF: + case BLOCKDEV_LOCKING_OPTIONS_OFF: s->use_lock =3D false; break; - case ON_OFF_AUTO_AUTO: + case BLOCKDEV_LOCKING_OPTIONS_AUTO: s->use_lock =3D qemu_has_ofd_lock(); break; + case BLOCKDEV_LOCKING_OPTIONS_POSIX: + s->use_lock =3D true; + qemu_use_posix_locks(); + break; default: abort(); } diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index f151578b5c..8ea506e462 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -634,6 +634,7 @@ int qemu_unlock_fd(int fd, int64_t start, int64_t len); int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive); bool qemu_has_ofd_lock(void); int qemu_fcntl_addfl(int fd, int flag); +void qemu_use_posix_locks(void); #endif =20 bool qemu_has_direct_io(void); diff --git a/qapi/block-core.json b/qapi/block-core.json index 508b081ac1..cec369f0fe 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -3362,6 +3362,19 @@ { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' }, 'vmdk', 'vpc', 'vvfat' ] } =20 +## +# @BlockdevLockingOptions: +# +# @off: Disable locking. +# @on: Enable locking (prefer OFD). +# @auto: Use locking if OFD is available. +# @posix: Force use of traditional POSIX locks. +# +# Since: 10.3 +## +{ 'enum': 'BlockdevLockingOptions', + 'data': [ 'off', 'on', 'auto', 'posix' ] } + ## # @BlockdevOptionsFile: # @@ -3382,7 +3395,8 @@ # automatically. (default: 0, since 6.2) # # @locking: whether to enable file locking. If set to 'auto', only -# enable when Open File Descriptor (OFD) locking API is available +# enable when Open File Descriptor (OFD) locking API is available. +# 'posix' forces use of POSIX locks. # (default: auto, since 2.10) # # @drop-cache: invalidate page cache during live migration. This @@ -3412,7 +3426,7 @@ { 'struct': 'BlockdevOptionsFile', 'data': { 'filename': 'str', '*pr-manager': 'str', - '*locking': 'OnOffAuto', + '*locking': 'BlockdevLockingOptions', '*aio': 'BlockdevAioOptions', '*aio-max-batch': 'int', '*drop-cache': {'type': 'bool', diff --git a/util/osdep.c b/util/osdep.c index 000e7daac8..76495282cc 100644 --- a/util/osdep.c +++ b/util/osdep.c @@ -223,8 +223,7 @@ static void qemu_probe_lock_ops(void) fcntl_op_getlk =3D F_GETLK; } #else - fcntl_op_setlk =3D F_SETLK; - fcntl_op_getlk =3D F_GETLK; + qemu_use_posix_locks(); #endif } } @@ -239,6 +238,12 @@ bool qemu_has_ofd_lock(void) #endif } =20 +void qemu_use_posix_locks(void) +{ + fcntl_op_setlk =3D F_SETLK; + fcntl_op_getlk =3D F_GETLK; +} + static int qemu_lock_fcntl(int fd, int64_t start, int64_t len, int fl_type) { int ret; --=20 2.47.3 --=20 Quobyte GmbH, Berlin, AG Charlottenburg HRB 149012 B, Dr. Felix Hupfeld,=20 Dr. Bjoern Kolbeck From nobody Thu Apr 2 22:25:44 2026 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=quobyte.com ARC-Seal: i=1; a=rsa-sha256; t=1774516903; cv=none; d=zohomail.com; s=zohoarc; b=Q6/D4AXlqavVS39lJFVH/Xmh9TmEigStcXBqUI43Kk6lGMpqAmpmrqvH62Sd83KQRXB4kO6S79ocYhrel6L9XHn05Xa7NeKwsXaejofdns3ZVk0CV4yYov4CyPpKRH8t235IgPC1posE14fDom7hs+jpJDirG797WcJ1CcyDG1A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774516903; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1z7eWHRCKyrRx5GJTpNLhbk7ddlC+qA+Hu4CTwSuwZ0=; b=MdgtJ4iKuHl09oYZakr83YmjYhLz1VCIHv4vHOlo9aSzMlCjfr7JIeFl6gd7Yp1TSIsNsSjCUqMZzeudYZgfFNZs76G6W1Vr3+VIN1OP51PO8PI+9txzKI0bB4Y8aRTXIABnGCL+HivK/lRjR4igkDvxGjHCsHn+4IaDTEJ5oVI= 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 1774516903160709.5329183898883; Thu, 26 Mar 2026 02:21:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w5gtm-0000oS-5F; Thu, 26 Mar 2026 05:21:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w5gtk-0000kx-NS for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:04 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w5gti-0000Kb-IW for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:04 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-486ff201041so6335725e9.1 for ; Thu, 26 Mar 2026 02:21:02 -0700 (PDT) Received: from kaisers.corp.quobyte.com ([24.134.167.61]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48722c9506dsm16474295e9.7.2026.03.26.02.21.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 02:21:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quobyte.com; s=google; t=1774516861; x=1775121661; darn=nongnu.org; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=1z7eWHRCKyrRx5GJTpNLhbk7ddlC+qA+Hu4CTwSuwZ0=; b=Y8bly2NbbTiFfHU1Pk+QI9sP8m3/h0cuyW8LX2OlT7dlBQp2GI6rvpBAUuKgjNfUqy TubablGhweLHFk4KVhOM3AKmW+6dxyvkI1UKd5EpAR0NZ3vOyaoxdmY7Y164k5egfI8G aaegaR/Pg7VlkOIi1w8N3vptpXjwNuuuGqstw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774516861; x=1775121661; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1z7eWHRCKyrRx5GJTpNLhbk7ddlC+qA+Hu4CTwSuwZ0=; b=qIOOrOycCYXm7ctGdENGZz2eSg6aMjIGlf6PGy8CMOtbDgOcC6frbTLswMH22xbxpk 9q8q5uLEeHQaeaovO12P/sZgPQF3zUTVbK6Frkx6y6Np3ZDwkijQ5YlGMr4FoMQOWqFe g5eQLnTJYfLrSOBmO/CJaaIKHK2OPUAyX7RnQ9IfQS60Y1765YfWXucBBH9PGxdjNAzu 5n+AcH+qYObDl5awdYXxsKciMqxeZnwlLx1gTCGfgDYaL+NtAPCga5vF/UBz3JBTAk1H IvHhmglzQaFGkqn+QiaK4a2Xa3rohKQbnh5nOlZIUVrOyEwufR7mUah6TqBT9Zfgs6EI PB7g== X-Gm-Message-State: AOJu0YwBIojQBDVyjqCC8BUvnMBCs6A4nnPBEYotyeJnFB6f8fIyg7xb NAti67A5F8bck/gEQYYdF5R8uBQrO1DlQqZ73/KFfx85JLUCrcst3zv5fIgTHU/lOmcC3CPJ2Of UcKIbDTtSfkZe56XcnIHBKyz4Xj6elDVvxyMhMxCXEJ0ZFl4fyUCJLCTxEvMSUXWt9TrM X-Gm-Gg: ATEYQzwr3326L8c1Qprltf4hkrO+IMb6aCibS3o1jhtdmOvROIBxal2C1FYcckRuC7P f8BVaJ/jiMRb+XD+/azzD3BoTzZo+7lkOoIrTyRX9wnio3tRl554HzZrf6+ofRTHRF90zmX0reS koIvowCLRvCsctjB9JVi1XesU7w7XnlxMQHlEDYI7lo8OVhxhyaVAjRjpSTNIxZvwIojClrHS+3 emaxHmX2/iJNyRfrDbSvl4eMRnDhehYya0DVKQgwgcGJYq8vtMBY3CBKJmBRaWZDbN54MJ55LXP SHf28Hw3FGEDmSS1GWGTsDP/7gJhL7pJ6f2r7YSp0wWaJKJbMpvk0SSjFooCkFIlSp0zwkIDcp/ Z3AyZ/CWmw9xeAlzWpckK0v86M6K4f1SGclfhOFuIezhtJGEKpkiAilEQ6m7jGGxjv01lIhqXGA xVtdll3l0SLtPctxg7vxhHe6Yfk/JjH9wx6fDeOmyf5TabC30AsFvw/9iPtsv5BRfMYc/xtlBus nhyTM3nXsclyCxaACoy9EKQP4qZGihbxt7hWkeZjdTdujgtxxpvtUKhino= X-Received: by 2002:a05:600c:8219:b0:485:ae14:8187 with SMTP id 5b1f17b1804b1-48715fc3250mr91970845e9.2.1774516861066; Thu, 26 Mar 2026 02:21:01 -0700 (PDT) From: Silvan Kaiser To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, kwolf@redhat.com, hreitz@redhat.com, pierrick.bouvier@linaro.org, eblake@redhat.com, armbru@redhat.com, Silvan Kaiser Subject: [PATCH 2/3] docs/system: Document locking=posix option for file block driver Date: Thu, 26 Mar 2026 10:19:47 +0100 Message-ID: <20260326091948.194529-3-silvan@quobyte.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260326091948.194529-1-silvan@quobyte.com> References: <20260326091948.194529-1-silvan@quobyte.com> MIME-Version: 1.0 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=2a00:1450:4864:20::32c; envelope-from=silvan@quobyte.com; helo=mail-wm1-x32c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @quobyte.com) X-ZM-MESSAGEID: 1774516907050154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Silvan Kaiser --- docs/system/qemu-block-drivers.rst.inc | 3 +++ qemu-options.hx | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/system/qemu-block-drivers.rst.inc b/docs/system/qemu-bloc= k-drivers.rst.inc index 384e95ba76..bdecbf39ca 100644 --- a/docs/system/qemu-block-drivers.rst.inc +++ b/docs/system/qemu-block-drivers.rst.inc @@ -882,6 +882,9 @@ the POSIX locking API will be used. In this case there = is a risk that the lock will get silently lost when doing hot plugging and block jobs, due to the shortcomings of the POSIX locking API. =20 +To force the use of POSIX locks even when OFD locking is available, specify +"locking=3Dposix". The same caveats about silent lock loss apply. + QEMU transparently handles lock handover during shared storage migration. = For shared virtual disk images between multiple VMs, the "share-rw" device opt= ion should be used. diff --git a/qemu-options.hx b/qemu-options.hx index 21972f8326..23502c5aa6 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1540,10 +1540,12 @@ SRST default: threads) =20 ``locking`` - Specifies whether the image file is protected with Linux OFD - / POSIX locks. The default is to use the Linux Open File - Descriptor API if available, otherwise no lock is applied. - (auto/on/off, default: auto) + Specifies whether the image file is protected with locks. + 'on' enables locking, preferring OFD (Open File Descriptor) + locks if available, but falling back to POSIX locks with a + warning. 'posix' forces the use of POSIX locks. 'auto' (the + default) enables locking only if OFD locks are available. + 'off' disables locking. (on/off/auto/posix, default: auto) =20 Example: =20 --=20 2.47.3 --=20 Quobyte GmbH, Berlin, AG Charlottenburg HRB 149012 B, Dr. Felix Hupfeld,=20 Dr. Bjoern Kolbeck From nobody Thu Apr 2 22:25:44 2026 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=quobyte.com ARC-Seal: i=1; a=rsa-sha256; t=1774516888; cv=none; d=zohomail.com; s=zohoarc; b=VV66pwkbkh+BesTcWmDS2WplFIFbj/3xoCkiXoFCch7eChs3n30voCcUmAbcYI3eLTc3qSMpmAHDEyI08QYAMTBxdMEEoeqP+8FCbr/MP2/OOmZibZeW7+egLdcg8aYH3UeQdsZIuLnDsHE3fuR1K6EmeUgyZq08Jtxkf7DXLi0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774516888; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HieXZL5piOqwNT+BgcNMrHvOisMf+bvhJjQFWY3kJhA=; b=e+bLyTkahiuAClbFBl6huNNS3NJJU623XEnOaro4XoMo5OmWAJxHzF/nPCzakePtAJ+h03EPb3Eg9s6IsTfpiqwP6kAtWMiJEH5I6g3DR4zPIG/du1n24kgH2q8tVA02SXK11GqN7fDjrh+Z6MYgYuLTEQruKHm89v9JK4NtYMI= 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 1774516888535416.0733403896634; Thu, 26 Mar 2026 02:21:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w5gtp-0000ps-DG; Thu, 26 Mar 2026 05:21:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w5gtl-0000nx-S9 for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:05 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w5gtk-0000Ks-2P for qemu-devel@nongnu.org; Thu, 26 Mar 2026 05:21:05 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-486fd5360d4so9422615e9.1 for ; Thu, 26 Mar 2026 02:21:03 -0700 (PDT) Received: from kaisers.corp.quobyte.com ([24.134.167.61]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48722c9506dsm16474295e9.7.2026.03.26.02.21.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 02:21:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quobyte.com; s=google; t=1774516862; x=1775121662; darn=nongnu.org; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=HieXZL5piOqwNT+BgcNMrHvOisMf+bvhJjQFWY3kJhA=; b=2ocIbG3p9DB5wPk+GbbTmwRJUPNdYzafGEfDiN4oxmmv8qwiwueRhcX0gBKa2cSKOJ rigQD9J8YW4JZcYB5wi+4TYnib5K2TjgBlv2MLRr5p266Q9MODqHLbjgszqEbXVIZIX+ VGwZywzN9icAxc0SqVhvEBsycKr2gxyIoAZOA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774516862; x=1775121662; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=HieXZL5piOqwNT+BgcNMrHvOisMf+bvhJjQFWY3kJhA=; b=k/1q7mXh3HotCFv/ovHqBAZ8pt+l6bKiP7GNzQFm5Y0gvuksjrZY1PBUlKC91tH0px mVT4eSOxcJnoALJiaUklVtnP7UBZvH0TBfnJcdKJ0ctikl9xEW7/5QBX9xFUs8NQIgTW JnAC1jr81jG3EqKBY7wJVyl007c2bw3Zp26i59JIu9FuBEf9N/S5yZdkcDW0vyfBpeKR I3A81uLVGJuBQcFeiCQiFk5obsQuSFjQN1WeMCWtZqkgYnH7e+UiKkFMn5BMLcvRumkt tNeHm11CCTvnNj3ZZxVWJ+KR6BdkPrVPmwDWGIltfs6FOmUY9LAmXhR+GTEcb6NUXvdH jVYw== X-Gm-Message-State: AOJu0Yyivw8zyhll+Lm/rOiKFXgqwHbT5bbkM9qZMSgN7c6QedMQUwWM xHulSbQKALwmTe9CMpzEiCumVvLuWTdKz6Hcks5SgazXabWcnXl89Qykc4mZoC6YtdQbuEf5UHN Q89YL+DxuZO1hl+MIeZnoBKw77BGhSf+/GRebv55HCT+2FGVdTOb3pK5IFriSGh6EpMQt X-Gm-Gg: ATEYQzwYxuimMy83M59kpq3jUTp1MaMJoNxoHK2Gt/tv0EWOZPJv29EHpbMjsorTqWH qog0WgTt9S2fKToqyesrooCCYZxZSKvCoszjddDJQtfUvqnF3G6RID1vpAUqYrQp/C1JfTlWkQy W1yEN6VQj6wOzgKA3AF4HwKr0hOw1q/aDqbbm5FZa5oojzaPR5XW7mSiPOdiZbCTaPnqviVoqTu G5nKXfpkpUfWNTCztC8NpvswGnjfVzUXsVFzX8q4zivaFBR8JCQr1R6mK0DxxasNCC/2yFY7xXm h9k5l7TCbwzitJuctMxt1LI01t64ZMOJfDsZISLnpcdRy5EAqlpEDIuJbuc//OzzVGrd21d/q6Q Iit5cmPNmQMq5tv3H5aQT8GxkN+ZjaFG/nTVv4q8uYcpfH5F2X+zPkzvJWQpmjw8RuBP4sZNrE8 Rui65fbaXTwk+AhIXgdTGN8WLnYc3vWSn2Qr/X1nke4XqIgELhgpJkLC+BZPPwk4gCEeekYcqHt h/9xsFOx3m+dFHTuEZ+ei5NjbUZ0fMzYAQwtBMLi40tZ/XMfkrmxw5zuds= X-Received: by 2002:a05:600c:3484:b0:485:5ba3:37d8 with SMTP id 5b1f17b1804b1-48715fd4649mr92903385e9.5.1774516862308; Thu, 26 Mar 2026 02:21:02 -0700 (PDT) From: Silvan Kaiser To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, kwolf@redhat.com, hreitz@redhat.com, pierrick.bouvier@linaro.org, eblake@redhat.com, armbru@redhat.com, Silvan Kaiser Subject: [PATCH 3/3] tests/qemu-iotests: Add test 315 for locking=posix Date: Thu, 26 Mar 2026 10:19:48 +0100 Message-ID: <20260326091948.194529-4-silvan@quobyte.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260326091948.194529-1-silvan@quobyte.com> References: <20260326091948.194529-1-silvan@quobyte.com> MIME-Version: 1.0 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=2a00:1450:4864:20::32d; envelope-from=silvan@quobyte.com; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @quobyte.com) X-ZM-MESSAGEID: 1774516889404158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Silvan Kaiser --- tests/qemu-iotests/315 | 88 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/315.out | 7 +++ 2 files changed, 95 insertions(+) create mode 100755 tests/qemu-iotests/315 create mode 100644 tests/qemu-iotests/315.out diff --git a/tests/qemu-iotests/315 b/tests/qemu-iotests/315 new file mode 100755 index 0000000000..9ccc4b0439 --- /dev/null +++ b/tests/qemu-iotests/315 @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +# group: rw quick +# +# Test image locking with locking=3Dposix +# +# Unlike 'locking=3Don', which prefers OFD locks and falls back to POSIX +# with a warning, 'locking=3Dposix' explicitly forces the use of POSIX +# locks without any warning. This test verifies that: +# - locking=3Dposix does not emit a fallback warning +# - locking=3Dposix actually applies POSIX locks on the image +# +# The lock check uses qemu-storage-daemon opening the image via the +# 'file' protocol driver directly (no format layer on top), because +# POSIX locks are per-process and are silently released when any fd to +# the same inode is closed -- which happens during qcow2 initialisation +# inside a full QEMU instance. +# +# Copyright 2026 Quobyte Inc +# SPDX-License-Identifier: GPL-2.0-or-later + +# creator +owner=3Dsilvan@quobyte.com + +seq=3D"$(basename $0)" +echo "QA output created by $seq" + +tmp=3D/tmp/$$ +status=3D1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img + if [ -f "$TEST_DIR/qsd.pid" ]; then + kill -SIGTERM "$(cat "$TEST_DIR/qsd.pid")" 2>/dev/null + rm -f "$TEST_DIR/qsd.pid" + fi + rm -f "$SOCK_DIR/qsd-315.sock" +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 +_supported_proto file +_supported_os Linux + +size=3D32M + +_make_test_img $size + +# locking=3Dposix is an explicit choice, not a fallback, so the +# "falling back to POSIX file locks" warning must never appear, +# regardless of whether OFD locking is available on this host. +echo "Checking that locking=3Dposix does not warn about OFD fallback" +if $QEMU_IMG info --image-opts \ + "driver=3Dfile,locking=3Dposix,filename=3D$TEST_IMG" 2>&1 | + grep -q 'falling back'; then + _fail "FAIL: unexpected fallback warning with locking=3Dposix" +fi +echo "OK: no fallback warning" + +# Use qemu-storage-daemon with driver=3Dfile (no format layer) to hold the +# image open with locking=3Dposix, then verify POSIX locks appear in +# /proc/locks. A format layer (e.g. qcow2) would trigger internal fd +# reopen operations that silently release POSIX locks, so we bypass it. +echo "Checking that locking=3Dposix applies POSIX locks on the image" +$QSD \ + --blockdev "driver=3Dfile,node-name=3Dfile0,filename=3D$TEST_IMG,locki= ng=3Dposix" \ + --nbd-server "addr.type=3Dunix,addr.path=3D$SOCK_DIR/qsd-315.sock" \ + --export "type=3Dnbd,id=3Dexp0,node-name=3Dfile0,writable=3Don" \ + --daemonize --pidfile "$TEST_DIR/qsd.pid" + +INODE=3D$(stat -c %i "$TEST_IMG") +if grep -q "POSIX.*:${INODE} " /proc/locks; then + echo "OK: POSIX locks present on image" +else + _fail "FAIL: no POSIX locks found on image" +fi + +kill -SIGTERM "$(cat "$TEST_DIR/qsd.pid")" +rm -f "$TEST_DIR/qsd.pid" "$SOCK_DIR/qsd-315.sock" + +# success, all done +echo "*** done" +rm -f $seq.full +status=3D0 diff --git a/tests/qemu-iotests/315.out b/tests/qemu-iotests/315.out new file mode 100644 index 0000000000..e90082fc64 --- /dev/null +++ b/tests/qemu-iotests/315.out @@ -0,0 +1,7 @@ +QA output created by 315 +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D33554432 +Checking that locking=3Dposix does not warn about OFD fallback +OK: no fallback warning +Checking that locking=3Dposix applies POSIX locks on the image +OK: POSIX locks present on image +*** done --=20 2.47.3 --=20 Quobyte GmbH, Berlin, AG Charlottenburg HRB 149012 B, Dr. Felix Hupfeld,=20 Dr. Bjoern Kolbeck