From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM9PR08MB6179.eurprd08.prod.outlook.com (2603:10a6:20b:2da::9) by PAXPR08MB6942.eurprd08.prod.outlook.com with HTTPS; Mon, 31 Aug 2026 15:26:05 +0000 Received: from AS4P191CA0024.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d9::18) by AM9PR08MB6179.eurprd08.prod.outlook.com (2603:10a6:20b:2da::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:26:01 +0000 Received: from AM3PEPF0000A792.eurprd04.prod.outlook.com (2603:10a6:20b:5d9:cafe::9e) by AS4P191CA0024.outlook.office365.com (2603:10a6:20b:5d9::18) 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:01 +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 AM3PEPF0000A792.mail.protection.outlook.com (10.167.16.121) 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::32c X-PP-Forefront-Antispam-Report: CIP:2a00:1450:4864:20::32c;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x32c.google.com;PTR:mail-wm1-x32c.google.com;CAT:NONE;SFS:(13230040)(704162311799003)(43022699015)(82310400026)(2092899012)(12012899012)(3072899012)(6059299003)(19002099009)(18002099003)(55112099003)(22082099003)(16102099003)(5023799004)(5063699009)(56012099006)(10067099003)(3023799007);DIR:INB; Received: from GV1PR07CU001.outbound.protection.outlook.com (mail-gv1pr07cu00105.outbound.protection.outlook.com [40.93.214.101]) by inbound-smtp.eu-west-1.amazonaws.com with SMTP id 9ep2v430ub0vpb6jc7eqg61gpclbcoe7h4qa96g1; 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.214.101 as permitted sender) client-ip=40.93.214.101; envelope-from=den@openvz.org; helo=GV1PR07CU001.outbound.protection.outlook.com; Authentication-Results-Original: amazonses.com; spf=softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.214.101 as permitted sender) client-ip=40.93.214.101; envelope-from=den@openvz.org; helo=GV1PR07CU001.outbound.protection.outlook.com; dkim=pass header.i=@openvz.org; dmarc=pass header.from=openvz.org; X-SES-RECEIPT: AEFBQUFBQUFBQUFHRFV4ZlBLVkdMTTZRb2Viekg2NFRTK2ltVXlKNWNVQUpvbDQ4cXBjVDhFOUUrb0p4U3pBVC9iWjJqckFmK3VMdzdvZ0p6bWRxYXlhN0F3YXRTQVJzNk94YlNwdCtNS3VJUytvMXc2ZWE2S09wWlZUWVhCekRBSkhlcWJXOU4zY0JTb2JTNERPNlY3bFFaRGNrSHY4RCtaV2J3MUhwbnF4WkZDWkNsODZ5dTdwcTBpSUpXOTFBaGR1bUdnRytlc2t4bkd1UjNiYk82QUVwc0kzY05YdnhUZlo2MCtvUXNES0k4N1gwc2ZsL1hUZktNZjBFdE9mYTA4Z1lIMzRiVjlhU3JkV05SZHJwMzE1TFFkTmF3d2NYRnFLekJHTnJxSmc2RndiejduVFBSbkE9PQ== X-SES-DKIM-SIGNATURE: a=rsa-sha256; q=dns/txt; b=e6X5dTbv+IVwMoVuSbWvRB9WoINd4msqRhYUlWw5njL6NAwh98thD+jjq3UPTrZwK/Y2iy+90dLwtrfyQ0S1FSrbWfw0j8D5WyJWojBssHVK0WL2F17hWuHfeyuI+I4IGYg9NHagMC3Zw806dT+gcuGGbfa1MnZ+9LgV4FPMuHA=; c=relaxed/simple; s=shh3fegwg5fppqsuzphvschd53n6ihuv; d=amazonses.com; t=1788189958; v=1; bh=ffnNymIalUGG/rhMbbmffxpbDZQuqwrZCrT7m6dQCBc=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:Content-Type:X-SES-RECEIPT; Received: from DUZPR01CA0024.eurprd01.prod.exchangelabs.com (2603:10a6:10:46b::11) by PAXPR08MB7599.eurprd08.prod.outlook.com (2603:10a6:102:23e::7) 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:35 +0000 Received: from DB3PEPF0000885C.eurprd02.prod.outlook.com (2603:10a6:10:46b:cafe::7a) by DUZPR01CA0024.outlook.office365.com (2603:10a6:10:46b::11) 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:35 +0000 Authentication-Results-Original: spf=pass (sender IP is 2a00:1450:4864:20::32c) 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::32c as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:20::32c; helo=mail-wm1-x32c.google.com; pr=C Received: from mail-wm1-x32c.google.com (2a00:1450:4864:20::32c) by DB3PEPF0000885C.mail.protection.outlook.com (2603:10a6:18:3::607) 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:34 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-49a97714f5dso28187645e9.0 for ; Mon, 31 Aug 2026 08:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1788189934; x=1788794734; 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=/a6+i3g8PC0pxvUDu2332Y6TgvnQ59dE04wZ4Z5sJfs=; b=kkCHGn6WbPSE3aFV0ck0CB2vbHcMy8BCsvTo4/ia8qAT+kS6kyvoOdkN6JjBKuCj9x a7OZIdsBvqqqEIiUJfPesSfjVwotE6BYwvs2pEfOqF+gJpW9qX197dLEK26xqUIa5kjJ gp55FwDqNRizcinItG/4Rdzb8ckzEKRvMqDhxLjqm2KszF0/4HsvfMT66U21bgBda5ij LcdRhjdvk7rc/fYwIQ1+H/GigUNGC0KkeeLHTb0pmFuZaxF608u8yHZGwSQkKMwUIC5c PdpCXV/7wWrQoRU2pwL4ewiL14sAbVGIkgjTvtDoZMDaW8EAv14zAsQJKNou+Kd89nEC LIxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788189934; x=1788794734; 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=/a6+i3g8PC0pxvUDu2332Y6TgvnQ59dE04wZ4Z5sJfs=; b=H2SGrL5YD+yFJs5IbjfJylwzP9zqOUAKa7V1aCb6fYJJ/kwa43GlUrXppncnl39y5U 8QCjfHDs5Vy7rIRf6H99HoChec35YV2pruUDdjD/ssW1JbjRYGzVWZEoGnJzzHWNMNRk XzWlLZQaa1a6tB2INZ6m9VCefobQ/1Y9cu1h6sIK0eX4TSAC2vBTf3anaQO3NusuuT9Q VnrH5iEKMhz2meXaGcWgJF5U0jCcjzTpxjAYb4Kdh1TDJQ74AxiluFRqVTKDYMqI8Lf9 GMLSr0S39cqsNikW7R7M6w1Wzy+5ITQcnhZ+FoGacjA4FNjK8NmXGCUXWkDYtuEWSPfX dRLA== X-Gm-Message-State: AFuF++lTh1vKG95v2lIUTBtKIL7pg1lMqxxpYZ6Baeu8y6lo0Ofl2FPg wL5s0AWmr9Ppoap39ehHybdMnkkqYBFIxf+nGR0w4Gb/tFmUTAnRc48LArKaTpwVsdjMIpFGQuS 17TJQmWg= X-Gm-Gg: AR+sD13SUV7OS3HbFpJ0UKK/1IgbRPBfy6cbg4cClqusL37JZ6Psg4ozRg0+mkF1mzg 5w2f3jshywdjLCtQ5KSNh14bingKQk3QHT9RMMWxc9NT2qqfC2Jf43QZ+zArKYVfFfkVK2JR7BG +IeI/GStB0qtDCmE5XkJNRUk2zY1F8/lkxo62Mzi3xps8eBJep43mQzZzwzwsqj/dlLvIvdHeqG eG037B+RVOSMr4TQVO4RFpnYZXG5XZS3+YZEHNaFwpII0fy3/BDgdyu4OGo3OSxpXimdmyb9TTQ fH4FpSPLQ4FbgTgcy8EwPjCaACiYm018fJjNgnw4AO/Pk4DqOZQp0nOd5npwmFler+ZucITEzpR D4vTFfrlURc1c94fpzlpkrF6Td/LsQ6YSu4v0mBPjuCrQvbfWscSxJA5ltIzO4klA5SEHCo1//Q PD+eygMgpNT8vL2JaS/44J3hF8mm7v8dYZKy57ivCjVtDqi+CoLMX9iVJK X-Received: by 2002:a05:600c:19c8:b0:49b:c8e:a211 with SMTP id 5b1f17b1804b1-49b91c20bfamr414777065e9.5.1788189933482; Mon, 31 Aug 2026 08:25:33 -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.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 08:25:33 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.0 1/5] iotests: add coverage for NBD transmission commands #VSTOR-119829 Date: Mon, 31 Aug 2026 17:25:24 +0200 Message-ID: <20260831152528.1350583-2-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: DB3PEPF0000885C:EE_|PAXPR08MB7599:EE_|AM3PEPF0000A792:EE_|AM9PR08MB6179:EE_|PAXPR08MB6942:EE_ X-MS-Office365-Filtering-Correlation-Id: e8fb59cc-7a84-42e8-68b2-08df077429dd 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|704162311799003|43022699015|82310400026|2092899012|12012899012|3072899012|6059299003|19002099009|18002099003|55112099003|22082099003|16102099003|5023799004|5063699009|56012099006|10067099003|3023799007; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?Vw8rv+2cnp10KgBIKVEav1mWXKdR0SOtmBblv1j6nkAbQiILCXXF5HEM2mmn?= =?us-ascii?Q?gyP+QskZs85Jdf1nXu76fj1oTlJ5mjbSzN8mfKQmepRnAX6sBd3JtsDJPL8U?= =?us-ascii?Q?nPO3G9H/b37tOWR33Ktk6NTC4KYEaH7CGbvA9C//PtuRDT5rgGG/qgBVmA7p?= =?us-ascii?Q?y2L7NFmfHDDfHFtqd1A3+Q6ROYN6DbnCdlPxtDtqLL4KC5AiwsgcIn6jyMgA?= =?us-ascii?Q?0JY2ZjM6nxHVUivdlrg4jlZR1TnGoxRwnE6moDmlC2fHOVwwhuIUTGupDe45?= =?us-ascii?Q?7BjL99Gs5hzHhaEIho7azf2OPITW9ca5I7fNIJxF+Rxk0p8EBYB01tuqLQp+?= =?us-ascii?Q?DSl7NoLnxHoBHQJyH5gbuWbxSLNmcN5/djaw4frPda6Y+hhQqHh7URk5Kr/L?= =?us-ascii?Q?CY9OwVh1pjaENyf8QNaaQymWdS3Tj8UMfEyZGWksrrVcaUsYbE2QlY0XIv+G?= =?us-ascii?Q?BWZGB0thCjNps/gVxRFcKs1EU6ZvRptPTmuXeXeCbXwS+3i2CYkh+eIYfXHk?= =?us-ascii?Q?kiIBcUAI7qj0SY6LkhEaPzz6jiOWy+5B+6jOtuStttqeSZJcg92UX7mBCb/a?= =?us-ascii?Q?53an+mvEBAVSUEUKMMYyFPSok1VZZpoYNtSW9iPpUYrqT77rqVIGaYHq9TuC?= =?us-ascii?Q?J2eyTuSYMBN8SAK/OYeZ6bJSD1dCfU3kgtC1abcp5U5WMxUsDKXkoStOMBas?= =?us-ascii?Q?MIsRtw3UOkqYqINbSmJwjucocSL0B6p8VOksN3qrW8TO+WVLlDpQj/RgAYvJ?= =?us-ascii?Q?CE3t9rnEeRavNAHjAF/1YScopHRntwCt+8yCwphTzcRQlG6g5wTbxC30ZecH?= =?us-ascii?Q?N4dlw/kzQ0LmqmQ3zwsjXNmIHaRl4Zr37/tLbH9y6wWfUIv/1IwJS0LUlQup?= =?us-ascii?Q?RsRJRYlPlvMvm6tMpUdFlMcB7m7R1gnds7wkRtF0FhYXq8TWCeBjdq+r+T9L?= =?us-ascii?Q?nwUxcAuvMHcTRHlRgjYlyC64IlVtoSvS/Xab52sBlBp6MHbD0/NG5CXjs9CZ?= =?us-ascii?Q?sDy7AgjptgMZYtE9lkZ4NHM48AHkEtR2kn9juVz5zVZZL74J9Ybzw5r2uFxH?= =?us-ascii?Q?Z9gNxjMaC+G+9aws7t+BK4u0DrM+UoHknQNW0wJOG4JBWABT2viqUWE76F5F?= =?us-ascii?Q?jyztgOOcVMIfHq3iW7Lk9gSmnafQkvL03Kw3FnRzfhQ9UplovEDH2NcONnCA?= =?us-ascii?Q?nVPcK4+ImgWG3MDvvpThLUZQ9LYzACLAiGELo8PELqpDDTVjrrq27xiROnR3?= =?us-ascii?Q?V0Az6s5rlen2H6FWBKtje0pWcjEEjVEkcTVH+7DtuHysqIrwqp47J6+YUGuK?= =?us-ascii?Q?IbmCkPK4C7hfhyOFcd8h0RJYTLGfOVeNfpYI7N5W2qQAq5CHPh/cxzpSZd7x?= =?us-ascii?Q?fa9KXgou2vzWdFtmPYef4GRRrlVAcjeUIi3QQRSkWik+vmSDHgUF/41gnmcr?= =?us-ascii?Q?FZj8Ww5Ww4+AKX2rGMxvbIcLDQQ1voBh2kB1BRqJ8X/96RcmPjVLzl/X26M0?= =?us-ascii?Q?w0UXLahK3q9Z+69+5m3m455Qtuq1jtel2onUi9dmYYKTn4ts8nubMXdb1xfA?= =?us-ascii?Q?d2750Xs9RZFxqQdr8XDR4BvmzYRcT4P36gCD31iR0m0PVFGMXVX9mQy7hPdI?= =?us-ascii?Q?dqRKamLn65dG3eKHc6nXOEygdTt0g/cCZzLSxQ8hdB90I71pV9BpOUwGJ5ns?= =?us-ascii?Q?lSvQIH2uG6taQrsffkXT/HlBVe1GH/qgNrR5msCqNZDZb0mgvhSGRdjjP9gk?= =?us-ascii?Q?qb2nR9ZKvgVf9NnaejxfKLWMrCPV1VzWliBs56pfYnp8SmdM98EdhkwusriS?= =?us-ascii?Q?rK2r8Cb7po6G7446HOIcebx0jS6cZQf0L2MK3/uNZTt8sL+jGpAb1EOCwxPa?= =?us-ascii?Q?AfkdwPMLXuunXjz0nI8FvuJsQPg9TrVqC2is4zNLzhesYpDkFm0pSKH1hKba?= =?us-ascii?Q?6f/TUbRl8O2JFfQjVhxxNx+j1OnKKRYHcYXmP6HvqKnZ6nwY2H9VFpYTr7DQ?= =?us-ascii?Q?Ur5+CgSa7Kv+bmzpaa3nNar16HPWmkf3ySJtlMkAZVAD8FAqx4BPOyhxH6n1?= =?us-ascii?Q?GrseSYgAENnxCvbq3MwN/ozW7zuNLMW33wwP+jGkS/RYA3zQKaRRhZIkZqKz?= =?us-ascii?Q?5gga8V8U7nLXsdiqMF7S040wsOE4c9MxUcR/7t8Ri9fJEAJx/XLsRhG1cWZV?= =?us-ascii?Q?V+Jqy4wE+SiK1JzUbiMnM7zHwlx5YQ7UDcDIuSAS3qqRknanhbvU5T2iD3+W?= =?us-ascii?Q?apoagRkzfb4fj5zXhdAp?= X-Forefront-Antispam-Report-Untrusted: CIP:2a00:1450:4864:20::32c;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x32c.google.com;PTR:mail-wm1-x32c.google.com;CAT:NONE;SFS:(13230040)(704162311799003)(43022699015)(82310400026)(2092899012)(12012899012)(3072899012)(6059299003)(19002099009)(18002099003)(55112099003)(22082099003)(16102099003)(5023799004)(5063699009)(56012099006)(10067099003)(3023799007);DIR:INB; X-Auto-Response-Suppress: DR, OOF, AutoReply X-Exchange-RoutingPolicyChecked: aj6AeMzF3Tg7/7dy5r0Fc5DhubZXNb7IjPSBJNfkzcyAoQN926TX8XNtz2lp0PvzdVmJpFw9lKq+adYNM75FKhAotDRs0TuyTQpQux0iEWNurO6GZyGO32q8z6G2Q/wpoKcAsjOZ9Rpdi0KyV2axKr9WOKMG4+sNkC8Y0kDbyT3j9USzDBQtJab2Nu3tZdR483anA8jL9OzbcFx1S+pOcN0JdOOxj5X0h6k9O0Lmqy9hSfs2CmMsFV/L24ZT0MboZYLc0fC0VMPL6TF46vx+ma5bF4/pk/OV7SwSg2pTJvk0qj+8X26mmuyGrk3hG11sMErtNoTl/BlEGpAD7+R+Lg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7599 X-MS-Exchange-Organization-ExpirationStartTime: 31 Aug 2026 15:26:00.9876 (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: e8fb59cc-7a84-42e8-68b2-08df077429dd X-MS-Exchange-Organization-MessageDirectionality: Incoming X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A792.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Exchange-Organization-AuthSource: AM3PEPF0000A792.eurprd04.prod.outlook.com X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Office365-Filtering-Correlation-Id-Prvs: faefa5ec-11be-4f0a-0d17-08df07741a54 X-MS-Exchange-Organization-SCL: -1 X-Microsoft-Antispam: BCL:0;ARA:13230040|704162311799003|82310400026|43022699015|2092899012|3072899012|35042699022|12012899012|6059299003|5133699003|19002099009|22082099003|16102099003|55112099003|57112099003|5023799004|5063699009|18003699003|3023799007|10067099003; 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)(704162311799003)(82310400026)(43022699015)(2092899012)(3072899012)(35042699022)(12012899012)(6059299003)(5133699003)(19002099009)(22082099003)(16102099003)(55112099003)(57112099003)(5023799004)(5063699009)(18003699003)(3023799007)(10067099003);DIR:INB; X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2026 15:26:00.5069 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e8fb59cc-7a84-42e8-68b2-08df077429dd X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF0000A792.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB6179 X-MS-Exchange-Transport-EndToEndLatency: 00:00:04.5372108 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?yAa+3ybcPgJjHHjslhoJ4wnJ0CRU17xvOol6X0guHuQh+Hx6fqMp9eiN33?= =?iso-8859-1?Q?V/LSJm0crSE0IK3kX9MPi4pyE/puvXVftIVUO5FXz+BBvh0lt5oZBDstp6?= =?iso-8859-1?Q?LoPj0VFxT9dVPQM624teiNsfUKkXWza+Z0bDMk/AifqHxkZvQ/L57WSOY9?= =?iso-8859-1?Q?8DMx8c76LbNxvTc2v/Umbi+sU4mn/h7avnlphBjeU0P2NczbfxCVNcyJKl?= =?iso-8859-1?Q?yCn15w/0Sq6CqorE9WXHrBGy0Mn11n7qTk05AiXmfEvEbKC6O+umvtTtlM?= =?iso-8859-1?Q?GpDtZoNazIlnAD4rlfVC+iNgAWom0lUrHq1qPPhoc+dDUeve7VJcCGJLp9?= =?iso-8859-1?Q?bje0VWBJ31cWlWDYRPNak94PQZMerfN6rqvUQc/LNxKxG9DdZWXXwmOAhU?= =?iso-8859-1?Q?TRrUCr0tcD3J/qbjJJuLgiMC99FnM9S8AY0UQq9ILUGf7Np2a9wfyG67IQ?= =?iso-8859-1?Q?L18Sv/YCdV6Dc0c/TchkqM9DGsH4k1pxk76lbXWHreCB0UMHUkbNivD/mY?= =?iso-8859-1?Q?zaI9/xhkW316ZZVY+IC7hsHPMqubevxqdSZl8odu/pKbAryBwkZx0M46ZL?= =?iso-8859-1?Q?1l0aEUmf0+rGDaJlJXlcURpuC1XreDGJvnu3HQvXq/6rSody84tMfAsU74?= =?iso-8859-1?Q?Ghk3LQmjgFDOALJOueBVZxLmkGZHOR7tW2yJj9g7ieBGoluE64ed2aNfCZ?= =?iso-8859-1?Q?8srlugYfR/DNsczhejKRVFA73jhdkJT2PTb8XAgV6uIcRqY8hitO21M5Si?= =?iso-8859-1?Q?lRn1CWdFBT1u30+Geb9yHvCs/jYRiOM00ACLlPnZNnS+xwIHF5FnyR/+No?= =?iso-8859-1?Q?x+3ugA/22xVPgZrSuNROlJy3Rxxvwm88ZWzd8yzwXDSmscDCqy0ig/oIKM?= =?iso-8859-1?Q?dio3WLrfxuTs2ThkRL2T4Yw1VS6Tm1rCE+X2bLMXzCEyGaqSFGpxPcn7CW?= =?iso-8859-1?Q?waqWIny/5s9z7tIzInaEZtPW1twVxYM2Nqtcp+2SfhC8Mbw94dREP9YDNo?= =?iso-8859-1?Q?ZUYFUA0F7FmkRDCgoh6mZN7cZBYW0lTZegWFxlb+2yNDOywxot5aBldw1i?= =?iso-8859-1?Q?pYorGk2j8xkemJBA5dCmueMR9tTlTNNkIQXxgNxf+iGhPPLuQbYYC2Rm35?= =?iso-8859-1?Q?eBQftJdpVXQEYMaV3MSXFx9YG3Rg92tC4dxVgnusb+eEHU/2qgzOMhLuvg?= =?iso-8859-1?Q?zA7gkh/SM5vg01WqcwmT8Ey4x3RZkUFqMwiO5Vm0CQLLDlTRUKzGZbchD+?= =?iso-8859-1?Q?ywDg5uRCPZPFRGaQFPCX9b6swfrxFTfE3/UHobVSvnqQfiXI0mQtulUqe9?= =?iso-8859-1?Q?FWK/Yk8o4ERaHV2LG4ZuKxV9+Xlc83Isx5ZW2Xr+IYiOCE7aPmWH+ZqLdE?= =?iso-8859-1?Q?ZTGffnX6fGMD8jkgapwd1pprUj99c5UrXpRtIZW3/1G53+AJ7Hc6RZ9WFA?= =?iso-8859-1?Q?NJq31BbvDooucmczo5kjvMVW6AZUvyLRSy/3tBzoqGv+ngqZA23UD/aJTy?= =?iso-8859-1?Q?2JnNHDuYOLJOn34JkizVTqngLWfm3zDYflvhXMpPPE3GPZVuema0gPyXn2?= =?iso-8859-1?Q?zS0QrZdnmZYfLsmxhs+U6ltWXal917NAKZJN1FRyv3eUwoGaNc9RDhlSVI?= =?iso-8859-1?Q?/trhUgfanPncvUsLBVIbtAn1ch5qK5qbioh1P26Oz9IYn7Dvzvkk6VQi3E?= =?iso-8859-1?Q?X6jA4Gji82HMlvHGerlDP2xt3KWIgO3p8W+vmCE82VxwbTc6OhyoQKkofK?= =?iso-8859-1?Q?zyY1itz08w5mduH6GSt9rQBv7WxXnOijZt4k8N6MUpC82FvmFW2FQjnTMX?= =?iso-8859-1?Q?KYQB5RWM1YoWwfumlBYCL8acVJf2KCkiPS2NECJiWxx73Dbp0kokwYyn6r?= =?iso-8859-1?Q?JlEXCJa1hZqvgCPoBhFZhu6uKNL6f+KiimYI5shSEfn2ZEMyutFdKwyV0R?= =?iso-8859-1?Q?5yf7Fy+WvD0NTtMrUF4fA/DkIdkjdON/bltyhH5pVmnaIwGBiknlXGr1XD?= =?iso-8859-1?Q?Kak+f2YfcCHeV57nCe1Ovppd+NlzLKygTxtMbA5YRgChewJ54J32iQ7a8s?= =?iso-8859-1?Q?5PFLRZxk/ovlVZKaOx0oLNR1whRYTtIyjK/hJgEKBzM2+ViAXRFHW3Van+?= =?iso-8859-1?Q?KA3gj5iZjGsgXw2UDKuXz5ovoD9wwq0fzuIqXnC+8psGx0ihL2OylKvZ+L?= =?iso-8859-1?Q?Es8G4n0yKX05OgG1Fc2ZQoMSk9Wgqn4TRVtTHMgz5S/+L4mnSStHS2cphj?= =?iso-8859-1?Q?qN8TbrHVt6u28D4bdBC87aVkV4BFoMWNWJrllbkjvqtOGwCCx3JtA4puF9?= =?iso-8859-1?Q?y/i+r5qkbbo0YNoD0N35WD8UJBXLmK2qZgi+hXevq+zm3d2QUiUMByXVmG?= =?iso-8859-1?Q?RDekzYJ71s0kaQAOw9tojFVY4YSrezYyHYsmLHBu7Al9nO6vO1+ZeNnOnL?= =?iso-8859-1?Q?LparYjnHSr/Qtwq6U1XKNp7j5U3zfGCELLY+F0wvje0RLZHB3BbhZ98RX1?= =?iso-8859-1?Q?3TFubAN9NbmC8SkDpPzV5sGeRggnnaRXLSptsTQ9+rA9SAY730n8Ng0bQk?= =?iso-8859-1?Q?nrMbA6dA72yTHB8eIvyWRNb3dWaUpoTHNoZgKUsXNvsjcfNZ7V8w6byaN9?= =?iso-8859-1?Q?Vt?= MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: QEMU List-Id: From: Denis V. Lunev NBD_CMD_CACHE has no coverage anywhere in the tree. Nothing ever sends it: our own NBD client does not implement the command, and neither qemu-io nor 'qemu-nbd --list' can issue one, so the only clients reaching this server path are external ones. Add a test driven by libnbd, gated the way nbd-multiconn already is, and start it with the case the command exists for. The export is a qcow2 image over a fully written backing file, so a prefetch has visible work to do. Signed-off-by: Denis V. Lunev CC: Eric Blake Message-ID: <20260827161002.310688-2-den@openvz.org> Reviewed-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/tests/nbd-commands | 140 ++++++++++++++++++++++ tests/qemu-iotests/tests/nbd-commands.out | 5 + 2 files changed, 145 insertions(+) create mode 100755 tests/qemu-iotests/tests/nbd-commands create mode 100644 tests/qemu-iotests/tests/nbd-commands.out diff --git a/tests/qemu-iotests/tests/nbd-commands b/tests/qemu-iotests/tests/nbd-commands new file mode 100755 index 00000000000..4c1cd33db74 --- /dev/null +++ b/tests/qemu-iotests/tests/nbd-commands @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +# group: rw auto quick +# +# Test NBD transmission commands against a qemu NBD export +# +# Copyright (C) 2026 Virtuozzo International GmbH +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import os +from types import ModuleType + +import iotests +from iotests import qemu_img_create, qemu_img_map, qemu_io + + +base = os.path.join(iotests.test_dir, 'base') +top = os.path.join(iotests.test_dir, 'top') +# Larger than the maximum payload size an export can advertise +size = 64 * 1024 * 1024 +pattern = 0xa5 +nbd_sock = os.path.join(iotests.sock_dir, 'nbd_sock') +nbd_uri = 'nbd+unix:///exp?socket=' + nbd_sock +nbd: ModuleType + +DEPTH_LOCAL = 1 +DEPTH_BACKING = 2 + + +class TestNbdCommands(iotests.QMPTestCase): + def setUp(self): + qemu_img_create('-f', iotests.imgfmt, base, str(size)) + qemu_io('-c', f'write -P {pattern} 0 {size}', base) + qemu_img_create('-f', iotests.imgfmt, '-b', base, + '-F', iotests.imgfmt, top, str(size)) + + self.vm = iotests.VM() + self.vm.launch() + self.vm.cmd('blockdev-add', { + 'driver': iotests.imgfmt, + 'node-name': 'n', + 'file': {'driver': 'file', 'filename': top}, + 'backing': { + 'driver': iotests.imgfmt, + 'node-name': 'base', + 'file': {'driver': 'file', 'filename': base}, + }, + }) + self.vm.cmd('nbd-server-start', { + 'addr': {'type': 'unix', 'data': {'path': nbd_sock}} + }) + self.vm.cmd('block-export-add', { + 'type': 'nbd', + 'id': 'exp', + 'node-name': 'n', + 'name': 'exp', + 'writable': True, + 'allocation-depth': True, + }) + + self.h = None + self.connect() + + def tearDown(self): + self.disconnect() + self.vm.shutdown() + for f in (top, base, nbd_sock): + try: + os.remove(f) + except OSError: + pass + + def connect(self, structured=True, extended=True): + self.disconnect() + h = nbd.NBD() + h.set_request_structured_replies(structured) + h.set_request_extended_headers(extended) + h.add_meta_context('base:allocation') + h.add_meta_context('qemu:allocation-depth') + # Let the server, not libnbd, reject the out of range requests below + h.set_strict_mode(h.get_strict_mode() & + ~(nbd.STRICT_BOUNDS | nbd.STRICT_PAYLOAD)) + h.connect_uri(nbd_uri) + self.assertEqual(h.get_structured_replies_negotiated(), structured) + self.assertEqual(h.get_extended_headers_negotiated(), extended) + self.h = h + + def disconnect(self): + if self.h is not None: + self.h.shutdown() + self.h = None + + def block_status(self, count=size): + """Map each meta context in the reply to its list of extents.""" + reply = {} + + def cb(meta, _offset, entries, _err): + reply.setdefault(meta, []).extend(zip(entries[0::2], + entries[1::2])) + + self.h.block_status(count, 0, cb) + return reply + + def top_extents(self): + """Which parts of the top image are local, once qemu has let go.""" + self.disconnect() + self.vm.shutdown() + return [(e['start'], e['length'], e['depth']) + for e in qemu_img_map(top)] + + def test_cache_copies_on_read(self): + maximum = self.h.get_block_size(nbd.SIZE_MAXIMUM) + self.assertLess(maximum, size) + self.assertEqual(self.block_status()['qemu:allocation-depth'], + [(size, DEPTH_BACKING)]) + + self.h.cache(maximum, 0) + + self.assertEqual(self.top_extents(), + [(0, maximum, 0), (maximum, size - maximum, 1)]) + qemu_io('-c', f'read -P {pattern} 0 {size}', top) + + def test_cache_past_end_of_export(self): + self.assertRaises(nbd.Error, self.h.cache, size + 1, 0) + + def test_read_bound_by_max_payload(self): + maximum = self.h.get_block_size(nbd.SIZE_MAXIMUM) + self.assertRaises(nbd.Error, self.h.pread, maximum + 65536, 0) + + +if __name__ == '__main__': + try: + # Easier to use libnbd than to try and set up parallel + # 'qemu-nbd --list' or 'qemu-io' processes, but not all systems + # have libnbd installed. + import nbd # type: ignore + + iotests.main(supported_fmts=['qcow2']) + except ImportError: + iotests.notrun('Python bindings to libnbd are not installed') diff --git a/tests/qemu-iotests/tests/nbd-commands.out b/tests/qemu-iotests/tests/nbd-commands.out new file mode 100644 index 00000000000..8d7e9967009 --- /dev/null +++ b/tests/qemu-iotests/tests/nbd-commands.out @@ -0,0 +1,5 @@ +... +---------------------------------------------------------------------- +Ran 3 tests + +OK -- 2.53.0