From nobody Thu Dec 18 17:47:25 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1744661610; cv=none; d=zohomail.com; s=zohoarc; b=K5aAAjLLptX2ClvBR9a8k5ThxatOjhsxsQ1zLVBFa+MeVhiHz/T+77QP+tdFSI1THU8+cpbRsk4izoDQP08DE6LLTgEqs0Tor3/jTIFGYSojYvp7qWPuFdoz30dfq8YTjPZL16KbryeQ3JnzvGohx+DjMkXieFbr1bMtaXmD/Jw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744661610; h=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=PRGelV8grg7PhxNQDzoDLvMsEhM8cB8/GRHCfaYnCb4=; b=frCTg1w8QrNvivSsnE0rQUAfMczhMQWIjkhBWz29O8Lc9QPVZX+lAAg2YJgKajdaiRv4jE35itl26e8iN8I1RbTYYj/87xd/tCtnPE+kVf1/0D/qA+OXLzeuwf2TEE0anoJEtuE0SqloZQP4U0ulom5+mBe0+AjGNswDfIm21YE= 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 1744661610871101.99036350990707; Mon, 14 Apr 2025 13:13:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u4QAT-0002GY-T1; Mon, 14 Apr 2025 16:12:34 -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 1u4QAN-0002Fd-8l for qemu-devel@nongnu.org; Mon, 14 Apr 2025 16:12:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u4QAL-0003Oa-AK for qemu-devel@nongnu.org; Mon, 14 Apr 2025 16:12:26 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-138-DGLWxgLwP6KBPxcqIBBpTg-1; Mon, 14 Apr 2025 16:12:20 -0400 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 14D391800266; Mon, 14 Apr 2025 20:12:19 +0000 (UTC) Received: from localhost (unknown [10.2.16.100]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7B0811956094; Mon, 14 Apr 2025 20:12:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744661543; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PRGelV8grg7PhxNQDzoDLvMsEhM8cB8/GRHCfaYnCb4=; b=Jzc9mb7KvzTu6wTUJDixJyCOZxzkc9XI/UJ3lzLvUH32Qni5FRQ357dIl2bJt5nUwbdyG7 2lARsTS0H06wv9WuesplfZA4jWhTeRblrKOud82JT7GzjawpeGKLHOzf6u8p2wxg7dasQf hKE9vrEc19CGe96xcgSiLfgnHJp+Zts= X-MC-Unique: DGLWxgLwP6KBPxcqIBBpTg-1 X-Mimecast-MFC-AGG-ID: DGLWxgLwP6KBPxcqIBBpTg_1744661539 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Cc: Hanna Reitz , , Fam Zheng , Stefan Hajnoczi , Kevin Wolf Subject: [PATCH v3 1/2] file-posix: probe discard alignment on Linux block devices Date: Mon, 14 Apr 2025 16:12:13 -0400 Message-ID: <20250414201214.241351-2-stefanha@redhat.com> In-Reply-To: <20250414201214.241351-1-stefanha@redhat.com> References: <20250414201214.241351-1-stefanha@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 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.133.124; envelope-from=stefanha@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.001, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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: 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: 1744661612591019000 Content-Type: text/plain; charset="utf-8" Populate the pdiscard_alignment block limit so the block layer is able align discard requests correctly. Signed-off-by: Stefan Hajnoczi --- block/file-posix.c | 67 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/block/file-posix.c b/block/file-posix.c index 56d1972d15..0d6e12f880 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -1276,10 +1276,10 @@ static int get_sysfs_zoned_model(struct stat *st, B= lockZoneModel *zoned) } #endif /* defined(CONFIG_BLKZONED) */ =20 +#ifdef CONFIG_LINUX /* * Get a sysfs attribute value as a long integer. */ -#ifdef CONFIG_LINUX static long get_sysfs_long_val(struct stat *st, const char *attribute) { g_autofree char *str =3D NULL; @@ -1299,6 +1299,30 @@ static long get_sysfs_long_val(struct stat *st, cons= t char *attribute) } return ret; } + +/* + * Get a sysfs attribute value as a uint32_t. + */ +static int get_sysfs_u32_val(struct stat *st, const char *attribute, + uint32_t *u32) +{ + g_autofree char *str =3D NULL; + const char *end; + unsigned int val; + int ret; + + ret =3D get_sysfs_str_val(st, attribute, &str); + if (ret < 0) { + return ret; + } + + /* The file is ended with '\n', pass 'end' to accept that. */ + ret =3D qemu_strtoui(str, &end, 10, &val); + if (ret =3D=3D 0 && end && *end =3D=3D '\0') { + *u32 =3D val; + } + return ret; +} #endif =20 static int hdev_get_max_segments(int fd, struct stat *st) @@ -1318,6 +1342,23 @@ static int hdev_get_max_segments(int fd, struct stat= *st) #endif } =20 +/* + * Fills in *dalign with the discard alignment and returns 0 on success, + * -errno otherwise. + */ +static int hdev_get_pdiscard_alignment(struct stat *st, uint32_t *dalign) +{ +#ifdef CONFIG_LINUX + /* + * Note that Linux "discard_granularity" is QEMU "discard_alignment". = Linux + * "discard_alignment" is something else. + */ + return get_sysfs_u32_val(st, "discard_granularity", dalign); +#else + return -ENOTSUP; +#endif +} + #if defined(CONFIG_BLKZONED) /* * If the reset_all flag is true, then the wps of zone whose state is @@ -1527,6 +1568,30 @@ static void raw_refresh_limits(BlockDriverState *bs,= Error **errp) } } =20 + if (S_ISBLK(st.st_mode)) { + uint32_t dalign =3D 0; + int ret; + + ret =3D hdev_get_pdiscard_alignment(&st, &dalign); + if (ret =3D=3D 0) { + uint32_t ralign =3D bs->bl.request_alignment; + + /* Probably never happens, but handle it just in case */ + if (dalign < ralign && (ralign % dalign =3D=3D 0)) { + dalign =3D ralign; + } + + /* The block layer requires a multiple of request_alignment */ + if (dalign % ralign !=3D 0) { + error_setg(errp, "Invalid pdiscard_alignment limit %u is n= ot a " + "multiple of request_alignment %u", dalign, ralign= ); + return; + } + + bs->bl.pdiscard_alignment =3D dalign; + } + } + raw_refresh_zoned_limits(bs, &st, errp); } =20 --=20 2.49.0 From nobody Thu Dec 18 17:47:25 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1744661611; cv=none; d=zohomail.com; s=zohoarc; b=fvvFWb3jPMchuBhQkSiKw9o/et4T15FQjTppP+e/0EBo/GQfjZYKfdV6iAXBY0e0z2huwwng8FmPoN7Ik9egTcRaX0GznXzcBACbIMhDfzbEe20rBLhD8HM9e8ukiBGt9se56BoyWTqnFFsxpSu/6nw8paFFFvfJ+g/UJIB5MQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744661611; h=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=JlHI1n2vHoxMtwVdpUwbq7wEh0HqaLM+KnANBcDJ9yc=; b=dEW4EA+wqySnsh73NvuuB73SBvXHfidtrRNbujyD748wcx3hF0aSgcPxEH5FRaRyCy7q447FuTgL89eE+0880YRUA8KZ/9FxtnXNcunMgVBHrHQTMKxv+ZTORf2lP+/7kl/uhlhnpmU3QIgkMa+kIpNOs6TdEEZC1ETkO0jHxS8= 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 1744661611064830.2059052918261; Mon, 14 Apr 2025 13:13:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1u4QAv-0002Mw-Pv; Mon, 14 Apr 2025 16:13:01 -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 1u4QAU-0002Gd-0q for qemu-devel@nongnu.org; Mon, 14 Apr 2025 16:12:35 -0400 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 1u4QAR-0003Pg-9N for qemu-devel@nongnu.org; Mon, 14 Apr 2025 16:12:33 -0400 Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-547-0uT5KKkIOc2Ppv1IHG5kDQ-1; Mon, 14 Apr 2025 16:12:23 -0400 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 532D31955D80; Mon, 14 Apr 2025 20:12:21 +0000 (UTC) Received: from localhost (unknown [10.2.16.100]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 78C7019560AD; Mon, 14 Apr 2025 20:12:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744661550; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JlHI1n2vHoxMtwVdpUwbq7wEh0HqaLM+KnANBcDJ9yc=; b=VWzrsKS6iAfneHgPi7dFIEhWFSFBMRxyJDp6/2iKcU1+RUZAu+BmaIsFMgrGmjCoL/YizU r6XSMigkLCI4JrnjGxKCE4z/8T84IBFXsL8rC7EFgVU6VvFHfZurm5LIRVGuZCOX6ijZUO hb2K99Sk8zy1yvSy+J5moFoQ5+tBcJw= X-MC-Unique: 0uT5KKkIOc2Ppv1IHG5kDQ-1 X-Mimecast-MFC-AGG-ID: 0uT5KKkIOc2Ppv1IHG5kDQ_1744661541 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Cc: Hanna Reitz , , Fam Zheng , Stefan Hajnoczi , Kevin Wolf Subject: [PATCH v3 2/2] block/io: skip head/tail requests on EINVAL Date: Mon, 14 Apr 2025 16:12:14 -0400 Message-ID: <20250414201214.241351-3-stefanha@redhat.com> In-Reply-To: <20250414201214.241351-1-stefanha@redhat.com> References: <20250414201214.241351-1-stefanha@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 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=stefanha@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.001, 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_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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: 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: 1744661613358019100 Content-Type: text/plain; charset="utf-8" When guests send misaligned discard requests, the block layer breaks them up into a misaligned head, an aligned main body, and a misaligned tail. The file-posix block driver on Linux returns -EINVAL on misaligned discard requests. This causes bdrv_co_pdiscard() to fail and guests configured with werror=3Dstop will pause. Add a special case for misaligned head/tail requests. Simply continue when EINVAL is encountered so that the aligned main body of the request can be completed and the guest is not paused. This is the best we can do when guest discard limits do not match the host discard limits. Fixes: https://issues.redhat.com/browse/RHEL-86032 Signed-off-by: Stefan Hajnoczi Reviewed-by: Hanna Czenczek --- block/io.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/block/io.c b/block/io.c index 1ba8d1aeea..a0d0b31a3e 100644 --- a/block/io.c +++ b/block/io.c @@ -3180,7 +3180,11 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, = int64_t offset, } } if (ret && ret !=3D -ENOTSUP) { - goto out; + if (ret =3D=3D -EINVAL && (offset % align !=3D 0 || num % alig= n !=3D 0)) { + /* Silently skip rejected unaligned head/tail requests */ + } else { + goto out; /* bail out */ + } } =20 offset +=3D num; --=20 2.49.0