From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU0PR08MB10360.eurprd08.prod.outlook.com (2603:10a6:10:417::16) by PAXPR08MB6942.eurprd08.prod.outlook.com with HTTPS; Mon, 31 Aug 2026 15:26:04 +0000 Received: from AS4PR09CA0023.eurprd09.prod.outlook.com (2603:10a6:20b:5d4::13) by DU0PR08MB10360.eurprd08.prod.outlook.com (2603:10a6:10:417::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.9; Mon, 31 Aug 2026 15:26:01 +0000 Received: from AM2PEPF0001C717.eurprd05.prod.outlook.com (2603:10a6:20b:5d4:cafe::7f) by AS4PR09CA0023.outlook.office365.com (2603:10a6:20b:5d4::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.360.13 via Frontend Transport; Mon, 31 Aug 2026 15:26:00 +0000 Authentication-Results: spf=softfail (sender IP is 99.81.216.78) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning openvz.org discourages use of 99.81.216.78 as permitted sender) Received: from nat.eu.perception-point.io (99.81.216.78) by AM2PEPF0001C717.mail.protection.outlook.com (10.167.16.187) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Mon, 31 Aug 2026 15:26:00 +0000 X-PERCEPTION-POINT-VERDICT: CLN X-PERCEPTION-POINT-SPF: X-PERCEPTION-POINT-SPAM: PASS X-PERCEPTION-POINT-SENDER-IP: 2a00:1450:4864:20::332 X-PP-Forefront-Antispam-Report: CIP:2a00:1450:4864:20::332;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x332.google.com;PTR:mail-wm1-x332.google.com;CAT:NONE;SFS:(13230040)(2092899012)(82310400026)(6059299003)(12012899012)(43022699015)(3072899012)(19002099009)(5063699009)(56012099006)(10067099003)(3023799007)(22082099003)(16102099003)(55112099003)(18002099003);DIR:INB; Received: from DUZPR08CU001.outbound.protection.outlook.com (mail-duzpr08cu00101.outbound.protection.outlook.com [40.93.64.65]) by inbound-smtp.eu-west-1.amazonaws.com with SMTP id 6hu0ik1t4a3g14cno93hmo8jihquifkoqcsah5g1; Mon, 31 Aug 2026 15:25:57 +0000 (UTC) X-SES-Spam-Verdict: PASS X-SES-Virus-Verdict: PASS Received-SPF: softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.64.65 as permitted sender) client-ip=40.93.64.65; envelope-from=den@openvz.org; helo=DUZPR08CU001.outbound.protection.outlook.com; Authentication-Results-Original: amazonses.com; spf=softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.64.65 as permitted sender) client-ip=40.93.64.65; envelope-from=den@openvz.org; helo=DUZPR08CU001.outbound.protection.outlook.com; dkim=pass header.i=@openvz.org; dmarc=pass header.from=openvz.org; X-SES-RECEIPT: AEFBQUFBQUFBQUFIZERIeUYzeEFMVlgrRjREK3o5R08yaERRVm5VMnI0dk9GVVNFYWowR09zM09NMS9lTkcyY285QkNSTk93ZTJKY3hlOWpHVWUrQWIzV3kvR29BWXVnWTVwL1pkMmhwZjAyZ2F6a0pPWVhURWIwRGxYNklFL0s1dGVvQzdhZzhEVVAzNEpETmpjRXI4MUpzNlo1V05nUUQ2dG5mb3FGeEVxczdObWNFKzZSWWYxQnl2Y21BbGdRemJidmRZV1lPR1dKS3NKdnpXdWpNMjJtQVRNV1ExQ3F4RXdBemZLb1Q2emQzYUVTRVBFNWRHYmNjVUo1cGYzSjJ6OHIvbm9NZlY4M2hCRHprUkJCZmhVcUFLL2NTOEEzOXpSYUNJY21pU05LWDVjTXltbms5ZUE9PQ== X-SES-DKIM-SIGNATURE: a=rsa-sha256; q=dns/txt; b=EtDrPAZ3jEMXRBH0jciu5DKAu/b2xJEy0jomcDuwFSa+VVG/Zrx9398vXP0SWZ28Hfll4PkvGzGzNpfQSUN6i1Pd2b/HLfUsMnHKaQPE9oGwryjxzDEs92I9jOeIsNd9C+LFSKHn0xY1XIKvDNx2l74BrW249qkeUv+HXo20tL4=; c=relaxed/simple; s=shh3fegwg5fppqsuzphvschd53n6ihuv; d=amazonses.com; t=1788189957; v=1; bh=cUPV6bPBjLOBV3+gqDMN0emmK+c9PnyKTIZ7bDn8oK8=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:Content-Type:X-SES-RECEIPT; Received: from AS4PR10CA0009.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::12) by DU0PR08MB8446.eurprd08.prod.outlook.com (2603:10a6:10:406::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Mon, 31 Aug 2026 15:25:53 +0000 Received: from AMS1EPF00000043.eurprd04.prod.outlook.com (2603:10a6:20b:5dc:cafe::92) by AS4PR10CA0009.outlook.office365.com (2603:10a6:20b:5dc::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.360.13 via Frontend Transport; Mon, 31 Aug 2026 15:25:53 +0000 Authentication-Results-Original: spf=pass (sender IP is 2a00:1450:4864:20::332) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:20::332 as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:20::332; helo=mail-wm1-x332.google.com; pr=C Received: from mail-wm1-x332.google.com (2a00:1450:4864:20::332) by AMS1EPF00000043.mail.protection.outlook.com (2603:10a6:20f:fff4:0:2:0:8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Mon, 31 Aug 2026 15:25:53 +0000 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-49b96837ca3so20452595e9.3 for ; Mon, 31 Aug 2026 08:25:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1788189953; x=1788794753; darn=virtuozzo.com; 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:content-type; bh=MLkDhzKPb9mkdmFctvTvA6Y+D4vho4gTAcavarjcGOI=; b=qyrK+LGgPt6u/P11oZbD/2WkE1aenKsVCCKF8WjDSGSi8Js6mzdNnIR3FA9mKq4zEX 5yixd9ORyi7AuE+Y5rorSMaKt5KNEtCsRYqy67gpEitFs54zfzBz15wEEYboSmVnrUVi 8KrpbAIA7b+J7hB4LRWq7Aq2SGONHm8rYqbHANF9rsXC4Er0FwHV3EZqpQX2jXZg2Euc T7xGF1CL7RXNGyEsEJ64OtrJyrm2tZpliE7FiP3zakT+RNRLmJ/1i2/rBPgkkmyZywo7 AeOvxTnjuIkHRHqLvJVAB5FRT9oyXFOwVSyYXAxYR7D4QTg25IAbhLCFVwve2HHDhyAk HMyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788189953; x=1788794753; 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:content-type; bh=MLkDhzKPb9mkdmFctvTvA6Y+D4vho4gTAcavarjcGOI=; b=B8gQU4mDk5CQepSVo6B6ldiLwOtbQvARjvQo8ewjgV8EldOz7vM1lxc20ptvNHBokz clKlJPNOMaFiOREhM46nhC4w5quSIM9PjOh86oSKkwWKHk6W83z0q4wcRyL/s+Fv9Hrz nSZyZ/ahXv/quqx6BV36Yt7101MnPA5dnt2AFC1FAefrZcmPsblDBCcDpb7oHI6vArkc vZ0dYhzuM/b1B2o0WLIt3vRbZPAMuFwZLT07Ob2Ed6wC6zraPgzclKJAjYa3YtnIaEBa GfuRofitnHykvPbT2sokLwk+IglTKw24BD1MXsGO3hOGg4tSBpdONts8RE12Yb6GgWc0 5Tig== X-Gm-Message-State: AFuF++kAZcSwfSs4+PK6YLl7VpZkeB5SmuVJQ+mDrI1kBXb8EvUBEzqh pKyDyWZX0Nc2Eyz8p9mpkxxau4BSR4f7tv8X6krT8iwuw+ruaLe2fk4mzUOmYQ6wVKTch3wa6Jl rpwYNzWk= X-Gm-Gg: AR+sD11txqsxFt4HFDKK0hT3N77jo5JcghzDWA2uffbZAkLbJTIJeN3I3z0uOn6WCFg hzOZAwTW3Gl8mI9jc1WAOV2xDjusuCYx55tfhZ7oAydK4j4pixOvc6nHZdAwjOi3Ofs278+EAdK 0v5YdeFC11NysgmJQ8mCr/zqyDxrw9HLFo+vmP6D8qTctnYzaUnINY4eOU7mkces9Yr+eOw0NnY mTw07nTgOYOaJciiKAnxI6Fm/ZJYFa0Wff+tUmjA5cvSExsZ4ITuESZxeJVs0fGrl4uVBFMZE8Q TXl4aXPWnhgJQbfqjoCYJcX9TPNvnEDvTdg8x1dLHVn2ZoQebyWehcHzizSfwqr1Qo3ad50klVQ aZIzgq+OuP4ayHT4Pe0YbNluNAndblX6QtoeAoVorSufkQzzgSc/Aonir6W3oAzmM6984SC7pYf 4jXJ/PktddyKTeFgV9UhOpAvGtovgnZoG5yr+aKanR0xJx4r6mdLg7RtqIow== X-Received: by 2002:a05:600c:621a:b0:49c:dc12:2ab0 with SMTP id 5b1f17b1804b1-49cdc122ac8mr31288195e9.11.1788189938255; Mon, 31 Aug 2026 08:25:38 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:3bc1:c53b:30b:203e]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49b927d462dsm138483495e9.0.2026.08.31.08.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 08:25:37 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.0 5/5] iotests/nbd-commands: cover the command flags and sparse replies #VSTOR-119829 Date: Mon, 31 Aug 2026 17:25:28 +0200 Message-ID: <20260831152528.1350583-6-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831152528.1350583-1-den@openvz.org> References: <20260831152528.1350583-1-den@openvz.org> Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 1 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:1 X-MS-TrafficTypeDiagnostic: AMS1EPF00000043:EE_|DU0PR08MB8446:EE_|AM2PEPF0001C717:EE_|DU0PR08MB10360:EE_|PAXPR08MB6942:EE_ X-MS-Office365-Filtering-Correlation-Id: 72cc5041-5638-4268-3f49-08df077429ba X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA|SL X-PERCEPTION-POINT-CUSTOM: vzpp X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|2092899012|82310400026|6059299003|12012899012|43022699015|3072899012|19002099009|5063699009|56012099006|10067099003|3023799007|22082099003|16102099003|55112099003|18002099003; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?FHhrS+ChM1BQ/t+PY18hpcAueWKStaQ9yHGViFdEZ6RDkcHRZegx5Beschdn?= =?us-ascii?Q?4OqbOOXb6vUyAjeW8/J5I5VEvDxLIl59zmAso+5BbIPQJ4jJzlejQtrCAOPZ?= =?us-ascii?Q?+YmNDPcGXGpmjEpxaE0zqAmzUD1Hlj/TwKbcoBjn/1moMhngp0KyJNcWqPUW?= =?us-ascii?Q?zgN5ovywMhI/3Lxjyc7eWMy95Hh7kqK2i76ZR0lw4os83PXUsipmnWQitZCk?= =?us-ascii?Q?oNtOek23Qxi3qKz4eaIyazTo0AmNFwojkB2PxzzjGoKGXHVD3aL+7+PsrqAP?= =?us-ascii?Q?CHHb8I7SIKfiJluBYgct4i3jtShvHTXjjl7NFPrDX2mHTi/9rIArETAGKI46?= =?us-ascii?Q?8hba7HHP+wlSvr57D29Po5PCi/ZtFcXPntyhID8+aAOP8l/pZ860ALnD3JeF?= =?us-ascii?Q?YWbcxutdq3/sobrY7id86a+SsO7/G1TpjeEOZP6NzTV4mRZNoB98cqo2eeuq?= =?us-ascii?Q?lc2QsPFS0vdcSUHiKciRuDlQPfXo6n/197q3iwJHsPnWPOyZTv/tD94jZ7ST?= =?us-ascii?Q?pMuQlslq/Q8Yf2++5nX4knRL7rrah1TkKaHlfe6274tTGzI4dKoQwOEz8SWH?= =?us-ascii?Q?eJO8KfTrm55PH6yxwVI3cxhWp2x1+Fp4yDhKMC3TrpndckQxmGaJH56aJhKo?= =?us-ascii?Q?7WkzgxdSdj1YPGzg62Z1N+ZiwY305hZoBQC7GYGJAnpXxNArNCnnmnpV4KZH?= =?us-ascii?Q?17TUOH0WKtUYgXxEBbUj1M3Y69V3oHRXmkdfF9MDiNZ/Ms9OQ+Rz83ubMIkT?= =?us-ascii?Q?nqCpnyPS3IMq0bilTjtzUJmiVh7SOBk6gOiJgWhMtBZLcnW4pgcJX39a5KLW?= =?us-ascii?Q?Plr2Y6lc6V3C+g+AOJgsAJnLletIkWJudnftW9/K26NTH+lkqHqXcxP4aDcT?= =?us-ascii?Q?uVeqIY3RNmFijulSOg1Qq2Z/2YF++NIu8ZhXkEd4TwCKq4xQ5CApHtcEwfua?= =?us-ascii?Q?PFwgj/PjRhgLh6AS116/Q1WVGiNjwH2++FC/y6QjpsbANXomwFqslX/ZN98A?= =?us-ascii?Q?YJF9eT/XQNyNp96qlONZqPdVeUVSyWQabcF0w8/OSw9SPTtczN/Pb0b3F/V1?= =?us-ascii?Q?Hq9ExhowU7ZNBhG/BA/We4OFHGIcWsn5e21+NScuPmIv45R47UMmtiWujJb5?= =?us-ascii?Q?ZShDOJicE+/kJDlK0U+Ttje+YRh/zG80gbIEtZFBpGV5zRGVsoTuJCi/dIpy?= =?us-ascii?Q?/U/2PcqrOR1QbZKYVBFjt4v4CTLoAgq2gciaaGdxlWVC8REFWW3yPDEr3aXR?= =?us-ascii?Q?L7noTMWAdt3AVDUTWoTfsCoU2BY6/N9jO5tMCFWA3Ip901r+9fNl2EEv7pTf?= =?us-ascii?Q?Vb2PuAQ9+8Sacb6zd8u2qCFQ1gtu7W5UD6u7nQixotOytecnCTa/UljM6INo?= =?us-ascii?Q?dTUCCPc8CPSxia0t55kpe1IxDH/Yef+29K6/aCsbmT2byOOtkca4N9GlqU9e?= =?us-ascii?Q?oCYjxAgpECyN9yiISaRqtH4a8CxXT5Z4WPwe/vcR3s6hFWnr/YajjBsPiYA2?= =?us-ascii?Q?4droDvUFb8qTNBrotXZWybjZlS/cytmk+rHv4MtfjYLOtc00KRZbolDZqdLB?= =?us-ascii?Q?nsxkNGf5hWxTXeU6oZGYlRXC/mdkuKkzvBs9lQhw2Q8SxY3fYD0hM5AeqvkS?= =?us-ascii?Q?Hd9OwYbs/vRYXusGPU7kqxzeh8jbtA3Q94aeDa3Lrx6qJcbbXONjCMXIAfOl?= =?us-ascii?Q?njBhQHEsAKa8be6iLuXYtyZcrmQbJbivsYHHjTRtwVtPJDceUCoDS3ZENwO+?= =?us-ascii?Q?LMKtJQfaPjD3PX5o5qyyqyPewjoJq0rmIXtdnryiaGRnAlrFLv1ZfCqLTKi1?= =?us-ascii?Q?lNRU/HX/LHhxPSeSOaK8sXaHcGdMYgMsJEpxT76N8CQB4+kz+KYy4ALq3dCh?= =?us-ascii?Q?d5O6Zhem86FbSA8n+1CaffhAiierHlUToqM52/ZiyHuMXCNEiOS5GhDHZbsR?= =?us-ascii?Q?+L9X5/j3nZmRsDTGx8nhSFrmsYIgUsaSrFJLu5O6wMxLfr8a0RUQ2rkEEBnI?= =?us-ascii?Q?TghdJUfjNyUU9P7jdTeNx8uKFFn2TgW+lYx0czUsEvO36Ro8b1EJ0obq3NQJ?= =?us-ascii?Q?ocsed3JiELbAN+IfjE9RSX7Kch16rGz8CfGwnDVAvGVMEgEl4EcqQvr3+OLw?= =?us-ascii?Q?daA6UF2FxUlHnLEKRAK30WjnKorEPDMxB9lR5ESh0amyh6ZwanBe98Gnu5l9?= =?us-ascii?Q?UnS/XUT2cFi1rkW3i00sZVwO6bc71nkM9VpJcj/phs/3nrGAG/+OfnQSkjem?= =?us-ascii?Q?o6kwh9//DOB6hU5cqT0KzO9W3HTdzRrbc96Yry0T78eqPtwdAoOptJh1gKS8?= =?us-ascii?Q?fZX5n8RejrBz0rsMgW2O7LMF?= X-Forefront-Antispam-Report-Untrusted: CIP:2a00:1450:4864:20::332;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x332.google.com;PTR:mail-wm1-x332.google.com;CAT:NONE;SFS:(13230040)(2092899012)(82310400026)(6059299003)(12012899012)(43022699015)(3072899012)(19002099009)(5063699009)(56012099006)(10067099003)(3023799007)(22082099003)(16102099003)(55112099003)(18002099003);DIR:INB; X-Auto-Response-Suppress: DR, OOF, AutoReply X-Exchange-RoutingPolicyChecked: nwN2bQ8CXNvhGqFWEdPCUgYYU5hLeuHr7WHfSbdriRf+4BWpDsIc+ifKm5mxrDB3f9n0vwdXcjpq8Bj4hMWaVu0MwHw0YT/Rm/zJ8Q+XaylZfxmI6zfnBu7VhiLcO79cEAA4aWhmhjC02YTGV8v6HvmIuMN3ARDE3lRn4FtCncap9BALnUP+642woFB+/ODmrv5hOYqECpb40XsCferK9yOVfLvwqSm4CGwjxucV2bCNuU/RSJCYIN6nFL/lEK0Soi9AWpdSbtp0TRvEzS44EybR6l2xBIIP9eHSrkj5WAMbIdCdmhERUK1QMpdqc9d0gOZfuWWHEveBeGgGJjs32w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8446 X-MS-Exchange-Organization-ExpirationStartTime: 31 Aug 2026 15:26:00.7572 (UTC) X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000 X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit X-MS-Exchange-Organization-Network-Message-Id: 72cc5041-5638-4268-3f49-08df077429ba X-MS-Exchange-Organization-MessageDirectionality: Incoming X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C717.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Exchange-Organization-AuthSource: AM2PEPF0001C717.eurprd05.prod.outlook.com X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Office365-Filtering-Correlation-Id-Prvs: 9f4c38ee-2fc5-45d0-71b6-08df07742552 X-MS-Exchange-Organization-SCL: -1 X-Microsoft-Antispam: BCL:0;ARA:13230040|2092899012|35042699022|3072899012|43022699015|12012899012|82310400026|6059299003|5133699003|22082099003|55112099003|16102099003|57112099003|18003699003|3023799007|5063699009|10067099003|19002099009; X-Forefront-Antispam-Report: CIP:99.81.216.78;CTRY:IE;LANG:en;SCL:-1;SRV:;IPV:CAL;SFV:SKN;H:nat.eu.perception-point.io;PTR:nat2.eu.perception-point.io;CAT:NONE;SFS:(13230040)(2092899012)(35042699022)(3072899012)(43022699015)(12012899012)(82310400026)(6059299003)(5133699003)(22082099003)(55112099003)(16102099003)(57112099003)(18003699003)(3023799007)(5063699009)(10067099003)(19002099009);DIR:INB; X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2026 15:26:00.4402 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 72cc5041-5638-4268-3f49-08df077429ba X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C717.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB10360 X-MS-Exchange-Transport-EndToEndLatency: 00:00:04.4172881 X-MS-Exchange-Processed-By-BccFoldering: 15.21.0382.004 Content-Type: text/plain X-Microsoft-Antispam-Mailbox-Delivery: ucf:0;jmr:0;auth:0;dest:I;ENG:(910005)(944506478)(944626604)(920097)(930201)(20251009189)(140003); X-Microsoft-Antispam-Message-Info: =?iso-8859-1?Q?/4OKIA7ZBGSA0p5FQzdsnOS9FUR7ss0rVtZqt6CQvAKjB6459WEJD7qZ8a?= =?iso-8859-1?Q?GkrqOcVUHKhiOxOc50jknQDzOQwHNajMgcg2sl7qy1eKpi4EZ8kRM+hq82?= =?iso-8859-1?Q?M0sNOqFv1nGgzugW7nTijuYLxaEhwihO8EK42xv5uL0KRDy+9ojYUOC4TP?= =?iso-8859-1?Q?/JceEp3sVF+93M5MI5P0Rqji4bXzcClAUCdPj3o160z9vZxq28S2h1QLeP?= =?iso-8859-1?Q?cWNEIuPSg7X6w9iKDshICUZPd9IP92rwaVmTivJbeq2jMukbPILDAv7LYM?= =?iso-8859-1?Q?5L/nirI2LppGV0wKfXCoYicfnypX+HJ1/19TEtKX9VZCobDeYNgyeuqftV?= =?iso-8859-1?Q?gJNGWH1Lx2PidnaJlQJDClEoLN1rDAUQgOoG6npTvpsq1m4Rtv7rFXaUij?= =?iso-8859-1?Q?ZAt2t+j1O5v6lzASPzwyxB+Q4XVJKvIaOPIa0S9DfqsRorqrZfEp43KSUd?= =?iso-8859-1?Q?sZ9LRgka+9uMZI5QQhEP/9U/Uxu/gyTzd4B5cug/hQuX1UoNHcbjYp543n?= =?iso-8859-1?Q?C21XaTtDqDqSAeTKbGJEq5KRRdjwq9/+m+n1UQNUNfdaNRPpWR3UZ+4zYu?= =?iso-8859-1?Q?5L+ZBxJydgmCOG1CRvvphOjBhIQ4W2noDDjCIFOdzN53UyjwIn8XZ3zMbe?= =?iso-8859-1?Q?bk3wxX4WdUfio5rBpYIVWGAaJpo9DhK3YfpjCz2wtJYaIlnSes4OyYjQgy?= =?iso-8859-1?Q?XlIsytbNFeZtzSJByR9O3mMPJV9VmtkNqiuPXI2vmJ5HYysYqnVIrh8NAr?= =?iso-8859-1?Q?cESQepNh/zvaXGQbke4PNvbSTYd13hqLt7X1rk6eeXFnFuMUu3xjNBsEok?= =?iso-8859-1?Q?uLe80snHcbLtp4qSkuqN3Y63q0y9AQCyF8KN39DjpHBc2SN431jTF/ulyT?= =?iso-8859-1?Q?b0JouqgKlU+r0xavVOx7ZzKj+mxvmf6XgKOcMc628aOfsEHcF450m9YxhA?= =?iso-8859-1?Q?f6YhmJz9Q9H8HdOrCC27/36mFeYWjXLXZIvcQLldp6ovDKPq8yzYkw2cSl?= =?iso-8859-1?Q?MTqhqrKQgJ45bbjkESW26Ze2h8rBx2k26IgCExKrZ389X6wprt7uXGnznR?= =?iso-8859-1?Q?eO6nyMRS69yd4db5G50vVft556heoHtFhD4fcc18i3nI2ISd9VizIKRc78?= =?iso-8859-1?Q?Gs1on64x8JLQnRE58NzGpbYqxJC07ukeHotIwNyW0ceHyztqRSVRAu/9vn?= =?iso-8859-1?Q?PRhsvq2wBKSW6sE9eDS+npuDlM0ZmGk4LC5K7hRGORGLac15P5lst+pOkY?= =?iso-8859-1?Q?9R3fzCh2nCQGhjVNYI2hfxyo/3SiGBBIObELzInrLDvpVcZfMUPPoG9kCU?= =?iso-8859-1?Q?vVYrVhWM2vX5qFwvzzOSrI0EVBQOR1BjMuV+C0/GTrZRhBlwWJHBlec7yd?= =?iso-8859-1?Q?BaaugC3wI0QrU/ymLNdhj6SqnNv7MO8Bi63en1m7gNTvDH/3SXR8eOessz?= =?iso-8859-1?Q?73KWjCygH59wftlsldRPrVR4cnNDofCgJpGenGiYfLIYreCmV0WTydNSRc?= =?iso-8859-1?Q?colMrwkcWXan1Ny9SKEQCQFeveMW5GTL+re3TisFKf6gqQMeTYxt/lUOK/?= =?iso-8859-1?Q?zkC2WafgsPUp2C6Zhxsw1oD10WAjD/oz8a5MUfMsp8XazsAt9wbcppFqVL?= =?iso-8859-1?Q?pzJvmirANcWsWQKX3Lcx3Ogi/dX4LcJbKEzXW75psCrod0Q09HzSx1HoJb?= =?iso-8859-1?Q?04+z12N4POzFjzoCbWVRDCgoeTpOSbuuxJJDimRiz+zlwPgMYn0G15uI/l?= =?iso-8859-1?Q?kI5PzRHusbthUD6zbMxQqN/7WY5b+pYmqmPm8Yr4ceJulq4ZJTIdK5iScP?= =?iso-8859-1?Q?o+6lgyHe2h/OiaolInLEvpGEzzznVPphnWw209VMvMb0XY/sML2A2h3rDC?= =?iso-8859-1?Q?6kYtewrqshVbfxB/pUJ0wiGPi2vJgjwoaFSat2IDP9NhXOImUmnmE1glt1?= =?iso-8859-1?Q?GJ/pQVM6TFq43bAc1U8HBYiNpj7D6p6oyn9eEzFjAOY37sCh9wIyyAGkqX?= =?iso-8859-1?Q?oxdEvPb6HYHt6rz5dKEIMKfuM5huw4E9wR60/YKpR8hS8XgBWeIduTLFlL?= =?iso-8859-1?Q?a1PY+Lv3HHFYC5zlszjHaXuOoSzZBezujuqP6eBbnUT4P7PdKZt6WR89Ef?= =?iso-8859-1?Q?G9kmJ7OcM0qhFCsXQ2LBiGAEB82Ulr9TBbySxJAfv4nHjWxYby89IpRKlS?= =?iso-8859-1?Q?a49Jz8TDExoTxmLzWfSAisX0On1KbHYYJ1YAg1qsEti3Z8+fND7l3TkdPh?= =?iso-8859-1?Q?FHGb2wghb6+zXJnmK1UFiLyqhiuKRqVbxMPReWMvngETRKKYK5mKgbyAkZ?= =?iso-8859-1?Q?D7wcDYZPOjXfvmlJWTQBYGbCC2B0XAz4Sxqy/2lS9oI/hfu6P6YMRJRrVZ?= =?iso-8859-1?Q?x9j8FFC5SunKSALXUL9ge4eAYFtNiQmnA6r9FkHmqu8Wq07yVXqtjchnUX?= =?iso-8859-1?Q?6m5Ua4dQxfDNNeVZZ5WzCT14PtuvxfyRsYUCtlbKqciJLB/dZ0ocej73HC?= =?iso-8859-1?Q?gRWvDKQNTtpdB5L7PnOj97FuMMXOs70WzudUR49c9iBiI+7naZyNu5Gh60?= =?iso-8859-1?Q?Ji8rI5hPt8kNDtxuyai0eW7DZFLDIEVeHZsRtboe0/t0F/yoGkiYMqod9i?= =?iso-8859-1?Q?4Wydb0f+TK/0oUd16ccqtIJGtl4yM6LpBaPHJgtd4XnEks0d/OdvDKIZPO?= =?iso-8859-1?Q?uWr2Djcr?= MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: QEMU List-Id: From: Denis V. Lunev No test sends the NBD command flags, so the server paths behind them go unexercised. Send them from the new client. A structured read answers a hole with an offset and a length rather than a cluster of zeroes. Lay out data, a hole and data again, and read the three arrangements a hole can appear in, since a leading hole and a hole between two extents take different turns through nbd_co_send_sparse_read(). NBD_CMD_FLAG_DF asks for one chunk instead, which is the same layout sent as real zeroes. Check the chunk boundaries in both forms, and that the data still reads back. NBD_CMD_FLAG_REQ_ONE caps the extent array at one entry, so the block status reply covers only the first cluster of the three asked about. That a reply may describe less than was requested is also how the server keeps NBD_MAX_BLOCK_STATUS_EXTENTS from being exceeded on a long fragmented range, and a client assuming full coverage believes stale status. NBD_CMD_FLAG_FAST_ZERO becomes BDRV_REQ_NO_FALLBACK. A cluster aligned zero can be done by marking the cluster, while zeroing part of a cluster over a backing file needs the read modify write the flag forbids, so check both the success and the ENOTSUP. NBD_CMD_FLAG_FUA is added to a write and a trim. Signed-off-by: Denis V. Lunev CC: Eric Blake Message-ID: <20260827161002.310688-6-den@openvz.org> Reviewed-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/tests/nbd-commands | 72 ++++++++++++++++++++++- tests/qemu-iotests/tests/nbd-commands.out | 4 +- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/tests/qemu-iotests/tests/nbd-commands b/tests/qemu-iotests/tests/nbd-commands index 09e811724b1..adfd4a495cb 100755 --- a/tests/qemu-iotests/tests/nbd-commands +++ b/tests/qemu-iotests/tests/nbd-commands @@ -25,6 +25,7 @@ nbd: ModuleType DEPTH_LOCAL = 1 DEPTH_BACKING = 2 +CLUSTER = 65536 class TestNbdCommands(iotests.QMPTestCase): @@ -90,7 +91,7 @@ class TestNbdCommands(iotests.QMPTestCase): self.h.shutdown() self.h = None - def block_status(self, count=size, wanted=None): + def block_status(self, count=size, wanted=None, flags=0): """Map each meta context in the reply to its list of extents.""" reply = {} @@ -99,9 +100,9 @@ class TestNbdCommands(iotests.QMPTestCase): entries[1::2])) if wanted is None: - self.h.block_status(count, 0, cb) + self.h.block_status(count, 0, cb, flags) else: - self.h.block_status_filter(count, 0, wanted, cb) + self.h.block_status_filter(count, 0, wanted, cb, flags) return reply def top_extents(self): @@ -158,6 +159,71 @@ class TestNbdCommands(iotests.QMPTestCase): for wanted in (['base:allocation'], ['qemu:allocation-depth']): self.assertEqual(sorted(self.block_status(wanted=wanted)), wanted) + def read_chunks(self, count, offset, flags=0): + chunks = [] + + def cb(subbuf, off, status, _err): + chunks.append((off, len(subbuf), status)) + + self.h.pread_structured(count, offset, cb, flags) + return chunks + + def make_sparse(self): + """Lay out data, a hole and data again, one cluster each.""" + self.h.pwrite(b'z' * CLUSTER, 0) + self.h.zero(CLUSTER, CLUSTER) + self.h.pwrite(b'z' * CLUSTER, 2 * CLUSTER) + + def test_read_sparse_chunks(self): + self.make_sparse() + + first = (0, CLUSTER, nbd.READ_DATA) + hole = (CLUSTER, CLUSTER, nbd.READ_HOLE) + second = (2 * CLUSTER, CLUSTER, nbd.READ_DATA) + + # A hole is an offset and a length, not a cluster of zeroes, + # wherever it falls in the reply + self.assertEqual(self.read_chunks(2 * CLUSTER, 0), [first, hole]) + self.assertEqual(self.read_chunks(2 * CLUSTER, CLUSTER), + [hole, second]) + self.assertEqual(self.read_chunks(3 * CLUSTER, 0), + [first, hole, second]) + + self.assertEqual(self.h.pread(CLUSTER, CLUSTER), bytes(CLUSTER)) + self.assertEqual(self.h.pread(CLUSTER, 0), b'z' * CLUSTER) + + def test_read_dont_fragment(self): + self.make_sparse() + + self.assertEqual(self.read_chunks(3 * CLUSTER, 0, nbd.CMD_FLAG_DF), + [(0, 3 * CLUSTER, nbd.READ_DATA)]) + + def test_block_status_req_one(self): + hole = nbd.STATE_HOLE | nbd.STATE_ZERO + self.make_sparse() + + alloc = self.block_status(3 * CLUSTER)['base:allocation'] + self.assertEqual(alloc, [(CLUSTER, 0), (CLUSTER, hole), (CLUSTER, 0)]) + + # One extent, so the reply covers less than was asked for and the + # client has to come back for the rest + alloc = self.block_status(3 * CLUSTER, flags=nbd.CMD_FLAG_REQ_ONE) + self.assertEqual(alloc['base:allocation'], [(CLUSTER, 0)]) + + def test_write_and_trim_fua(self): + self.h.pwrite(b'y' * 4096, 4096, nbd.CMD_FLAG_FUA) + self.assertEqual(self.h.pread(4096, 4096), b'y' * 4096) + self.h.trim(4096, 4096, nbd.CMD_FLAG_FUA) + + def test_fast_zero(self): + self.h.zero(CLUSTER, CLUSTER, nbd.CMD_FLAG_FAST_ZERO) + self.assertEqual(self.h.pread(CLUSTER, CLUSTER), bytes(CLUSTER)) + + # Zeroing part of a cluster needs the fallback the flag forbids + with self.assertRaises(nbd.Error) as caught: + self.h.zero(4096, 4096, nbd.CMD_FLAG_FAST_ZERO) + self.assertEqual(caught.exception.errno, 'ENOTSUP') + def test_cache_past_end_of_export(self): self.assertRaises(nbd.Error, self.h.cache, size + 1, 0) diff --git a/tests/qemu-iotests/tests/nbd-commands.out b/tests/qemu-iotests/tests/nbd-commands.out index 2f7d3902f23..281b69efeac 100644 --- a/tests/qemu-iotests/tests/nbd-commands.out +++ b/tests/qemu-iotests/tests/nbd-commands.out @@ -1,5 +1,5 @@ -....... +............ ---------------------------------------------------------------------- -Ran 7 tests +Ran 12 tests OK -- 2.53.0