From nobody Sun Apr 12 07:20:23 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771421770; cv=none; d=zohomail.com; s=zohoarc; b=BpQilyPi6XHm7HxfNxZdzXZSz13TQsJq7iDpj+AklUOzEsF6eIaaMpfmw27jZTKOTRCyIwr0yTNtrfY3bG6doCtARGFGnNqw9M5NzQb9mwByhi0VPl1RwItG6q2uXpwGiDzO+skboFWn2iKexETFPbQEazsUWbaT0Ke8w7q4r3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771421770; 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=HZlCiaeoLEleGjH47/mJTlqebumMXTgkps2WXMv7tSY=; b=bOwZcXgtlvY658nWdHjOsMyw+FlpuZ/9qRXbc6y3plrKHaGi/bXxZz2G2OJhUnHe+VYbVlWxodXvA/i0+oFAdB97MaeCiDDX2KYSUth/XsdQ/MpEn7lT2CEgy5GbKzK6uEsLE8RQLwdzB3tGK/0hlop2mRYuRxaN8KVe82hzLfQ= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771421770474845.0896969192978; Wed, 18 Feb 2026 05:36:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vshfg-0004GD-1O; Wed, 18 Feb 2026 08:32:52 -0500 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 1vshfR-0003yL-0h for qemu-devel@nongnu.org; Wed, 18 Feb 2026 08:32:37 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vshfA-0005Qz-IQ for qemu-devel@nongnu.org; Wed, 18 Feb 2026 08:32:32 -0500 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-65-vKyX8TPaOHWtsN-7ejbBAA-1; Wed, 18 Feb 2026 08:27:13 -0500 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-4362456500eso5072697f8f.3 for ; Wed, 18 Feb 2026 05:27:12 -0800 (PST) Received: from localhost (p200300cfd737d029edef7b8da7441ac2.dip0.t-ipconnect.de. [2003:cf:d737:d029:edef:7b8d:a744:1ac2]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483983c0766sm29540755e9.5.2026.02.18.05.27.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Feb 2026 05:27:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771421538; 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=HZlCiaeoLEleGjH47/mJTlqebumMXTgkps2WXMv7tSY=; b=B4e19W4LDmUPnXSZ8c+X8u4tZRD0vzkKraQjCJ02ahzIrQhljRPGXj4lR+WuW5G+V9YMly Omm6zbAh6JLxI2LVZLRlU/wGnlhJ/VlU2hJ94tj4FjG3UAc//H7m8xOKwuT58irpHjZ9fL 1B4BrgcLMnnNHtLnRVYPMUKp3H01r68= X-MC-Unique: vKyX8TPaOHWtsN-7ejbBAA-1 X-Mimecast-MFC-AGG-ID: vKyX8TPaOHWtsN-7ejbBAA_1771421232 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771421232; x=1772026032; 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=HZlCiaeoLEleGjH47/mJTlqebumMXTgkps2WXMv7tSY=; b=i4VJKYB+b09pTDUbHYrKS4iaIfwWkYEfBjoS9kjRIOru6DBC/g4g7gdBZM8Ap62l9Q eCkX1pdiBoSQljWCPcqdy3UPjSbRN9BrREWdtJA/KTB0aSN84pZ3n2N07sSTeTLVaPCo y1UgJW6h3OkD3oGElgUMt0weB+iQc1CXUgBCUik657QsAF2kBoo9/Pm8s2EIWqjK95u7 FjhSfSSKyu96meENqaM8sRDuQUK2XRuj1R4K7KWu9fjohaX41FtnKqa+bFrOpPuTqAZ5 X5PAL6vPJ4FE4ZfnuHUBWxmp0r3/0viZydYGfteFxxSEeq5R7SIr9hSY64wRG76R7IzT A8FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771421232; x=1772026032; 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=HZlCiaeoLEleGjH47/mJTlqebumMXTgkps2WXMv7tSY=; b=L1L+tgDinDa7fkecH/UjlQyFqWF/fAweIZgMECeMaLoOh5fNq/MxGnlhx+5GScPxTL 0bZ4FbSTTEk6tZJy0dhjEYvnJ3+e3uom8+3h26PP2WPkMIabPpSUyR3BtbyWYicE2lag hVBxcByL1B6/9w8RTDu4Ee2IquxxD/DurrbnIlaad1fN0iCQgU/chREoeG0p4cf9t3Sh 5OZppQMpdocZbv4bAq4N/Af0TDlMyQkK4NwavxG28/mfM1sS7gGy4tAiHOHe9Cr0Ce1r oJbKBg3UZm8MhGTcH+Cx7VGnSXSvt5deFG8RtksFa+kfsvTLbdt29aDJk/5O9HZGAVZp u87w== X-Gm-Message-State: AOJu0Yzn+crILb+k0uL5tzNqb3Od79sOra7ftOCq2zBkH7gnrSk53ZL8 YHNYQwuoT4FEGtkj4mPnZE4ga4XBeWIXS4Bab95Jz8Gk9lGYqwLcscmIqrUqS7csXSGkqGcgaOx TQ969366bhY8UJ665vXi6rOuN4OUTqtToFAlpkhka0wAMgPmagZRbvHTQ X-Gm-Gg: AZuq6aI2OFxs+qJ88p9+TzerzMpLhjksfUtJdyxATlflAKYY11/Co4dwyh7K8moS1aW M49v7DVyZ72DB5zPesGLb+xxX/0aQn2V5JvkeRH+NM7XS5AEkDioVqiRLPW9aZKYuUAo9f6v6OR aUN007UEXflXsnbapOaYza3xo8NVGV0A/k2qCxZfZZ8RC4aElsF13jDpqTJ8H/qVyUVEB6oTlLG u7gQr2cvuf1jBrXk/q4aKSmIkUjjR+KPEAFWDlFFbBr91t9+CTN9hia5J3bQvxjQmWp5YFElPtw JMCNvG9/LpMdIzYcEy/WWyMx8LYXX+kxoJDKtgXybiJxQYKYRXDRs7aTr/uy7IsBxIy1UJZqZSI YvaKDl+KlwqlzKnOZTxmG9mA4LYwZ7vH6FmWAZE4ERLaxlTRJ1ws3LbbJIHvRIejY/m4xbjjiGk 3MEaWF X-Received: by 2002:a05:600c:c4a5:b0:480:19ed:7efa with SMTP id 5b1f17b1804b1-48398b8522fmr25131105e9.36.1771421231753; Wed, 18 Feb 2026 05:27:11 -0800 (PST) X-Received: by 2002:a05:600c:c4a5:b0:480:19ed:7efa with SMTP id 5b1f17b1804b1-48398b8522fmr25130845e9.36.1771421231286; Wed, 18 Feb 2026 05:27:11 -0800 (PST) From: Hanna Czenczek To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Czenczek , Kevin Wolf , Brian Song Subject: [PATCH v4 11/24] fuse: Add halted flag Date: Wed, 18 Feb 2026 14:26:20 +0100 Message-ID: <20260218132633.29748-12-hreitz@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260218132633.29748-1-hreitz@redhat.com> References: <20260218132633.29748-1-hreitz@redhat.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=170.10.129.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.043, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-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 @redhat.com) X-ZM-MESSAGEID: 1771421771048158500 Content-Type: text/plain; charset="utf-8" This is a flag that we will want when processing FUSE requests ourselves: When the kernel sends us e.g. a truncated request (i.e. we receive less data than the request's indicated length), we cannot rely on subsequent data to be valid. Then, we are going to set this flag, halting all FUSE request processing. We plan to only use this flag in cases that would effectively be kernel bugs. While not necessary yet, access the flag atomically so that it will be safe to use once we introduce multi-threading. (Right now, the flag is unused because libfuse still does our request processing.) Signed-off-by: Hanna Czenczek --- block/export/fuse.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/block/export/fuse.c b/block/export/fuse.c index fc75a5e74d..f6a5f4fa0a 100644 --- a/block/export/fuse.c +++ b/block/export/fuse.c @@ -53,6 +53,13 @@ typedef struct FuseExport { unsigned int in_flight; /* atomic */ bool mounted, fd_handler_set_up; =20 + /* + * Set when there was an unrecoverable error and no requests should be= read + * from the device anymore (basically only in case of something we wou= ld + * consider a kernel bug). Access atomically. + */ + bool halted; + char *mountpoint; bool writable; bool growable; @@ -69,6 +76,7 @@ static const struct fuse_lowlevel_ops fuse_ops; =20 static void fuse_export_shutdown(BlockExport *exp); static void fuse_export_delete(BlockExport *exp); +static void fuse_export_halt(FuseExport *exp) G_GNUC_UNUSED; =20 static void init_exports_table(void); =20 @@ -99,6 +107,10 @@ static void fuse_dec_in_flight(FuseExport *exp) =20 static void fuse_attach_handlers(FuseExport *exp) { + if (qatomic_read(&exp->halted)) { + return; + } + aio_set_fd_handler(exp->common.ctx, fuse_session_fd(exp->fuse_session), read_from_fuse_export, NULL, NULL, NULL, exp); @@ -322,6 +334,10 @@ static void read_from_fuse_export(void *opaque) FuseExport *exp =3D opaque; int ret; =20 + if (unlikely(qatomic_read(&exp->halted))) { + return; + } + fuse_inc_in_flight(exp); =20 do { @@ -380,6 +396,20 @@ static void fuse_export_delete(BlockExport *blk_exp) g_free(exp->mountpoint); } =20 +/** + * Halt the export: Detach FD handlers, and set exp->halted to true, preve= nting + * fuse_attach_handlers() from re-attaching them, therefore stopping all f= urther + * request processing. + * + * Call this function when an unrecoverable error happens that makes proce= ssing + * all future requests unreliable. + */ +static void fuse_export_halt(FuseExport *exp) +{ + qatomic_set(&exp->halted, true); + fuse_detach_handlers(exp); +} + /** * Check whether @path points to a regular file. If not, put an * appropriate message into *errp. --=20 2.53.0