From nobody Thu Dec 18 23:25:20 2025 Received: from mail-qk1-f225.google.com (mail-qk1-f225.google.com [209.85.222.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8846C238C1B for ; Wed, 17 Dec 2025 05:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949716; cv=none; b=PVGKc7Ia6AuTHxYTDTa23r5/8Lcq1kD563pTiKFe5y8XbhzE7v34k7peTF7mhDxLi5f4FkZV/iamn1TDRN8v1InOsBi/BJ3SSXDAu+jLiUiT423CvbAkmevJ3k6U5NvIjpv+r+OgO+4e386mU/01lExDOEYPscdxnxEDwXWxSSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949716; c=relaxed/simple; bh=Pyh2W1i8IZlUeBaqc00BgLkYCHlkSrQShsXZSzjfZ7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZGmLMtnl/TrT44s4h1cyH7k8K6k4mWvkvDAnJFw47eQznjltGYBc7nI7LJuEBnYbKsmOjPeGCIgHOExTEQ5l16AiA1V9jjtshtheqDh2zJyIhYeyGKuOYjypPKiBUEfTbN5RcMAiXSCKbnG5QXm+RkNjjJpPZQ+/eE6MKvdlp4g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=IHdg87Ke; arc=none smtp.client-ip=209.85.222.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="IHdg87Ke" Received: by mail-qk1-f225.google.com with SMTP id af79cd13be357-8b2da4fb076so84631985a.2 for ; Tue, 16 Dec 2025 21:35:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949712; x=1766554512; darn=vger.kernel.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=R2Q4EUjN96I8JLsrl8Thk8/d3aPnxYAXF44AaVOt3uI=; b=IHdg87KeUrILc8yIhZahuIqFXNHWECMj4wnXxIkZRn67g0x3QwyZyWmlnzAA71n95A dUTQnW9vfnJgTAJn0D36rCoU+m7WDw8MLVaf0ZPVwQR4KS6yqIujaVHadXEW8WoLqG7I i7tPzy820mLTMw37aeu/ETOvuN5npxNhPXD/LylpgQkGoFXpTGl7yQsCKRAi9N0XnP/9 s98Yju4OZGFpZ2fKB2/Qsq9CLKDaqjCl0ovOz3U49zU6/XT2O9g3nnV3ROZOP1CAihqv jcfp8qcClLkXqewm4yVPmH9Odc4baYsQQPu2nVPV5CyYcVzDlSpNXRDRdrQkjzvQO4RS xgMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949712; x=1766554512; 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=R2Q4EUjN96I8JLsrl8Thk8/d3aPnxYAXF44AaVOt3uI=; b=etRTm2nudbuQVt1kBFNrAv5nMw4dFpPERh9K8xrsOsvM9rpJ2o/9I8qqbYWe4jJsG6 dwkneq+1InCC0jeHHK0wmO0UOJQp3qWDchbjCcnRWNCuFNf84zqW5WANwzsOPz+xFHsC g9km0sl06BfAYPUyvwTMTQoftS5ZJSTk6mAoQTRf62RGNyHkxwfJyAxiaRJEH3JF7J32 o2sLMh8XG83DK5F+TPvMhRxmCqU9HWz8dvO8ciQGa4bvX/lU0tLNywwSThAYiuwIrAKE 9afpa7PkLcl52koXh64pG2gXZvs+m8INiKQgUF0yHI8k+R6jgvOPVCoX4hQ4gpuGlhaC kAyQ== X-Forwarded-Encrypted: i=1; AJvYcCWe9DOhzwNl4Rkmwi+4YXq7xJjTbZBtuqa03jMLART0tGqDcoFSrRp0DhE2cyUWHcd6zSFsJzS6t411yUU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy09semUM3IgCW5cT3sgZLDy65gD7nyyunoRKFFJf7BJPO17mlG DhE7LKPeY2MwqPtjAGCDbpv6UxT2E940Is0sT7o4oV9drtguChRPgUxpYPy+hfc/+EhPDtbUK5Z Iu2yOG/M6qeifEd7yzTEQUCnFqmo42hnWipt3 X-Gm-Gg: AY/fxX5HG8NTDB8TgljievF9lSpsyyhH/0kTc17zbhpvTeMulFsNUzKZ8xseFVfZk4a QCf7WmFCs4EULMokj4Mrd8sH1IMAA/aHbVsmM8umA+K8cPtR14uG4c3tZKrObAhAoKjqKLLr2Wp T4j2HuF+WX8YjNl5ZT5IkmSqlI2wAA6Uxq6qDE2F6xeEr+CEniUG48IMSVf7yph0QmMHWfwrJkW 3OtkMnAHDfXH9Nfy3bZk1S6+s80fu/WAWvfUP7prOWNhUtn8yV11Xy+6fUaET7Znbs5GLVZ9CIh A6DPqPPeF7cEAbvu3/NLdec2d3F1FprCTmXejewBePQwbnnJB2rt13uhCpIMUU79hFmiZoyOPKw ptglsXXR3gkQ5ekwyGopHv5uwmbfRjRgipMoowyJATw== X-Google-Smtp-Source: AGHT+IEwQVVahKTBzODwZ9LCNp7ytSuh2rRQqS2AIb4ql60egeJB6RRbKK8HEAJwdh0Tw0BDMeZ7L4T+UOA8 X-Received: by 2002:a05:622a:610:b0:4ec:f9c2:c200 with SMTP id d75a77b69052e-4f1d0655504mr181608401cf.11.1765949712259; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-8899dc07525sm19327636d6.15.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 6A40F3404B4; Tue, 16 Dec 2025 22:35:11 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 67759E41A08; Tue, 16 Dec 2025 22:35:11 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 01/20] block: validate pi_offset integrity limit Date: Tue, 16 Dec 2025 22:34:35 -0700 Message-ID: <20251217053455.281509-2-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The PI tuple must be contained within the metadata value, so validate that pi_offset + pi_tuple_size <=3D metadata_size. This guards against block drivers that report invalid pi_offset values. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- block/blk-settings.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/block/blk-settings.c b/block/blk-settings.c index 51401f08ce05..d138abc973bb 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -159,14 +159,13 @@ static int blk_validate_integrity_limits(struct queue= _limits *lim) (bi->flags & BLK_INTEGRITY_REF_TAG)) { pr_warn("ref tag not support without checksum.\n"); return -EINVAL; } =20 - if (bi->pi_tuple_size > bi->metadata_size) { - pr_warn("pi_tuple_size (%u) exceeds metadata_size (%u)\n", - bi->pi_tuple_size, - bi->metadata_size); + if (bi->pi_offset + bi->pi_tuple_size > bi->metadata_size) { + pr_warn("pi_offset (%u) + pi_tuple_size (%u) exceeds metadata_size (%u)\= n", + bi->pi_offset, bi->pi_tuple_size, bi->metadata_size); return -EINVAL; } =20 switch (bi->csum_type) { case BLK_INTEGRITY_CSUM_NONE: --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F3D320DD48 for ; Wed, 17 Dec 2025 05:35:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; cv=none; b=mkpJMUvCjGRCQ7CjsC7CxtbHqMFfL8kU7YTBJCb6r1vCuDKMze6EfSgBF/6PUsTBIkMyw4wEu+G4QzR7B3lpoBhaP7xro0pqtUohDOM1KvnPBHGYHSDG6vWRsz70Y5PDzMSmNRwNTna1E+83Ydg16F4SQuRpCpok8VX4FVQdSK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; c=relaxed/simple; bh=xUW+aJ0AIyUBNjUOSWrr/v9kRnK+74dQ2K/T8dlAGQM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pp2KKDB7hkJ7QHkl4QzWZmCmxQVcpao/aWkkhHdF35CzvzSD7DD4Q8/PQhXDExhzEFSMoKrt32hLlpTWhDTHX+PglX2Ma4/vXyu8PmEUwQVrJPQV/XyBjQAWOUMHCLexaEl/nCAucS6DUC1PG3QU4oCYDFB58cWPV2Stl5FzZbA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=AOhkokyO; arc=none smtp.client-ip=209.85.216.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="AOhkokyO" Received: by mail-pj1-f99.google.com with SMTP id 98e67ed59e1d1-34c27ea32a3so385630a91.2 for ; Tue, 16 Dec 2025 21:35:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949712; x=1766554512; darn=vger.kernel.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=1W7GaZySinPtNdu/28BmiINfjaLT2swubxXUIgi/0VI=; b=AOhkokyOhY9siyDVCEeIP+oj1r0bQGZMWzqEPujYTrRJnJ4dW2mtnDCwnirHJIHtyn orVNLqgxOJxiraV60BhgGG8rq6fIuSo3mzP1C5js9b4mxwDZhk42SnnVapxTieKd6sEK 6Urp8hE7Yw8gMYgIUd9caOLXhimSFDr6pCseArUgrFfuarWSndCfG0DJlqWc3pQ8YDiO DABMbI2yN4hIjzHC9pUfDULLhEiqr47sSNtWtL5Ly2nkkxq/o45Q+MYI0uLmzQrsaOUd QVbPNjMYLTQpKEhvVsHTw5laGwEjyVvkzJSyCaXyk0JI9Ioxf4xtuoKUP1iozhmVBaEC JC7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949712; x=1766554512; 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=1W7GaZySinPtNdu/28BmiINfjaLT2swubxXUIgi/0VI=; b=lk9w1L4jWz+2HpatLjP+rYkDANRIHtNcQqbXor3faTdCsopICEYMQqhjERxq/XVGWH 2Bfz84NZaVhaC4rKf2jKKFpYVgQJUsCL+QFXDyaePZfLfqnsfYOB/5PVjtXr71FcCVBf sokO5LYDAX9BDiZIrh0PVg3NZJZz3VHEozB4IW7PpiDY3MoGF4B3cXJoaiIPcNnQLAAY 8Ofc08IGbESrCBJcgliLAvw3ItoyaPK6myln1jmgv04CkLG4nRMEklkqiW9maYK0CUna WYqd9SpefDpRo2A7nHsV1yby5vyJoW80W8e01CJYYDpL0kxcpIhLyiba7ppDVay1WZjC thWQ== X-Forwarded-Encrypted: i=1; AJvYcCUqky617YKt0T2O/Zs4cTD7EHip7TXGm8KNzv8F3lOfTh2QOQ+WP8Eha5tXa3Opoano3AJj/+ionZXzK3I=@vger.kernel.org X-Gm-Message-State: AOJu0Yz05X/Xu5D6QYRANYNLQDr4TDhiPjEoq0HUKIcR5FY3CwwWfEit RnkLeKkdCDWmCWs+++P/eP4PDIMbxUDsEHqcnr+mTuFY5/1ZOc0ebf1DK54c+frKmIQo4xsewkA dgYYFcgHc1HLckv9WJ8T8I9+eIUDxHp7YHuTORzoioVxoKH32HSdI X-Gm-Gg: AY/fxX6WSJcSw1O8+hHdjzeVIQp6yyy3XWcZ6XDD0Dv4KdarWES/f/pLj5odU6cJ1LU 3rI7xtArNtndFm2EYYbyX50pz8/5vvpIbyoYtuEws6CCoM13RGH00p5Bn7ythks9h7FcKTVNOu7 pvbRAldKed86BtWdaOry6m4ryen1KORgfgf8mdLj7MgW12t659ma2X1Gn0RdJKVbanW/5tFN5Lc YzCMj5rnUoyZmWZ6KAHvIEC0UXoeMt8079U6O9Rng0xiYWuhcirhBoe9anhucoP8dvcVqXN1DQE CWbdm+zh0SKOKTf59HuMncT4VQjbDzmyvtkhjZG+efAW/vDwAqhDhMRG3KmH6UQstXq0jJhDiZA rA61EyASN2LmVXY7QsF+yxwuBVR4= X-Google-Smtp-Source: AGHT+IGmD0xzmGqowX1/sZtnUry9Hv+YVc2UPf0PBiv6bJ1WS1oGm9qgaFTZtLXdzHr346yX/lPuywp6sUBH X-Received: by 2002:a17:90b:2749:b0:340:e8e4:1166 with SMTP id 98e67ed59e1d1-34abd898fa3mr11743788a91.5.1765949712251; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-34cfce259ebsm224226a91.0.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 8B8103420C0; Tue, 16 Dec 2025 22:35:11 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 89402E41A08; Tue, 16 Dec 2025 22:35:11 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 02/20] block: validate interval_exp integrity limit Date: Tue, 16 Dec 2025 22:34:36 -0700 Message-ID: <20251217053455.281509-3-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Various code assumes that the integrity interval is at least 1 sector and evenly divides the logical block size. Add these checks to blk_validate_integrity_limits(). This guards against block drivers that report invalid interval_exp values. Signed-off-by: Caleb Sander Mateos Reviewed-by: Christoph Hellwig --- block/blk-settings.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/block/blk-settings.c b/block/blk-settings.c index d138abc973bb..a9e65dc090da 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -191,12 +191,17 @@ static int blk_validate_integrity_limits(struct queue= _limits *lim) return -EINVAL; } break; } =20 - if (!bi->interval_exp) + if (!bi->interval_exp) { bi->interval_exp =3D ilog2(lim->logical_block_size); + } else if (bi->interval_exp < SECTOR_SHIFT || + bi->interval_exp > ilog2(lim->logical_block_size)) { + pr_warn("invalid interval_exp %u\n", bi->interval_exp); + return -EINVAL; + } =20 /* * The PI generation / validation helpers do not expect intervals to * straddle multiple bio_vecs. Enforce alignment so that those are * never generated, and that each buffer is aligned as expected. --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F4B82264A7 for ; Wed, 17 Dec 2025 05:35:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; cv=none; b=BOYeVO26sUod/bYBauRO7FbkEHNVN+J7/5MGBS/6mrpxsu+6DhCFB6QdVpKUyBf/+ilQn+UiRwcHsvS7SLSCz4sjxBG9GAhmue56ODIccuBYpuJj2It3CK6ek8ybuYJifKWWXZrUHjUg5JRoMrJ4r6LtgnF6JFPaVxl8yvBXlys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; c=relaxed/simple; bh=venmX+xFUUA0UpVlm0dl+mDk8JNjcEjxZwCydjYWYrs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LIAcEfHxu5Y3CG3bVZDrRzHCv2sbe2wInjG007NO/qixj7jN6vVdY7kiG0nJ5Sn1ScgVxkpLJlaB+ywLZuQRrrY05avE9X4gYYBycMSyAAqZfrbznwxgbjxbWCL8kRz1O0rIJYF9YfppF2MNRG0rqWzUcgqnlBGADt9pIEe8oSc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=RtgLSXZW; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="RtgLSXZW" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-2a110548f10so5594705ad.1 for ; Tue, 16 Dec 2025 21:35:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949712; x=1766554512; darn=vger.kernel.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=6deGWS+C+ZX6CkDTMG90zDsqNjHQte7F2hl6ze0/JAI=; b=RtgLSXZWwY9bYQA08x+/+In3lvdMQ/ijKXjtWz/27ugbLog5uKyd+QnPz9W5Dk0OG5 Zg2XMekCycmimBLKAkN2M2dpFky5f2BvHMJgN9JmLm3/0fEEwjkltmRIPMIZpFUKNYwu aQvWpedglkurTz5tP/y7UNEms0Xs5oh3TVPHMk8IZyfsjcQcoGdnqed16dlM1ShdyA/p V36qWqEUg4CkOBEf8f96XOTQhns9/k5YdvISjF+AFbmqSWODKMh8SQUvrZf6B1/pArW4 H6MUipu1SCZc03hUGPeZ3NYOE2b5IndS4gAdp4fmLn2z/O4HlCgKdC4LNIQoSjqxjAdx HKlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949712; x=1766554512; 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=6deGWS+C+ZX6CkDTMG90zDsqNjHQte7F2hl6ze0/JAI=; b=aUhT3MUSMMeQciN4prQ0uRaOd58N2cwiPZo6l6JW+2wZSaYy3zNWyzPmAEkTWZ3SOC VXjnwaussEa03piszmf6YBdVUSW3JxWw+Y+83u3VN89CDdCnpPq7M5Tl+s5enVQ3nEZB aV6zgYlrSMWpRLDuPsiivzS1UWydA1VhDUvSEcoH51tK0pgpKuRoPWFYZerzCuZDCYGb TuUIEs8rnaU8DEZyKsgnEzgROZQxgAIAMrPL+FhC7VZUyCqnMl7IRgMZJ5RjSkxcsOgJ 65/Iul4+ihV+9gb48UUduKd8qj2pHoxvz99yYRgP+YKfOg50oa5VnZ68Uj/wjwEp0WPE QvJA== X-Forwarded-Encrypted: i=1; AJvYcCXSMKm98xp8tLcZ774xpkMfkWGYtfyizaLQcWfQIxAvcA/NgrZM4por0rFNT0Z+xIhh6MWbtZ6booZRh74=@vger.kernel.org X-Gm-Message-State: AOJu0YxXIdwTDv+DsZpBAsW8M5eCrH/0sM7Hj+hYg4CpS/77bg3xFUds TQ8QgI8blZQ/qNMOWWO8ssi0RGSxYbwp1w4J7O27h0eykW7hT6TjVYsOb5O5rBLQU5ZZeDpkTsO +c529/mcxfwQygQeGSorgKZ8IV1OtXw+IQ1Zc X-Gm-Gg: AY/fxX4lWxBYZXSD9kQE9cvxpPJ7ArSBlmHU+dz0b6FU9iweTrPB5beMVABeMgtvcWS F84KuhyyUYUKB3Itwn1WvLWebVKEYQmK7N6SMZ67WfUFnr2/4uPuv0vDbKI5ia3Ph8vM05gNttc oS6qAQ9wH2EB2Q7gXvHmoAVIJf9D1HgHCyisvCY0Tei/+uGL1OMxK1psHBDW1FsyZi63eX855rw JOma8e60KgOa1BPZnI6h4Oq1TALb1p77U4dUMvCWIIw4p1FlYJMbm6E/LKoAdUmUrXrsGY105J6 aOl8m1dv+aenxkUOdiQDi5D+9YEGzdaaZqhigxJQtfmlnEVrSiaHLsWLybAESBlyZtw9NrXP2YU SHvCzSPKm9jzphJc8w9VcPneGddiO2l7ivV/0rBEvWg== X-Google-Smtp-Source: AGHT+IGN6JHAHDS/K6rl0nUyK+Z/ER5lvYDtEq56HR7i2Pc/7hcthk8RgG5mE7Ltq0iDaECSRtWvto2Z+B2u X-Received: by 2002:a05:7300:d213:b0:2a4:3592:cf89 with SMTP id 5a478bee46e88-2ac2f395b31mr5118805eec.0.1765949712106; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id 5a478bee46e88-2ae5e423a86sm96829eec.1.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id AA4A23420E8; Tue, 16 Dec 2025 22:35:11 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id A81EAE41A08; Tue, 16 Dec 2025 22:35:11 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 03/20] blk-integrity: take const pointer in blk_integrity_rq() Date: Tue, 16 Dec 2025 22:34:37 -0700 Message-ID: <20251217053455.281509-4-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" blk_integrity_rq() doesn't modify the struct request passed in, so allow a const pointer to be passed. Use a matching signature for the !CONFIG_BLK_DEV_INTEGRITY version. Signed-off-by: Caleb Sander Mateos --- include/linux/blk-integrity.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/linux/blk-integrity.h b/include/linux/blk-integrity.h index a6b84206eb94..c15b1ac62765 100644 --- a/include/linux/blk-integrity.h +++ b/include/linux/blk-integrity.h @@ -89,11 +89,11 @@ static inline unsigned int bio_integrity_bytes(struct b= lk_integrity *bi, unsigned int sectors) { return bio_integrity_intervals(bi, sectors) * bi->metadata_size; } =20 -static inline bool blk_integrity_rq(struct request *rq) +static inline bool blk_integrity_rq(const struct request *rq) { return rq->cmd_flags & REQ_INTEGRITY; } =20 /* @@ -166,13 +166,13 @@ static inline unsigned int bio_integrity_intervals(st= ruct blk_integrity *bi, static inline unsigned int bio_integrity_bytes(struct blk_integrity *bi, unsigned int sectors) { return 0; } -static inline int blk_integrity_rq(struct request *rq) +static inline bool blk_integrity_rq(const struct request *rq) { - return 0; + return false; } =20 static inline struct bio_vec rq_integrity_vec(struct request *rq) { /* the optimizer will remove all calls to this function */ --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F3761FFC48 for ; Wed, 17 Dec 2025 05:35:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; cv=none; b=Nq/YPgBDzPt50BBOR9AzakOVbCzopfVMd2+KgJNfsIB8x5ea608rAQpGWdalqGapCQwMYFFfKiuPHyPgVq8vgnED4ADKLBozQZ0e3VhFPWtMlNFlIbrCoVZOQAYR+ZOHu/JSWZEUUAJVN0saQ5c56npjF4KOiVupqb45hpcW0E0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949715; c=relaxed/simple; bh=zNjQrhjX8JZLaXK8gmwe1fdVRs/ji/Di5HGBiJEYyx0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VbtdPQCw1wLCrXaHSaGO1OG3QlD2Qsy8rX0V+2akO0NLCzmdZLA20x//P1Yl36EXkhtzsngPCk+U0Adkz28WlCi0sYs5Yzxr89YGKRXR3t0m2KXCToDzPSvskQkfcGccntls8GbsRxhH0gyEZlVryT+emdn9fdNqMg/r2YDnig0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=BBaqLx4j; arc=none smtp.client-ip=209.85.216.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="BBaqLx4j" Received: by mail-pj1-f99.google.com with SMTP id 98e67ed59e1d1-34ab4879aa5so665266a91.0 for ; Tue, 16 Dec 2025 21:35:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949712; x=1766554512; darn=vger.kernel.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=gO9go+VLEnZ5bIbrwPckrpuRlhcnoKEdRdraJ94IRAM=; b=BBaqLx4jBKDWsJLkyxRn2FVEEgG9fSwzwFYN/ZiknLb6XqEA6xzuxlf0q/mobGPVAI I2C8Am9J4JaqbchMimhryyNBF7/jbw478rWHtO3RqQ3pS/XdyMHUstsw5qbzG0xMANcs a5O9TgVn+zdDu5G/EJf7enB5h5Zq8RFhNp+po9LOh+irieSThdOEm+JwnhRNKrF/Fw/k ODgU1agA1lGwdzhNNwrmY3B+RQCzl338VSlC9oB4Ob7Z1MxZcQkORAwHoEUIJgoU55c3 jWOo2h/4IeOlU0oTN1qcRbUQkFBjQM+Tiyh3BxcNsOJ1CrnTdf+O+x7uX9JglB78KAf0 3IBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949712; x=1766554512; 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=gO9go+VLEnZ5bIbrwPckrpuRlhcnoKEdRdraJ94IRAM=; b=LNRKm/8rEDiJTuSvPR1P7n+lPVoxbpdspdDlo0xGcrjnMwIWmUfqJqNrwfUWiRAoCW nFkC1R2PNKnQowPC8N9H1RgiUeXqI7MBu7m3slAg2HOPnSYXrzdPW98O0Ju3SUOAul7A ZmQOfToqKVh23x/spFSd8xCf5RNU8Z7/vIvZs2xR17UmFSv/OsVaRB6NbDgl0dgeEWNN 1QIdb2CeZx+vi1n+Cab2MNhNSoOq2u4tv/rrNZsL84nEoAQyOGGlpYY9QmgK44ODC9er K9xMKCx03uBLn7YDN2YuKQjQKKHmbiUwyzkNX7S1N2lBjZN6pA3crHKuuszRNAFXpjgI diNw== X-Forwarded-Encrypted: i=1; AJvYcCXmYy6LBGPYiExxLMcOs19d1GWvbQhtvXFhyyPEkRRdbZrrJ908AoPhO40czN32kWMxkcdw/gHTETPsYOw=@vger.kernel.org X-Gm-Message-State: AOJu0YxEdJneXgdj7DKSpIsCCP95quOugPGczTzElVq1Gl/d2oq7htTZ xqdE239kItSKNMtzL5q0SQ0GoF3hwOmYQHzxn8jbIJyGw0cLsy3ZpTr0ZcsJDmywAEVZcEjsdHP F2lv4Cz4L+HOorYJxypMyatA3pzZBVC1eUIhX X-Gm-Gg: AY/fxX6n3sbVw7cO+2V3SGIDlhuLwszfk1qEKj1HG7T86ONb7Reu84eZY5G4vdRUVMT aorFVyYMzf1DmJv16+4JntNGttJbwj4gk8qFWtGp5PBGDFpAM/DAveeW4BwGYu+zUlusWFSK0b1 FF2JFP2KVFwvvQ4GaKSnA9O4UKcsgZWVEKR3CEDoQox75Buuum+oA+ndoTnIEHf4Yp1JjoOzdfR FaCleBVENu8FAg44LxeAR2HG7RxNwCf8NLuofxe6b/daPxpw81/wvuB+yoVSQ9jNmoYYvkviujn ln1d406km+/oIh7zqMCTZUZxhffHSHUU/K/m/BaNCQGxYL6wFvftq1T5MPhkdYZxv7O/RCQrW88 +TRa1pXjJprEKJlYeiXCZJDTPBqB0oWP53tNu4qemUQ== X-Google-Smtp-Source: AGHT+IG2gaZMnrtuUwE0e3yeoSmxUpr9QSg6vaNvSXYJOUbZXsVgkWvgGHLyHIaCBfPRPU8lfsCDFHynz0Yo X-Received: by 2002:a17:90b:2692:b0:340:e8ce:7558 with SMTP id 98e67ed59e1d1-34abd3d3a27mr11742349a91.0.1765949712374; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-34cfce259ebsm224228a91.0.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id CC0573420F0; Tue, 16 Dec 2025 22:35:11 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id C9387E41A08; Tue, 16 Dec 2025 22:35:11 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 04/20] ublk: add integrity UAPI Date: Tue, 16 Dec 2025 22:34:38 -0700 Message-ID: <20251217053455.281509-5-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Stanley Zhang Add UAPI definitions for metadata/integrity support in ublk. UBLK_PARAM_TYPE_INTEGRITY and struct ublk_param_integrity allow a ublk server to specify the integrity params of a ublk device. The ublk driver will set UBLK_IO_F_INTEGRITY in the op_flags field of struct ublksrv_io_desc for requests with integrity data. The ublk server uses user copy with UBLKSRV_IO_INTEGRITY_FLAG set in the offset parameter to access a request's integrity buffer. Signed-off-by: Stanley Zhang [csander: drop feature flag and redundant pi_tuple_size field, add io_desc flag, use block metadata UAPI constants] Signed-off-by: Caleb Sander Mateos --- include/uapi/linux/ublk_cmd.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/ublk_cmd.h b/include/uapi/linux/ublk_cmd.h index ec77dabba45b..5bfb9a0521c3 100644 --- a/include/uapi/linux/ublk_cmd.h +++ b/include/uapi/linux/ublk_cmd.h @@ -129,11 +129,15 @@ #define UBLK_QID_BITS 12 #define UBLK_QID_BITS_MASK ((1ULL << UBLK_QID_BITS) - 1) =20 #define UBLK_MAX_NR_QUEUES (1U << UBLK_QID_BITS) =20 -#define UBLKSRV_IO_BUF_TOTAL_BITS (UBLK_QID_OFF + UBLK_QID_BITS) +/* Copy to/from request integrity buffer instead of data buffer */ +#define UBLK_INTEGRITY_FLAG_OFF (UBLK_QID_OFF + UBLK_QID_BITS) +#define UBLKSRV_IO_INTEGRITY_FLAG (1ULL << UBLK_INTEGRITY_FLAG_OFF) + +#define UBLKSRV_IO_BUF_TOTAL_BITS (UBLK_INTEGRITY_FLAG_OFF + 1) #define UBLKSRV_IO_BUF_TOTAL_SIZE (1ULL << UBLKSRV_IO_BUF_TOTAL_BITS) =20 /* * ublk server can register data buffers for incoming I/O requests with a = sparse * io_uring buffer table. The request buffer can then be used as the data = buffer @@ -406,10 +410,12 @@ struct ublksrv_ctrl_dev_info { * * ublk server has to check this flag if UBLK_AUTO_BUF_REG_FALLBACK is * passed in. */ #define UBLK_IO_F_NEED_REG_BUF (1U << 17) +/* Request has an integrity data buffer */ +#define UBLK_IO_F_INTEGRITY (1U << 18) =20 /* * io cmd is described by this structure, and stored in share memory, inde= xed * by request tag. * @@ -598,10 +604,20 @@ struct ublk_param_segment { __u32 max_segment_size; __u16 max_segments; __u8 pad[2]; }; =20 +struct ublk_param_integrity { + __u32 flags; /* LBMD_PI_CAP_* from linux/fs.h */ + __u8 interval_exp; + __u8 metadata_size; + __u8 pi_offset; + __u8 csum_type; /* LBMD_PI_CSUM_* from linux/fs.h */ + __u8 tag_size; + __u8 pad[7]; +}; + struct ublk_params { /* * Total length of parameters, userspace has to set 'len' for both * SET_PARAMS and GET_PARAMS command, and driver may update len * if two sides use different version of 'ublk_params', same with @@ -612,16 +628,18 @@ struct ublk_params { #define UBLK_PARAM_TYPE_DISCARD (1 << 1) #define UBLK_PARAM_TYPE_DEVT (1 << 2) #define UBLK_PARAM_TYPE_ZONED (1 << 3) #define UBLK_PARAM_TYPE_DMA_ALIGN (1 << 4) #define UBLK_PARAM_TYPE_SEGMENT (1 << 5) +#define UBLK_PARAM_TYPE_INTEGRITY (1 << 6) __u32 types; /* types of parameter included */ =20 struct ublk_param_basic basic; struct ublk_param_discard discard; struct ublk_param_devt devt; struct ublk_param_zoned zoned; struct ublk_param_dma_align dma; struct ublk_param_segment seg; + struct ublk_param_integrity integrity; }; =20 #endif --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-yx1-f97.google.com (mail-yx1-f97.google.com [74.125.224.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F002274658 for ; Wed, 17 Dec 2025 05:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; cv=none; b=Srv9HuNGv+YhG2i48mu3okZhAykBnNrbhMN813tG0NRyF2TP5wdHm0B5hPMBHwpN5EihG81MKZaeWbpdVeoY6GfNyrCuWC1eVaS5sNG5pU3cx0y6qwcOepzZwuoRq8xWrqa9aHshObANXWllS0K7MdhbXdlxbQNeARv6Ax9XWoo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; c=relaxed/simple; bh=aD7QvT8m0ONYPgRJxDVX6ESAo8vcXx88PHv+jCm6Q1w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p/F2GPtOemJkr9n6vLWskfG1fKSJzQ4V3IABUOwzgxqVSoQDCKCaj0rviGSbXRqnYmzupHbIAGpsbJ03vz4+bU/28/mlaxHQotAvH6t1pu21VZNrueAN1FhXtxRRSK3ONAcT0WMeu0f4ZM/jgY9zDcpqz5WoWR8E/g1FJ2Rnhfo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=SmhtK5EJ; arc=none smtp.client-ip=74.125.224.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="SmhtK5EJ" Received: by mail-yx1-f97.google.com with SMTP id 956f58d0204a3-6446c7c5178so895791d50.1 for ; Tue, 16 Dec 2025 21:35:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=ezc5r1HBuR8+0jmYpVSGWVnyd2FmDQBIXjG2jOM8aPQ=; b=SmhtK5EJSrIJ0x3+Wgav6FlA+I8HXYuKzjmlPJbyC1gVUoO+i0JX4F7w05bREfg9gb S/W58KcaGxU8SB+dsnYLyFwW3Zm34QG9wpWPxK50zXqdeGY3UjHq2jxhWaUjpJqlTH1N q/eqvt77V9pu4ngugMtpgvcojmYcGHDFidIxlFcmbmLITAOnjrhGUGBNQmNEIiyRD1Hp Ue9rfv2sZJp4TVYnm024/bpqDQWUzKp2B5DjpAHGJ0Q38cYv84Gz1KfWYMr/alBtLvrc HeEXHrm70sq/VKnIcMNakrS4SPVO5vZj4Z1JzF5XgmX3XzkdxjAm0on7sB7/jf5UDPQ5 cHQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=ezc5r1HBuR8+0jmYpVSGWVnyd2FmDQBIXjG2jOM8aPQ=; b=fy7HGU7QH2w+MNADIuoKQm89OWn3lAaXykUo94VNR1wNMcnwpwVdbZ3Q11spqt7bSm Joov3eK3IK7TXf8Sfh7awZ8qv+jhctAGEYjEuUc/LgXfiURBui6Uwj3ZyHK6oYzh7QR2 Hz3yG7UNhO7ke7rGG5cGRznf0epYlkbl5RZul2Miqvkn9399kU03TGh8Xgm0Ftdx4wfL IAhkmlhiAemt9VzMZYWqfsBSn6CCIxEefAU6duyOo6Mk33sKSXelFN1quXp/XA2dSMTy +PNWKozRzOP8ciz1w/xs1wd3qU/IPY+4OuvMd2TLg50aMU7to+s/Mvj/KMHN3ONMunRQ h9Cw== X-Forwarded-Encrypted: i=1; AJvYcCXp8FEP8LWr76L/AxsY7Bi0YkKziKILMcsERC0ovXaVIdlVyMx4h9dDQxtRbNMpapBdV9+eHSgPSlkziT0=@vger.kernel.org X-Gm-Message-State: AOJu0YxmtYKdTUzAz1iCRsrWhSzmTI8WEEz/2gf2Nom1tDOy7qg8GXht 9o/qBrQ53h6C6IinxwJrAPFRdPXf9RqmsG7ZQ+Hm/b+Mp0kXIxVRDFKKDakvCVn8eW2SbVFyLpj VHr4g18po+G7OTwfq8fV197/8dshfR56oBYfaF1NeehkNkYfXFikb X-Gm-Gg: AY/fxX5n/g3xr9YzlyjwGaw9hd4Xzx2YqGuAu45BObkUSObRbWcRx+F8hcfaJILfmr0 1iIbkPazQ4iV2PJWEe2HtTf54KJymJzZSK1MNu/cEmbxLrXZP3QlMwTSetRmV9r0jCIocOrejmG PLvNvRCTYNdj9/ARZ9t8+wj2qXBcXuYqa/IgtZb9q8tGivjgzU8n0/l4EmCSGBdcUIH2Q0iL/1b TiawsxzCoy8zczUXpCRspGIk9shL17dXpY0EgbHjB0hG1eF+0EbKvGgQQ2o6dBTMHdwiuilc08N vM0+vmP3dRVR+5pWy33Fy66bqddeViwqDeX+JefP+3VkbXedjQSv4vo3KWNgxeC/nrvb8ZJVt/g 3H1XJ/+nfEVd4LraBY64UNnstTa0= X-Google-Smtp-Source: AGHT+IGDVPrgNu9LhhkOAfEoaeOE/9G2q9MLKqgYrJRDejIIwiTDpmwJNvXg1IgkUw3GnsHHrvT+5hI1MqDw X-Received: by 2002:a05:690e:1448:b0:644:49be:4b8e with SMTP id 956f58d0204a3-64555515881mr10604674d50.0.1765949713087; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-78e747ab14fsm12279017b3.0.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id E5E6D34222B; Tue, 16 Dec 2025 22:35:11 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id E37E8E41A08; Tue, 16 Dec 2025 22:35:11 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 05/20] ublk: move ublk flag check functions earlier Date: Tue, 16 Dec 2025 22:34:39 -0700 Message-ID: <20251217053455.281509-6-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ublk_dev_support_user_copy() will be used in ublk_validate_params(). Move these functions next to ublk_{dev,queue}_is_zoned() to avoid needing to forward-declare them. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 60 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 78f3e22151b9..4da5d8ff1e1d 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -258,10 +258,40 @@ static inline struct ublksrv_io_desc * ublk_get_iod(const struct ublk_queue *ubq, unsigned tag) { return &ubq->io_cmd_buf[tag]; } =20 +static inline bool ublk_support_zero_copy(const struct ublk_queue *ubq) +{ + return ubq->flags & UBLK_F_SUPPORT_ZERO_COPY; +} + +static inline bool ublk_dev_support_zero_copy(const struct ublk_device *ub) +{ + return ub->dev_info.flags & UBLK_F_SUPPORT_ZERO_COPY; +} + +static inline bool ublk_support_auto_buf_reg(const struct ublk_queue *ubq) +{ + return ubq->flags & UBLK_F_AUTO_BUF_REG; +} + +static inline bool ublk_dev_support_auto_buf_reg(const struct ublk_device = *ub) +{ + return ub->dev_info.flags & UBLK_F_AUTO_BUF_REG; +} + +static inline bool ublk_support_user_copy(const struct ublk_queue *ubq) +{ + return ubq->flags & UBLK_F_USER_COPY; +} + +static inline bool ublk_dev_support_user_copy(const struct ublk_device *ub) +{ + return ub->dev_info.flags & UBLK_F_USER_COPY; +} + static inline bool ublk_dev_is_zoned(const struct ublk_device *ub) { return ub->dev_info.flags & UBLK_F_ZONED; } =20 @@ -656,40 +686,10 @@ static void ublk_apply_params(struct ublk_device *ub) =20 if (ub->params.types & UBLK_PARAM_TYPE_ZONED) ublk_dev_param_zoned_apply(ub); } =20 -static inline bool ublk_support_zero_copy(const struct ublk_queue *ubq) -{ - return ubq->flags & UBLK_F_SUPPORT_ZERO_COPY; -} - -static inline bool ublk_dev_support_zero_copy(const struct ublk_device *ub) -{ - return ub->dev_info.flags & UBLK_F_SUPPORT_ZERO_COPY; -} - -static inline bool ublk_support_auto_buf_reg(const struct ublk_queue *ubq) -{ - return ubq->flags & UBLK_F_AUTO_BUF_REG; -} - -static inline bool ublk_dev_support_auto_buf_reg(const struct ublk_device = *ub) -{ - return ub->dev_info.flags & UBLK_F_AUTO_BUF_REG; -} - -static inline bool ublk_support_user_copy(const struct ublk_queue *ubq) -{ - return ubq->flags & UBLK_F_USER_COPY; -} - -static inline bool ublk_dev_support_user_copy(const struct ublk_device *ub) -{ - return ub->dev_info.flags & UBLK_F_USER_COPY; -} - static inline bool ublk_need_map_io(const struct ublk_queue *ubq) { return !ublk_support_user_copy(ubq) && !ublk_support_zero_copy(ubq) && !ublk_support_auto_buf_reg(ubq); } --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f227.google.com (mail-pl1-f227.google.com [209.85.214.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C735258ECC for ; Wed, 17 Dec 2025 05:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; cv=none; b=WKOiNhiM0KMBpGJlDcGYGOCdC7WxHJQ5FzIgSsrenwKKj9XwORt2OvSeqVVV6w/yDDQbtxewDaq6t10YVZuUjRd6blAf9eTxhKUnJEH8HzppuYk8N+AEs1F5tsGkCJavONrbEgqGgSm5vpLlUP2kvbPvRlyDIaWeFK0qRNLwgzo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; c=relaxed/simple; bh=OOXWaan+k6PBqwTEL0czF4iDFHJndZaTqnCQr/uI6ZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EwTYyE6W7tgA6WRGXzqtBNWMb7/ZjwN1HajsaQbE73BKKnh8SEHhhfmLeZ/KAxGmdkm85OXH9Zs+TDy8m4vONEbQYFX6qBR+3puCuedFwL050jJ8dPhUiIOtNjQEYMVj4B1t8ejac/1BnIWZQvwmwzzX8A9qIl4w1vDplUlYLy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Er87W86U; arc=none smtp.client-ip=209.85.214.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Er87W86U" Received: by mail-pl1-f227.google.com with SMTP id d9443c01a7336-2a097cc08d5so7935665ad.0 for ; Tue, 16 Dec 2025 21:35:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=Zznngbs4m93+ngp43rYp7bEDz3TrzVx/RV2H/1Phn2Q=; b=Er87W86UM8z/X9zbNW7fYHRB+B2bN4VCWKFhHAqLHrDcYU00NbhkixN+n0nFJ9oXNh 2ZiMEXDTi6/L8ileOqOOD1yyltgTdoRtHkJbI7K9Yse/YrYATUcy1Og8ODu68AkTPV0H A3/LZegmaPeUUIiNSVKHR4l7wxM/yZ5xbHGvQoWFqyM39lRAeydP2wczlEAM/m3zDygz 13oCx3b0uH26EtPU6+81lSaDOuJoeP1rH3O5gWXeZnC9doYqFdAEnElQUd4SXz2SojEL QL6Y7jk+c3xqvAJPK3GYbGIEv+NwQod8LP4rUBXL7PMS2yC8esKNbufHjseFZ601alPo tDqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=Zznngbs4m93+ngp43rYp7bEDz3TrzVx/RV2H/1Phn2Q=; b=FyhzmGfFd/PL/7bRsSQmOJrNO9Iw12U5HuIESTGn1WKEZUxL7RwyQaCsohEF6xK/xh L0rIvJwaNTewb6DShigT5HtphTwCahF+ND/Fjl1B3zXmaDGFiX7QJZ/d06250mpZdtng XuududcncaA8iI7rTZavz+eYBDXsuB98NDXPbpf6zWC2LnJVuen0u7+BVvJHEvvqoQEi b/x+7hT0DpDBWWKW01lMgW97qFYbiUPRMi3UZfun4UB+BwhJ1EiAQyBKC64fnGq5H8fl 9Lyun5S2fCmT/CGqLUR1C3I+zuLCUAMjdzwIsJZFl2hqm4wJ90Io4yz0qrfhifHNee2m Q72Q== X-Forwarded-Encrypted: i=1; AJvYcCUQ1DuKM+poXBnjbc76A1bv1RgUqiuvOPKEryNmhxpydSSdJl8pqOK6rg896KWmoXsMmS1TqiSKK3N/h+Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwUm9/5nuzoekM1idw3Dc2tdU6Jq2TBJl6ibZwmXF/HVcnJ9CmZ CQ2LPqUzOY7yzTqJPjUnmfjom7Zqyb+0vKkgQt+/Z/psLhZe8KwtYyMArtZicY7mD3Z6vzwc9hl SdVUeekNGfnymDTGp5UwKxN4nRFF2cTOOdGGA X-Gm-Gg: AY/fxX6hk0Z66D6wUctXgIYhMtYDG5XEh+Qb6DIpoxqJOupQBcMfwDjf0g8ianmSpWr N3MkKUJ7BR9l/CnnZQgDElwsnWMyNAKJQX/OxR65NEEBIaOKadlH5ce7DsPGhkM897xYrnljJYH 6pKQKFR+jiaYhnA8VYxMyixe/Z65jgk/vU09q/DNRjSPlEpc+4K8Ngrcn40bDqwMqm5GUxjXski rKwdu4OdZ1i1iY+rLY3ZV7LbiVdOehSsN6n6lzoKaD3eN+X9N9xBGinlO9zhgyewln3ILDklkiw rbna5oryC1tQjxU3t9r2FXdldTGMHs6fkbSSTiF1ni7FGura/q7AH6h+h6FkEdHJSPXSfK5KcCU qgepN3YQIwOg2K6sEpzn3ujdHuD18T2eoe2A4haWPqw== X-Google-Smtp-Source: AGHT+IFIoOpuRg1q9EuTG0Nc8t8lYQNrZq3x8IAXv8KiSuUg/NK/XNf2ZmAO0r6Gx/3SMpY6lnMAk35MnOeS X-Received: by 2002:a05:7301:d0a:b0:2ae:5b8c:324a with SMTP id 5a478bee46e88-2ae5b8c395emr709246eec.4.1765949712622; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 5a478bee46e88-2ac3c13d622sm2020103eec.0.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 0EC2A342237; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 0CA87E41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 06/20] ublk: support UBLK_PARAM_TYPE_INTEGRITY in device creation Date: Tue, 16 Dec 2025 22:34:40 -0700 Message-ID: <20251217053455.281509-7-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Stanley Zhang If the UBLK_PARAM_TYPE_INTEGRITY flag is set, validate the integrity parameters and apply them to the blk_integrity limits. UBLK_PARAM_TYPE_INTEGRITY requires CONFIG_BLK_DEV_INTEGRITY=3Dy, UBLK_F_USER_COPY, and metadata_size > 0. Reuse the block metadata ioctl LBMD_PI_CAP_* and LBMD_PI_CSUM_* constants from the linux/fs.h UAPI header for the flags and csum_type field values. The struct ublk_param_integrity validations are based on the checks in blk_validate_integrity_limits(). Any invalid parameters should be rejected before being applied to struct blk_integrity. Signed-off-by: Stanley Zhang [csander: add param validation] Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 92 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 4da5d8ff1e1d..2893a9172220 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -42,10 +42,12 @@ #include #include #include #include #include +#include +#include #include =20 #define UBLK_MINORS (1U << MINORBITS) =20 #define UBLK_INVALID_BUF_IDX ((u16)-1) @@ -81,11 +83,12 @@ =20 /* All UBLK_PARAM_TYPE_* should be included here */ #define UBLK_PARAM_TYPE_ALL \ (UBLK_PARAM_TYPE_BASIC | UBLK_PARAM_TYPE_DISCARD | \ UBLK_PARAM_TYPE_DEVT | UBLK_PARAM_TYPE_ZONED | \ - UBLK_PARAM_TYPE_DMA_ALIGN | UBLK_PARAM_TYPE_SEGMENT) + UBLK_PARAM_TYPE_DMA_ALIGN | UBLK_PARAM_TYPE_SEGMENT | \ + UBLK_PARAM_TYPE_INTEGRITY) =20 struct ublk_uring_cmd_pdu { /* * Store requests in same batch temporarily for queuing them to * daemon context. @@ -613,10 +616,57 @@ static void ublk_dev_param_basic_apply(struct ublk_de= vice *ub) set_disk_ro(ub->ub_disk, true); =20 set_capacity(ub->ub_disk, p->dev_sectors); } =20 +static int ublk_integrity_flags(u32 flags) +{ + int ret_flags =3D 0; + + if (flags & LBMD_PI_CAP_INTEGRITY) { + flags &=3D ~LBMD_PI_CAP_INTEGRITY; + ret_flags |=3D BLK_INTEGRITY_DEVICE_CAPABLE; + } + if (flags & LBMD_PI_CAP_REFTAG) { + flags &=3D ~LBMD_PI_CAP_REFTAG; + ret_flags |=3D BLK_INTEGRITY_REF_TAG; + } + return flags ? -EINVAL : ret_flags; +} + +static int ublk_integrity_pi_tuple_size(u8 csum_type) +{ + switch (csum_type) { + case LBMD_PI_CSUM_NONE: + return 0; + case LBMD_PI_CSUM_IP: + case LBMD_PI_CSUM_CRC16_T10DIF: + return 8; + case LBMD_PI_CSUM_CRC64_NVME: + return 16; + default: + return -EINVAL; + } +} + +static enum blk_integrity_checksum ublk_integrity_csum_type(u8 csum_type) +{ + switch (csum_type) { + case LBMD_PI_CSUM_NONE: + return BLK_INTEGRITY_CSUM_NONE; + case LBMD_PI_CSUM_IP: + return BLK_INTEGRITY_CSUM_IP; + case LBMD_PI_CSUM_CRC16_T10DIF: + return BLK_INTEGRITY_CSUM_CRC; + case LBMD_PI_CSUM_CRC64_NVME: + return BLK_INTEGRITY_CSUM_CRC64; + default: + WARN_ON_ONCE(1); + return BLK_INTEGRITY_CSUM_NONE; + } +} + static int ublk_validate_params(const struct ublk_device *ub) { /* basic param is the only one which must be set */ if (ub->params.types & UBLK_PARAM_TYPE_BASIC) { const struct ublk_param_basic *p =3D &ub->params.basic; @@ -675,10 +725,35 @@ static int ublk_validate_params(const struct ublk_dev= ice *ub) return -EINVAL; if (p->max_segment_size < UBLK_MIN_SEGMENT_SIZE) return -EINVAL; } =20 + if (ub->params.types & UBLK_PARAM_TYPE_INTEGRITY) { + const struct ublk_param_integrity *p =3D &ub->params.integrity; + int pi_tuple_size =3D ublk_integrity_pi_tuple_size(p->csum_type); + int flags =3D ublk_integrity_flags(p->flags); + + if (!IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY)) + return -EINVAL; + if (!ublk_dev_support_user_copy(ub)) + return -EINVAL; + if (flags < 0) + return flags; + if (pi_tuple_size < 0) + return pi_tuple_size; + if (!p->metadata_size) + return -EINVAL; + if (p->csum_type =3D=3D LBMD_PI_CSUM_NONE && + (p->flags & LBMD_PI_CAP_REFTAG)) + return -EINVAL; + if (p->pi_offset + pi_tuple_size > p->metadata_size) + return -EINVAL; + if (p->interval_exp < SECTOR_SHIFT || + p->interval_exp > ub->params.basic.logical_bs_shift) + return -EINVAL; + } + return 0; } =20 static void ublk_apply_params(struct ublk_device *ub) { @@ -2901,10 +2976,25 @@ static int ublk_ctrl_start_dev(struct ublk_device *= ub, lim.seg_boundary_mask =3D ub->params.seg.seg_boundary_mask; lim.max_segment_size =3D ub->params.seg.max_segment_size; lim.max_segments =3D ub->params.seg.max_segments; } =20 + if (ub->params.types & UBLK_PARAM_TYPE_INTEGRITY) { + const struct ublk_param_integrity *p =3D &ub->params.integrity; + int pi_tuple_size =3D ublk_integrity_pi_tuple_size(p->csum_type); + + lim.integrity =3D (struct blk_integrity) { + .flags =3D ublk_integrity_flags(p->flags), + .csum_type =3D ublk_integrity_csum_type(p->csum_type), + .metadata_size =3D p->metadata_size, + .pi_offset =3D p->pi_offset, + .interval_exp =3D p->interval_exp, + .tag_size =3D p->tag_size, + .pi_tuple_size =3D pi_tuple_size, + }; + } + if (wait_for_completion_interruptible(&ub->completion) !=3D 0) return -EINTR; =20 if (ub->ublksrv_tgid !=3D ublksrv_pid) return -EINVAL; --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2974C24886A for ; Wed, 17 Dec 2025 05:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949716; cv=none; b=UsTLs4CGtBGIEo1GV9fdNkrqgBkrs/1nzbPCGkvrHesUpgyqS3sVMEekEkzZQkosss3hTvdpUiiCLfKnRj+uEyFRJej/720VIBmw0KNB72diVuipMT+W1JKle9r1MKrCFOxzITpy71AT0xnUA9kBGOJD3aq4ewgymnL7VhvRTeE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949716; c=relaxed/simple; bh=xUnt6tcNFcvbLUQluEk+DA7ehpoD9vCwdlMzIL9waLA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mF6imE+LjnFcMXxGUqBD4UvoMSgEc+kYmptFRQ/L+TBugBRCEdTUdyP9UC/qVZNCsjmyqnQcTrrYIvSGxohdQ9/NUIBayiR3ZKGK9pYCwnyY32ayncyjbdQapIXwuzuW+vcNArMjk7Eqz+q0OAW4qY/r/0wYWO41ZEKQ0HAe0uI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=QPhW/l4B; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="QPhW/l4B" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-29e619586deso8199995ad.3 for ; Tue, 16 Dec 2025 21:35:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=hT0LIZA1/TY2oqNx1vHBtwvUuMBhHk0keJnG4GSpICg=; b=QPhW/l4B6tWoXj5qDnMRCWuTF1jZyUTu9gPxmoIF+Kmn/ScMbAeFaaQm1EC2S7oTDw MPSnj5bVzx5Zhk3lr15jDGWz0dmQPvUuG1C38xyShrPo2jLwD0s5BqZTkaWkVhHvAvaj cJW6kyt9VQcZI5GVuq6SI6ltdXBD1cbG8RPkJ2wgMXkZ17BANjN0Bx+8pgIyygMjKoWM znvceNfXgjPOCkrGyxp7jupSTVCoj9ILURiDqH0KopDUZG1Esb2xLSWHWfJvCmPl+Xz4 ejVyuCDMzhVD36P9wUhtQ5GsJnO0KTfSZjlfdkgAjfeAEu9gsF5pugUT7QLc0txHas2A 3vYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=hT0LIZA1/TY2oqNx1vHBtwvUuMBhHk0keJnG4GSpICg=; b=OhOC307dj868CxPhLkMrgLaN8WZiB6A7yOEmDQosmxFCcKEec2Il5TN5uSZK8kjCPI t8qy8HC1BbGcFurGO6clqiATYQcAY+cyRFouETckOceGJ6Cs71UOxgOTwslsET7q8Hdd kvic1l+S/i1Fex6V8CitQZK4w/f2eDz0GlMQH3HwLexOCIUVcHkekWYYL3r1i0lIHuvl 8iu9ic7HEBiBXxH+BKLZ6sAgpM/STEaUWWKv4sx9bonLYJql4xJ+L9GJLExxfVWZW38R G6ZIHoa1X2ne87i9QxYRGsT4LL+CvczuPkwewClYZnd53Fx8yZr+n+HPb6EFsqbdm8KM ZDOA== X-Forwarded-Encrypted: i=1; AJvYcCVkVlw5cilcnfvjpMPQ9iJLhfDfrewcZiXl2/CjOX95/JMycjmlqdt+2txh5MvndKuwL/Cdk3ZkiCoDsGk=@vger.kernel.org X-Gm-Message-State: AOJu0YxQ6ZX+P8SBHfZ5zfO/c+4dAgE6wTd7/yN0B8S/QL6152QXqenp sYBUXAFuF/kNs58ZXFAyaw3E6F3JXg/Cr7dIYuJBGmsem2H+g5XwAEOitG4ne8MmGt4dKMrcXFH R4h3Ntbxnw3tKiyvyKGoOClZCHUjV57LCpLlo X-Gm-Gg: AY/fxX77pdrYICv9xEz669WHaNXVS1ZPVDuPw87YPmytVtpT1NeSvyDQ+Utpa8Yg6FC 9ALhV3cuonRTnJbqn4iH1shPiKcvyM2ZAc+cK/D42KId7Y+B+MPNGmc5z3hbKezPd6751OEgwHY +xIUDOE3qIjLkk7/8SDn1Y75Ps7KOqNdXLgiyEHZZKKspyp4CerlUnYt97EJ2x4elXNQ7jXehZN uhrjQDpVBYLrFZFJj5gOweOaBsw/kkA9XB795QXMezqAOvy05GLS09BtebJD8VlMEtVMapnfs08 Q7NCfB3OBQMa6wMHjQGxidjNkYSbf65PbqzksmVZ5kt6KeK/p+jQ2q9toRdpQfqeb2mluWK/WDs zPGRDWuSoeOTdQ8SQh1kICctyz0nSL7fEOHS0Gh9Nsw== X-Google-Smtp-Source: AGHT+IE4myv0h1KnrGoh4Bqnmy5Mn0kVvtXxHRg1nwGw/MPEPtvDRRIKUFstTHvUGXtDDPJ5IrxUtlbepRvi X-Received: by 2002:a17:902:cccb:b0:2a0:879c:ed37 with SMTP id d9443c01a7336-2a0879cf44bmr113254795ad.2.1765949712890; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id 41be03b00d2f7-c0c29ee87aasm1974455a12.11.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 2ADCA342243; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 28A44E41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 07/20] ublk: set UBLK_IO_F_INTEGRITY in ublksrv_io_desc Date: Tue, 16 Dec 2025 22:34:41 -0700 Message-ID: <20251217053455.281509-8-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Indicate to the ublk server when an incoming request has integrity data by setting UBLK_IO_F_INTEGRITY in the ublksrv_io_desc's op_flags field. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2893a9172220..d3652ceba96d 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -1107,10 +1107,13 @@ static inline unsigned int ublk_req_build_flags(str= uct request *req) flags |=3D UBLK_IO_F_NOUNMAP; =20 if (req->cmd_flags & REQ_SWAP) flags |=3D UBLK_IO_F_SWAP; =20 + if (blk_integrity_rq(req)) + flags |=3D UBLK_IO_F_INTEGRITY; + return flags; } =20 static blk_status_t ublk_setup_iod(struct ublk_queue *ubq, struct request = *req) { --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-qk1-f230.google.com (mail-qk1-f230.google.com [209.85.222.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96F59287276 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.230 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; cv=none; b=U4zspqt2+YiDeSQLxiYp6BE0FgTMKGCgvgO1q50tMK9NEljx038OAyjJhEhoROGKbycsRlcgvrkpKSBK/DKmQ45fNOd5VUwxPF7ShI8YeS6cKA5bbgUgiRKT2P35r0RIDb6WMNmTuAStRhAPAMlSagZN0wytE/RJ6OSQrBb4fLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; c=relaxed/simple; bh=1m8EvyXDwfnBtO4rKSJxv1p1kVYtxq+BhiSXNiIuIFc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ai2BsOgbmPWfv/hycJbCdyUKccB+xYOpQ+LbjP6cVEps86bDYtOjpmq/btq8ALNbICtMOlSXmv7vRBL14Vjw/4189/YsqrKCfKntHabgMhMLY1JSe9IeSLQ0iepIKKgyuLDP4Vml4pi0mSGVpaHHTDrCQ41buOXREXfFec1V2h4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=AjwV1PEY; arc=none smtp.client-ip=209.85.222.230 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="AjwV1PEY" Received: by mail-qk1-f230.google.com with SMTP id af79cd13be357-8b2df1e0c10so109125085a.0 for ; Tue, 16 Dec 2025 21:35:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=hLmTlnuPqHH6b8/uqO7lFBozYXk9kulItImdN914sps=; b=AjwV1PEYCUMrcRrMXXX7CSjXLyq/7Cj2m+OKXHjC7fIObSwcRE2fTS4xCpQ8BuGWZe f0yJ7PgQPrUKTWa62gKHUls9dWJvqFXKXnDizP4GeU0h7xHnXbvKuHI+K7RV8XFfjjWm 2EKnutONnce/D54HoRPLUMc0NqIj3JOqiLnhzl8ww1a5ownoLwmbuys9nfXRBr0dWX1y X1rfdVWrVZ7vB3Bq3keRB7vA6WwXsLhW6+kmS/y5kLCdu3Ciw8ae2OE0sSIzmC7WMS9s ATRh9fI8/rhS6Or07I+6Ne1xcrS1nFvJwCAmr1fusfjKTRYpi/YPjaNhO5yEpwlStKPK AbxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=hLmTlnuPqHH6b8/uqO7lFBozYXk9kulItImdN914sps=; b=jTZZzHUzER1j6Ka7PLM6pZ2cAmJe4zvfny9kyLPYSJkabVxEGLUXYwGW2YuVtchEoQ Pin5vOKu/mf0tPWwbxa9rhlJZBXAJlbpQ0hhhT3JuPVufciqfHcHRPesODCSfEyVlsdW Pe+O+TneF0/RvGiW/oTkd5NpW71IR83ZSLEE2r6xuwv3VhH8Zl5PDUQb1nsIpVnKJPFk /X1im9TAi8UaqrKPO6VK4DUzsGojLLmhEAelHp5dLcXEyyN6RC/ZrtJG5cVLAqDsseVI zYfONI4egQ+LfGE9KygGUoedTQWEzBaTqREQuTXuXs8/dLcyaJjFG2k3/MH/Tg8d19Jg pj9Q== X-Forwarded-Encrypted: i=1; AJvYcCUkZcozDBhWUmd4Ux/aV/FkQwJOyXTPDqbnTFlqVrHshveNxmrG/q3JgcwCmPfEHrR20XW332GLHVDgaXQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyWdCtijxZfLslyLygInbP7wQkFHY5A3aXeBtyCvICyLVNQj65n AXWXKSiujVDQKpKova91CTfdLAkBtC4qgDCUzDlaDjATO/8JZk7wNFnCUag3ZalaRwXz+3MVeHc crwk0mMO4/wWA0kHh8G/JhVoZRyoZccHQRtzPBE1WX9AHqVFyZSbd X-Gm-Gg: AY/fxX5Nxe/w3jWZxKagLZKkD8Zd5s/RPsurK7anDLJwOPfw1HF4tMyLtyayZ8FrwQW i/mX5n1t1zGEvC/n6YHkIoFM3OEQIaKiuF4u5Z/W3y1hkrAWMgjCmmMpB/CctRHolhYvRXPwbVA D4DXPFDJS0qR2fNmyhu2KFkTpPl5nRC1xSWwxEJyUfi6dNMfacoh01MdEV6x4hoBquC5AWXeLp9 H6L/UyTEZ1zHi5gSkO+5+LayvcPXPSaaNbFicZu+BPFx0u2bNdPFxmhlyNq0tETOMXLsiVhBxT9 I2xDcaAdSkuZmJyw0hQjFHIvCQW56zSvOBtSkQc8wWKhYyy269aV+bGiLu4YbSkRujfJexGyHpg j0zXD6EVqg5cpCzqsors6N23GCnc= X-Google-Smtp-Source: AGHT+IEww8Xn6us3eOELOJf2dWwwlAwsZJ+WOpO1sBLgJOCvWnuS6p6k5sw8+fQPVGcQ83L4wdZsBp1KT178 X-Received: by 2002:a05:6214:3009:b0:880:6fa4:f55c with SMTP id 6a1803df08f44-8887e15808fmr208544136d6.6.1765949713446; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-88993b13d22sm19235286d6.4.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 486FF3401D2; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 45A06E41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 08/20] ublk: add ublk_copy_user_bvec() helper Date: Tue, 16 Dec 2025 22:34:42 -0700 Message-ID: <20251217053455.281509-9-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Factor a helper function ublk_copy_user_bvec() out of ublk_copy_user_pages(). It will be used for copying integrity data too. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 52 +++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index d3652ceba96d..0499add560b5 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -987,10 +987,39 @@ static const struct block_device_operations ub_fops = =3D { .open =3D ublk_open, .free_disk =3D ublk_free_disk, .report_zones =3D ublk_report_zones, }; =20 +static bool ublk_copy_user_bvec(struct bio_vec bv, unsigned *offset, + struct iov_iter *uiter, int dir, size_t *done) +{ + unsigned len; + void *bv_buf; + size_t copied; + + if (*offset >=3D bv.bv_len) { + *offset -=3D bv.bv_len; + return true; + } + + len =3D bv.bv_len - *offset; + bv_buf =3D kmap_local_page(bv.bv_page) + bv.bv_offset + *offset; + if (dir =3D=3D ITER_DEST) + copied =3D copy_to_iter(bv_buf, len, uiter); + else + copied =3D copy_from_iter(bv_buf, len, uiter); + + kunmap_local(bv_buf); + + *done +=3D copied; + if (copied < len) + return false; + + *offset =3D 0; + return true; +} + /* * Copy data between request pages and io_iter, and 'offset' * is the start point of linear offset of request. */ static size_t ublk_copy_user_pages(const struct request *req, @@ -999,33 +1028,12 @@ static size_t ublk_copy_user_pages(const struct requ= est *req, struct req_iterator iter; struct bio_vec bv; size_t done =3D 0; =20 rq_for_each_segment(bv, req, iter) { - unsigned len; - void *bv_buf; - size_t copied; - - if (offset >=3D bv.bv_len) { - offset -=3D bv.bv_len; - continue; - } - - len =3D bv.bv_len - offset; - bv_buf =3D kmap_local_page(bv.bv_page) + bv.bv_offset + offset; - if (dir =3D=3D ITER_DEST) - copied =3D copy_to_iter(bv_buf, len, uiter); - else - copied =3D copy_from_iter(bv_buf, len, uiter); - - kunmap_local(bv_buf); - - done +=3D copied; - if (copied < len) + if (!ublk_copy_user_bvec(bv, &offset, uiter, dir, &done)) break; - - offset =3D 0; } return done; } =20 static inline bool ublk_need_map_req(const struct request *req) --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f225.google.com (mail-pl1-f225.google.com [209.85.214.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2472E23F27B for ; Wed, 17 Dec 2025 05:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949719; cv=none; b=uKyx786RnEDEQ67pUm3MVqqh1kysZo6Qc+2wyXjyB067vnNWNPcu07Tgs7BmQ0kk1nDkOR2DR7CZ9uHNPSdjWuDgzTZqJUD1pVEMTK5422sFQLBb5nUoTdUl9JELdCd68vmSQbb7evrXOvOuRDk3YmOCd3m+b18B7St0Qz+lBQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949719; c=relaxed/simple; bh=pFLON0C1oQtjJn2qiXI7MdgjCCHKt6ZzUS2gWW7cigc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f7cpYuvMugUxOQewbMrWigSgSBDQf6d9DT8IVGBUv80mYcrE1ar9au7ywCX4wcGxw/M1taQDHEHSxumi93TyCYTNMfA6tCUuibunnPd+PZYhO5sTEs1gMu5yJeHPMIHm/WVJi0Z0/rmTSzVzDtENyUYoQeQGwMtFVzT4p+Wq73M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=buAMOgLO; arc=none smtp.client-ip=209.85.214.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="buAMOgLO" Received: by mail-pl1-f225.google.com with SMTP id d9443c01a7336-2a08cb5e30eso8918935ad.1 for ; Tue, 16 Dec 2025 21:35:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=7nnWCsd7c+dSY8wBQngk2tPTTYvptZXaImBTrn5efMQ=; b=buAMOgLOoVGXYmYAYaKLYDeO9Am+GPjYU9O9hSlbEHV3PP0WTn4AaRHjqTDzyN1Yf2 80TQP5nXMWsig84mlOzwIZB6tvRn1WHVrVLw56IiaS0xrfu5+rdyZrOZw0l2jhZ4gtck N1dk53bZ1WXyHMJT0z+rc1jvuPy6XvrbhzVYJessQjoxt3a0ecpFnnvLX/fgzCNs+6oN gvrV0lQkPu713+2Bp7DesvEw1RNnrsXF2NQjB3inar8u2L/KN0QsuBXBcxTaJahEZbqR L+GWUkZLopEU9AEUW16CPvgVUMxPCVAs0jzWlTuMJGqc11zEzuEWdAm+dwIN6sIWzsPc V0kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=7nnWCsd7c+dSY8wBQngk2tPTTYvptZXaImBTrn5efMQ=; b=qgErS+awtrdjG4G/c9SzItuUeybKF0HG2Gp76DwmRTRGhF9AfayynDNuqMhLD7eeAC b4vTRir48XP82XtZq5IJsOEFra/RmMGBEGsooiZYXFg9qh3VUP7lOpKgc7Ttz79rlthN 9xo4N6nVN+LV1/grQ4xb3+ApndWzwpWJi3cw2lnsM9/eaafLH6PJBdTWo7GUWyfEK67t yg7okGn3oXOEFuMrqKXoCSY+UquvI9qbFUV/qNfn68IaXrGnofI0yQNRe6E0J0yqVQNo cfj157QfzDsMPdDk4A0/1DlF1bAaAg3pRmcJmeo2IJ6miSvCcvV3AW+v7MB4T5UMCb7W SNeA== X-Forwarded-Encrypted: i=1; AJvYcCUC5yX128zBDDOaD74YDfqsay5krJGaWCOIWT4qJ7tjRI06PtTmT1nrtZBlQsKhv6ZyhnDw8OlkdtALCEE=@vger.kernel.org X-Gm-Message-State: AOJu0YwsDde/HQGu75GwzDritb8n3MKqGh+i6hpMOyXJwJiX7EJaaY8C GL2ZPHe6d52pQCO0TDTEI8/SZ3KjI5387UBFWF3PiVt2+qQlrzRlIu6wnHTrHrriWRysjLIJ/G4 p/DIOPVcEGowWyvqlU0vmkoM9CYMNPnx4ElCJ0RHgE6ZgcorQrphb X-Gm-Gg: AY/fxX4Qm7HSaReL5VDf3i9bQGFkyUp2r71m4w6MWV1yTmgxxSW4d1hODsjk/1iakfb PrnCAW2beVwdT3icajgHTkuqUxo7XWmvkm/orssAxGKDtrOE7IpjT1i96mUvvpQxz2VP/Oo+5ec IoYylpVU6HLqc2YsntYzgI5uSq2ctpRXoG3VqS45JT1McuSaYXOHS4EIq2uu9BeYPDydut0aG+O XHkvn4Rj/BBAnEoKo1yAgZhL8hw/fHcjLQoU6MDAYF+J+GA7sl3Cf1WF1zY4mZgrpEAI/NWn9a0 qddU8+veOZ/cZjxpU2kAz2gM57r5cLhx9TteAqNY4Eprj2oIO9837PNctjJSub+1/hZy3Wn+aWg s0v9SL4PyAxeWpHTibrUlc6ihRtU= X-Google-Smtp-Source: AGHT+IHMdHsws7Dly3g8BQupcQIOtlAn+95WYWkTsv2m0JLOGAKnlJx71g9i0zbiAmgrrLQ8YLltVLenV8LJ X-Received: by 2002:a05:7300:fc0f:b0:2a4:3592:8623 with SMTP id 5a478bee46e88-2ac30187911mr4942568eec.1.1765949712815; Tue, 16 Dec 2025 21:35:12 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id a92af1059eb24-11f2e151243sm3230590c88.0.2025.12.16.21.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:12 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 5FBA534225B; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 5DB2BE41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 09/20] ublk: split out ublk_user_copy() helper Date: Tue, 16 Dec 2025 22:34:43 -0700 Message-ID: <20251217053455.281509-10-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ublk_ch_read_iter() and ublk_ch_write_iter() are nearly identical except for the iter direction. Split out a helper function ublk_user_copy() to reduce the code duplication as these functions are about to get larger. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 0499add560b5..e39ed8a0f0ae 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -2657,42 +2657,36 @@ static struct request *ublk_check_and_get_req(struc= t kiocb *iocb, fail: ublk_put_req_ref(*io, req); return ERR_PTR(-EACCES); } =20 -static ssize_t ublk_ch_read_iter(struct kiocb *iocb, struct iov_iter *to) +static ssize_t +ublk_user_copy(struct kiocb *iocb, struct iov_iter *iter, int dir) { struct request *req; struct ublk_io *io; size_t buf_off; size_t ret; =20 - req =3D ublk_check_and_get_req(iocb, to, &buf_off, ITER_DEST, &io); + req =3D ublk_check_and_get_req(iocb, iter, &buf_off, dir, &io); if (IS_ERR(req)) return PTR_ERR(req); =20 - ret =3D ublk_copy_user_pages(req, buf_off, to, ITER_DEST); + ret =3D ublk_copy_user_pages(req, buf_off, iter, dir); ublk_put_req_ref(io, req); =20 return ret; } =20 -static ssize_t ublk_ch_write_iter(struct kiocb *iocb, struct iov_iter *fro= m) +static ssize_t ublk_ch_read_iter(struct kiocb *iocb, struct iov_iter *to) { - struct request *req; - struct ublk_io *io; - size_t buf_off; - size_t ret; - - req =3D ublk_check_and_get_req(iocb, from, &buf_off, ITER_SOURCE, &io); - if (IS_ERR(req)) - return PTR_ERR(req); - - ret =3D ublk_copy_user_pages(req, buf_off, from, ITER_SOURCE); - ublk_put_req_ref(io, req); + return ublk_user_copy(iocb, to, ITER_DEST); +} =20 - return ret; +static ssize_t ublk_ch_write_iter(struct kiocb *iocb, struct iov_iter *fro= m) +{ + return ublk_user_copy(iocb, from, ITER_SOURCE); } =20 static const struct file_operations ublk_ch_fops =3D { .owner =3D THIS_MODULE, .open =3D ublk_ch_open, --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-vs1-f97.google.com (mail-vs1-f97.google.com [209.85.217.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1B9528B415 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949722; cv=none; b=d52zLz+Wc0uFvWk/7iOuiAF4EpqIbGTL1GnnMdaJCb5YV+ZT2CLSIZ8YIpqLpwyzorogrZMugeSozcx68H9hitSXkV0jnVndg8LsJaEoYjB3DLDb6Erh96fGlPYtqU6rOU0r3fj8N45+cxpPXX1Yn1yBoxMJaHeb4hcW65ZK9ZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949722; c=relaxed/simple; bh=GHoPeIBMgfFtWJ8ncdyC6wl5P7hl0IaKfGFtCbYkhNg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IUu10bdll5RNvU1LZHXQ/P4HnQ5EKUXZq/XjlNC0VoyiZyFlVWCC9SrYvIEGeU8PY+IZ4Od6QHhddrSbOq/gWsVDBfigCOhpD9vQTJssRdGbbtCEtgur4PE73kcAaQjHdxaFFX/rx/lgxfF05m9xpsNrvGcJ2EeyQCx8ZSTAWPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Z8THq8hs; arc=none smtp.client-ip=209.85.217.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Z8THq8hs" Received: by mail-vs1-f97.google.com with SMTP id ada2fe7eead31-5e53d9dab3bso338147137.0 for ; Tue, 16 Dec 2025 21:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=z3mOq9Y+rhC9S4U+IJUmG6OBz92i+diStuHtdFNS8Qs=; b=Z8THq8hs2puTbEwt2aaqEUl21ZZRJTpYdT607oKOeEnP5LyMHRmf7Rd1GgCYUQgp0W H5okYgYOUQkkmo//Tc0F3i81JOmhrWCtehdLX07tvhcu4VDdnYwDx416oERRt0xYFCuF 5rfHmMw8sK3EID0bzVyr7sg7S+YhbKdyhyWhfMOq7sR2HFiHfjrA4w1LYq433+O4Hrt7 0AA00qJ3ja65XrzfP+uYfjtbgx7EGwU8cQvnVLqUzag42Z0reufCybARHehC2bMJtCjH KKrWdMXH75sepahy7tPBkp8wCt9O5/0LJgzI08oD5uTJhxVNeKwWdjCBvEUQVrRHMSn8 +AFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=z3mOq9Y+rhC9S4U+IJUmG6OBz92i+diStuHtdFNS8Qs=; b=pXPQUDIfiqR7NrnRuSKDKelt/hbCmLCbegOtf7amcwIpLrfPTek3eYoEhbcMI3Rf4s 264EzRV2FztqBmO29lTIH2dgmUGKiSIiXWky+C72Gkod8PoqtnVB5vbeFiSt9L2gcc1a rCJro+oMgd6Rbfry27OvaBvzwrTxxxBnV9twFcYDoqrQBxHGF1DZZfCO1Jv+fHL6Sh1q xwErDpSYNr7IRwK60r0Fw3Hyjjn2LNRPlvTMGlnbQRg3n6YwFXw51svUOT9vE+k6Lbvp BzIQ44oaALIJjfcz8HrcFSHbcOiwaaWsZ2mJY9zeX7v8feQaG3ulYZxyXVAYeJ7OoMOm Zq5w== X-Forwarded-Encrypted: i=1; AJvYcCU731Q7uf/hhjnZiWbNlceLcVrcCQPgJHixY0YpDrgCbLvAMy6TxglZuwqoCAJBWntuFl0BNh2zob0h5JA=@vger.kernel.org X-Gm-Message-State: AOJu0YzOfe60ufhhyEaZO5xij0srw07+oGjVvfwkO+MSqkU22VGwJU0R QxqRmG5iFVSmLFMN4CXvGttlt6kbbMRcwRVUSx3oIxRtBtCpMSPNYiSt6dN+AnmXH3WV2pOQH/O 2w9K6SiJMMjJBB3qMxncAzul/UPYATsj9EjlOxRS8n0vUC9EzSyhX X-Gm-Gg: AY/fxX4vSG7YqolPqXFmrQ9YL1xT13yuUmopBxp85GpG82+NZJjkeDltWIo1eA76FpH FnOgKOK64N24/iwo2r7ZYW5WNsI8mAVD2FDJ8eTj/DAur13CyLbsKnsh3faupJwhNmGnS4gePIT G3MFi0vOC0Tkr7TqnxOzqPSYai+RT2zYWoBUPvhZeptbG+0rl053FwLg87IXrB5PrltbiCXFDbL /rmgTquQhFQSumYXOtUjHYirAY5bpdZZ1MbV7430i7ixliS+/h47yG66+iGyXCXDHNDDm8Dz29L sv+9usNJv6/KaZlPci6N2RP0Cgzn/+Votil8xEVcqI5yLjNlocE8jjL2YTZ/b1CjypdQctNjGov j/6lrlHJ5wGyDbKyiApP8+HzBMNM= X-Google-Smtp-Source: AGHT+IEdiu/wz3LFaYfCFvm/xPf9JRqbDWXdAzTEtw+g7b1hcvx8k1bBanbe2UHRij72QmFAixdEIBRJ1PFo X-Received: by 2002:a67:c585:0:b0:5db:e851:9386 with SMTP id ada2fe7eead31-5e827470360mr3060384137.2.1765949713752; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id ada2fe7eead31-5e81e5a1d6bsm2447945137.1.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 7FF503404B4; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 7C0C1E41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 10/20] ublk: inline ublk_check_and_get_req() into ublk_user_copy() Date: Tue, 16 Dec 2025 22:34:44 -0700 Message-ID: <20251217053455.281509-11-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ublk_check_and_get_req() has a single callsite in ublk_user_copy(). It takes a ton of arguments in order to pass local variables from ublk_user_copy() to ublk_check_and_get_req() and vice versa. And more are about to be added. Combine the functions to reduce the argument passing noise. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 51 ++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 33 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index e39ed8a0f0ae..273d580ddc46 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -2612,70 +2612,55 @@ static inline bool ublk_check_ubuf_dir(const struct= request *req, return true; =20 return false; } =20 -static struct request *ublk_check_and_get_req(struct kiocb *iocb, - struct iov_iter *iter, size_t *off, int dir, - struct ublk_io **io) +static ssize_t +ublk_user_copy(struct kiocb *iocb, struct iov_iter *iter, int dir) { struct ublk_device *ub =3D iocb->ki_filp->private_data; struct ublk_queue *ubq; struct request *req; + struct ublk_io *io; size_t buf_off; u16 tag, q_id; + ssize_t ret; =20 if (!user_backed_iter(iter)) - return ERR_PTR(-EACCES); + return -EACCES; =20 if (ub->dev_info.state =3D=3D UBLK_S_DEV_DEAD) - return ERR_PTR(-EACCES); + return -EACCES; =20 tag =3D ublk_pos_to_tag(iocb->ki_pos); q_id =3D ublk_pos_to_hwq(iocb->ki_pos); buf_off =3D ublk_pos_to_buf_off(iocb->ki_pos); =20 if (q_id >=3D ub->dev_info.nr_hw_queues) - return ERR_PTR(-EINVAL); + return -EINVAL; =20 ubq =3D ublk_get_queue(ub, q_id); if (!ublk_dev_support_user_copy(ub)) - return ERR_PTR(-EACCES); + return -EACCES; =20 if (tag >=3D ub->dev_info.queue_depth) - return ERR_PTR(-EINVAL); + return -EINVAL; =20 - *io =3D &ubq->ios[tag]; - req =3D __ublk_check_and_get_req(ub, q_id, tag, *io, buf_off); + io =3D &ubq->ios[tag]; + req =3D __ublk_check_and_get_req(ub, q_id, tag, io, buf_off); if (!req) - return ERR_PTR(-EINVAL); - - if (!ublk_check_ubuf_dir(req, dir)) - goto fail; - - *off =3D buf_off; - return req; -fail: - ublk_put_req_ref(*io, req); - return ERR_PTR(-EACCES); -} - -static ssize_t -ublk_user_copy(struct kiocb *iocb, struct iov_iter *iter, int dir) -{ - struct request *req; - struct ublk_io *io; - size_t buf_off; - size_t ret; + return -EINVAL; =20 - req =3D ublk_check_and_get_req(iocb, iter, &buf_off, dir, &io); - if (IS_ERR(req)) - return PTR_ERR(req); + if (!ublk_check_ubuf_dir(req, dir)) { + ret =3D -EACCES; + goto out; + } =20 ret =3D ublk_copy_user_pages(req, buf_off, iter, dir); - ublk_put_req_ref(io, req); =20 +out: + ublk_put_req_ref(io, req); return ret; } =20 static ssize_t ublk_ch_read_iter(struct kiocb *iocb, struct iov_iter *to) { --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f227.google.com (mail-pl1-f227.google.com [209.85.214.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4DB5267B89 for ; Wed, 17 Dec 2025 05:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; cv=none; b=sx1biZ6BCkOjb34uravbIqSx8MiM5VNxBzd7TseDooPg2GP4Jqv0eyvx4D1iZoRzxYXjw1MMCfgcIp504TwK8Psu9wKxNOZG7Jr/0ylN6EcEt/FwX1mzustxRGLrd7IIisgJSbDJmD5BAsY57h6arRT+2nCdsyj7e0a07o7h/Is= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; c=relaxed/simple; bh=9ogkOXR+Y8uacI3HACJU9UwIkpxDQMrtkJbS21SD2to=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r+QAS+w3D21eqHN8EMfUWqUE7xF83CwOaSS64WTSRKhAqB/uwfI1qWkXg8tELjtEFnwf3wZfGQN2YmDgK4Zftjjzlhqc/K5/uvGYZ8i1b1J71XEp5EYyROtPjrxdN+Bbw5pacNPb/E8SsHJCvO0sTO4kvmYB++44woQIVwhNKDU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=X9IKB0HT; arc=none smtp.client-ip=209.85.214.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="X9IKB0HT" Received: by mail-pl1-f227.google.com with SMTP id d9443c01a7336-2a0a8c2e822so8333505ad.1 for ; Tue, 16 Dec 2025 21:35:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=7u5SiWUWisiZXxTwmOVFVNPK/bGMmkGtOM56/HKpE6I=; b=X9IKB0HTSYwklfV72sIvrTmR4B2CqtOLnXtG8R2O5FpHPadljp1bm+uDHWkC6RSgwI 8rCnt/YXXTjQrI743mRN8KGSZnknG2aUJWqF09O3hUNci/168Rn46JV5h2IDvoF85nwa hIaZBu6xCJ0dtjFUd6DsjGQM5Hz4OZa/4YVFZ92Hw2QKXSjz4FTBUpqxJ1I9H3KYhDjP nqCTmcrhBSHQMpgrT0LyLBU8PFmX0SQAdHS4VJQtV55Hxy2VAFFZwGLb3xu6LOc6qjJ6 4AS0eNI7NqOL0S0+Jcx3zRUFlPLyUMed068vl2DRkP5gJaer1rOT9ZCaDwL570PvrjrD HZ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=7u5SiWUWisiZXxTwmOVFVNPK/bGMmkGtOM56/HKpE6I=; b=sGO9pAN34KFBBI+ynKqcuwyH2a1mEuqyIwMcarKhAicFOrbx+sh4osKMpjCHmSqw0k Vyj/S2VChyy5p6EH8UdYiGY56Qsy/B/zw2NWYtOHyyWsk5+41Fa27yUcJpoLBPji8v7P lOPjVwGx36ruuN/Nl0PKH50cuN/T2WksxfYY+AWlcbyT61Etqc5JjB0tH3kjkoV4vQCy ABeztmrEQLl2qolStXxOCaiwxvXiogTqnqeJ2XL85JajRbgj0YfMACFviV+wIjJsOKiF YB7Ro+8SR1c3fdN+E56GX3x3YDLCpirXcrluzTmkKakjQnIobHCaDhiH2bwdYAb8gQsY Z6hg== X-Forwarded-Encrypted: i=1; AJvYcCXAmwLzC2wbyhv5AKZm5HBcBOL4qCd+Mu5BbVZcNszvSlf2jpDpYm0yJAX11AFyCEtDKW+KHPnTOas3S0w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1ZkIcTcx9ReSRRaK06BXbrBMEVEP0zDV3/0Z2vXVsML4nsJHk KksgAR4XpiJNjRzJhk91kC1GnA/AkPKnTguM1fcoQf/zZ6z7m8y4jIBJCY1roIAY/qxzwt5ScOw HMHqRnKQtNhE2cSPQ5zAhnLP6rC2tFBScQxIopibACNUwh0cMPLn9 X-Gm-Gg: AY/fxX7MKkkLWMWYfKONcw0gBRsNKn7XfoEnd5sHLBW8SdAwRWDaWRoYH+wpaTuLSVE /8ccglkTcKnk0eHd60JpsChxMTd6ZxTxXpogKgvBMZ14j3HyMrXyPxiq8bwQo3LcOyrSAVVk0Qv 9c1vK4V/mPm3Nm/LHOxUZ2LCpSubuHb2n2857Eoii59ECtIcUYiEWGoPZ8Jqm7/pHxI5KqoM/UO bQeWAavZ7VNTWBQ1AKtg5UllTLNIADlXFRms4e69boiW1qXMlip1lItLOWu8l5h3jnyHRB2N4ir DmBW96HlCoX3g6/Vg3i4OKxl3qKCweyO4OPWAXKBMuSzIYCuoyhdyV0zAN7znO+TqsQyMdXcVeK gDPtiKZf7lAxdRg2JvLp9rexRAxw= X-Google-Smtp-Source: AGHT+IEj41P1BUf7dMXgS7Hk43sGC2zUpFq8+vGee37eWRP/iFh7GVlQpIzMmAj5i5ENXIqxkVkgxN4N88rt X-Received: by 2002:a17:902:ef4c:b0:295:745a:800a with SMTP id d9443c01a7336-29f23afa321mr119245915ad.2.1765949713116; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2a086eaceaesm18721215ad.5.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id A24773420E8; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 9FF0EE41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 11/20] ublk: move offset check out of __ublk_check_and_get_req() Date: Tue, 16 Dec 2025 22:34:45 -0700 Message-ID: <20251217053455.281509-12-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" __ublk_check_and_get_req() checks that the passed in offset is within the data length of the specified ublk request. However, only user copy (ublk_check_and_get_req()) supports accessing ublk request data at a nonzero offset. Zero-copy buffer registration (ublk_register_io_buf()) always passes 0 for the offset, so the check is unnecessary. Move the check from __ublk_check_and_get_req() to ublk_check_and_get_req(). Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 273d580ddc46..7fa0a9f0bfae 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -252,11 +252,11 @@ struct ublk_params_header { =20 static void ublk_io_release(void *priv); static void ublk_stop_dev_unlocked(struct ublk_device *ub); static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ub= q); static inline struct request *__ublk_check_and_get_req(struct ublk_device = *ub, - u16 q_id, u16 tag, struct ublk_io *io, size_t offset); + u16 q_id, u16 tag, struct ublk_io *io); static inline unsigned int ublk_req_build_flags(struct request *req); =20 static inline struct ublksrv_io_desc * ublk_get_iod(const struct ublk_queue *ubq, unsigned tag) { @@ -2245,11 +2245,11 @@ static int ublk_register_io_buf(struct io_uring_cmd= *cmd, int ret; =20 if (!ublk_dev_support_zero_copy(ub)) return -EINVAL; =20 - req =3D __ublk_check_and_get_req(ub, q_id, tag, io, 0); + req =3D __ublk_check_and_get_req(ub, q_id, tag, io); if (!req) return -EINVAL; =20 ret =3D io_buffer_register_bvec(cmd, req, ublk_io_release, index, issue_flags); @@ -2539,11 +2539,11 @@ static int ublk_ch_uring_cmd_local(struct io_uring_= cmd *cmd, __func__, cmd_op, tag, ret, io ? io->flags : 0); return ret; } =20 static inline struct request *__ublk_check_and_get_req(struct ublk_device = *ub, - u16 q_id, u16 tag, struct ublk_io *io, size_t offset) + u16 q_id, u16 tag, struct ublk_io *io) { struct request *req; =20 /* * can't use io->req in case of concurrent UBLK_IO_COMMIT_AND_FETCH_REQ, @@ -2560,13 +2560,10 @@ static inline struct request *__ublk_check_and_get_= req(struct ublk_device *ub, goto fail_put; =20 if (!ublk_rq_has_data(req)) goto fail_put; =20 - if (offset > blk_rq_bytes(req)) - goto fail_put; - return req; fail_put: ublk_put_req_ref(io, req); return NULL; } @@ -2644,14 +2641,19 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) =20 if (tag >=3D ub->dev_info.queue_depth) return -EINVAL; =20 io =3D &ubq->ios[tag]; - req =3D __ublk_check_and_get_req(ub, q_id, tag, io, buf_off); + req =3D __ublk_check_and_get_req(ub, q_id, tag, io); if (!req) return -EINVAL; =20 + if (buf_off > blk_rq_bytes(req)) { + ret =3D -EINVAL; + goto out; + } + if (!ublk_check_ubuf_dir(req, dir)) { ret =3D -EACCES; goto out; } =20 --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pl1-f228.google.com (mail-pl1-f228.google.com [209.85.214.228]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B2EE6267AF6 for ; Wed, 17 Dec 2025 05:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; cv=none; b=tSULq1vT1WwmMmI0+yIz1ZoNkuj/7NpXncF5bbXwc64LDZLqGAjsCBLzT6FQmO2JHjY8UDnuFzKtuChUSpG9bVKKF01R4vOBjMTzhj/zyKqs8qDxiYxRoCoG5vn8fwUfaa/6j1W3b3RjahfU8hTq26JuzhuruC2saILW0hc9PRA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949718; c=relaxed/simple; bh=FTZpTJFk7vIPg1PZH6cxAezI3CLxjX8XLWzJZS/E38A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pI+K1Fw4fxdaKf9XDerSqH99G1v/iDndR5qItAx+SWQ/MSKiSBuQZiTMFLvG0pV/T+2GesVlyll6ZmjlrhQwRyZqBCNTQShWwSRKnPMhLwl2Ov2yKtNqlviSJR5BLk1ALGOunifCOZmseb5q+YK/I5PHLEdwdpiQh0N+b7dNj0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=UrL80x2I; arc=none smtp.client-ip=209.85.214.228 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="UrL80x2I" Received: by mail-pl1-f228.google.com with SMTP id d9443c01a7336-2a0a8c2e822so8333525ad.1 for ; Tue, 16 Dec 2025 21:35:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949713; x=1766554513; darn=vger.kernel.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=7Eb5T1Z9IaRsBIIzFsefoZOCFYrX4XELdNdKDdwX2OE=; b=UrL80x2IIqRxbqNiKdBMndhmY218ynIUj3f+ABIl5rG0LNtmk8MClLS+JrTx97gbxj EGuHMGLfe2rGNSqmKP1hkQuCYW9Ap9flj97qa0RWEb/N2jKAZSwhXJsLogoAJNCv0XMZ gYdPs++HRYwsOvM9eWElnw62JpQmUvHW8mt1uDQscQCh2l88iQyUqXweUUqKbKeTu0kf jdUfqNhbMVAw900A85C5cUMqcTFYw1seQxW9pweW9VSrtzluFB+z10cRabZkjY0jAaxw Djpv7ZVd/68+Kt7QGAUkI1FumqpGFkWv2TlZwwaRgH5n9Q1bpZ+xl8N0rfkyzoVb8ob5 HNrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949713; x=1766554513; 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=7Eb5T1Z9IaRsBIIzFsefoZOCFYrX4XELdNdKDdwX2OE=; b=HEf1n2pXEEUo1uKbUPIYszAHA7NiFMQnjrcJNkNAWRyINBYI3MpcXdyx/sMQVo/iNt m+IByMhO/pMcSk0f8P4ZTYNzw3bqOAbnVa9W0xqAovKwObSAkdhUNZWMiBG1xLij7VPt tGcpKcWEOsgANtX+uXsszb5p2T1eVux0xkmpM1MGZuq8XEe7I4um5sr46HT42b8weqHl i7xW0QrGvvwrnQo7OeohLpvpgYLCMMZvAF/35BYYHRdMVYQ1lDLiYPigFm/nKFSS368R u6kKQUseTXmeNQmD6ORRA1tbYyQQ8ZJ6N+sCEu4pP75nIRoamw79+Qg0Sqr75M1D8FGA aS/Q== X-Forwarded-Encrypted: i=1; AJvYcCWVbyArEa//3bOnc1Jmylj4aW4Yw9mXbpcB9v3nb5ZNwgbUDIAAEIXs4lu7hXTsVajkLry8keLrAs1mB1o=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+Mvx6rN3hBVbs1Ve4016GUprIYjq3y8POcP2sKO0soe0d29oO IGVVjijig3WftyMHh/BvDvT9QkvT/yYa6iDb7eNqc7FAXv0IOGScVmn6bUgrZzZTeYXVig33p2i g1hgU4lNP55YlzptNxlzLZN3DAoX9l3ZNi6sP X-Gm-Gg: AY/fxX4xeH/pJYAgfXpQmUuvupAY2g9/MfSuMQ4CevgZas9r+67O4qIvyqREFSnCcLx gw0RZMRG8nkX6Ui/4nWBgCuCyFDNwZPqwRgEPEPig0VZo8IcPg/Skjko6ishyeHbs2TTY0+/RAE sW0kRgEzmx5Anqv6Um96ulTNG+yEwulOzJVCo3B1t8P1mX2Bt4+jvf3exqG0PpNsvloHxygscti w5JlcWM7ik6AGLflcrNqdaEUgvzyPFu5puAQxERoPzavujIhrbsg8TQVcdJXvDLunL+a9c91qEQ Tdt/nWwMwc7g9Werbe4bwa3khbkdZxS6PPq+0H2rkXliCESIM0aKpHN+rTwgVhDb2fMBg6WIBQV RUIaHUQGHRNzMYotexwDYeDfW3YbK8Gv9BFr1jatX3g== X-Google-Smtp-Source: AGHT+IE2xX+5q3QLWUczI7JtChS+3j5Z/I15mSSIt/VFnctqFMoYNA5Mvf7xTmrSibK16r0UTRNvLsajsS3B X-Received: by 2002:a05:693c:40cf:b0:2ab:ca55:8940 with SMTP id 5a478bee46e88-2ac3013640bmr5765988eec.7.1765949713248; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 5a478bee46e88-2ae4f055014sm417501eec.12.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id C11473420C0; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id BE89AE41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 12/20] ublk: implement integrity user copy Date: Tue, 16 Dec 2025 22:34:46 -0700 Message-ID: <20251217053455.281509-13-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Stanley Zhang Add a function ublk_copy_user_integrity() to copy integrity information between a request and a user iov_iter. This mirrors the existing ublk_copy_user_pages() but operates on request integrity data instead of regular data. Check UBLKSRV_IO_INTEGRITY_FLAG in iocb->ki_pos in ublk_user_copy() to choose between copying data or integrity data. Signed-off-by: Stanley Zhang [csander: change offset units from data bytes to integrity data bytes, test UBLKSRV_IO_INTEGRITY_FLAG after subtracting UBLKSRV_IO_BUF_OFFSET, fix CONFIG_BLK_DEV_INTEGRITY=3Dn build, rebase on ublk user copy refactor] Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 7fa0a9f0bfae..042df4de9253 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -606,10 +606,15 @@ static inline unsigned ublk_pos_to_tag(loff_t pos) { return ((pos - UBLKSRV_IO_BUF_OFFSET) >> UBLK_TAG_OFF) & UBLK_TAG_BITS_MASK; } =20 +static inline bool ublk_pos_is_integrity(loff_t pos) +{ + return !!((pos - UBLKSRV_IO_BUF_OFFSET) & UBLKSRV_IO_INTEGRITY_FLAG); +} + static void ublk_dev_param_basic_apply(struct ublk_device *ub) { const struct ublk_param_basic *p =3D &ub->params.basic; =20 if (p->attrs & UBLK_ATTR_READ_ONLY) @@ -1034,10 +1039,31 @@ static size_t ublk_copy_user_pages(const struct req= uest *req, break; } return done; } =20 +static size_t ublk_copy_user_integrity(const struct request *req, + unsigned offset, struct iov_iter *uiter, int dir) +{ + size_t done =3D 0; +#ifdef CONFIG_BLK_DEV_INTEGRITY + struct bio *bio =3D req->bio; + struct bvec_iter iter; + struct bio_vec iv; + + if (!blk_integrity_rq(req)) + return 0; + + bio_for_each_integrity_vec(iv, bio, iter) { + if (!ublk_copy_user_bvec(iv, &offset, uiter, dir, &done)) + break; + } +#endif + + return done; +} + static inline bool ublk_need_map_req(const struct request *req) { return ublk_rq_has_data(req) && req_op(req) =3D=3D REQ_OP_WRITE; } =20 @@ -2616,10 +2642,12 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) { struct ublk_device *ub =3D iocb->ki_filp->private_data; struct ublk_queue *ubq; struct request *req; struct ublk_io *io; + unsigned data_len; + bool is_integrity; size_t buf_off; u16 tag, q_id; ssize_t ret; =20 if (!user_backed_iter(iter)) @@ -2629,10 +2657,11 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) return -EACCES; =20 tag =3D ublk_pos_to_tag(iocb->ki_pos); q_id =3D ublk_pos_to_hwq(iocb->ki_pos); buf_off =3D ublk_pos_to_buf_off(iocb->ki_pos); + is_integrity =3D ublk_pos_is_integrity(iocb->ki_pos); =20 if (q_id >=3D ub->dev_info.nr_hw_queues) return -EINVAL; =20 ubq =3D ublk_get_queue(ub, q_id); @@ -2645,21 +2674,31 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) io =3D &ubq->ios[tag]; req =3D __ublk_check_and_get_req(ub, q_id, tag, io); if (!req) return -EINVAL; =20 - if (buf_off > blk_rq_bytes(req)) { + if (is_integrity) { + struct blk_integrity *bi =3D &req->q->limits.integrity; + + data_len =3D bio_integrity_bytes(bi, blk_rq_sectors(req)); + } else { + data_len =3D blk_rq_bytes(req); + } + if (buf_off > data_len) { ret =3D -EINVAL; goto out; } =20 if (!ublk_check_ubuf_dir(req, dir)) { ret =3D -EACCES; goto out; } =20 - ret =3D ublk_copy_user_pages(req, buf_off, iter, dir); + if (is_integrity) + ret =3D ublk_copy_user_integrity(req, buf_off, iter, dir); + else + ret =3D ublk_copy_user_pages(req, buf_off, iter, dir); =20 out: ublk_put_req_ref(io, req); return ret; } --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-oa1-f97.google.com (mail-oa1-f97.google.com [209.85.160.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E11F4288CA6 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; cv=none; b=QN3et+cNGdcYtqIEDH+2PjUCODC1fF0MaRCnI3b42Olpy0u76GN1/+h5vI3uIOJF/JVXdfhXQy/mOiJKDSPZ+9PMpaID6pns3oQETqVJuZ3Epe98w1z34oxReU74EI6m2B0k3qXSLA+8rba6QS9OsSWrd5bccamiX2FgR73SyGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; c=relaxed/simple; bh=gCDcxrwsQIo9Zl4D9+H5tFsOAIyHBgcO/hwZeW+CHUU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CdjiY/q5+2PEz3voOFGKeB3hn1KMOl9oUEDHkOKVj07z+3z4E62qI+g9O+evlJZGrKEOWgc36XdhYJ4/WiKIEm6nFkr225EcePOkH75ON+T2kdriDjTrPQvPMTrIRGsPZCwZfRT0+oEimciyB+31fmNgeWf+O3mx6CLebm/BZHE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=KPEueBWg; arc=none smtp.client-ip=209.85.160.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="KPEueBWg" Received: by mail-oa1-f97.google.com with SMTP id 586e51a60fabf-3f9fb53bea4so30379fac.0 for ; Tue, 16 Dec 2025 21:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=2OvJx7AxTUJ0pacBHpfR4EB7axuem5OmBv1tntyjd18=; b=KPEueBWgGwFpRBHMsmlxq+17449raT7ttquKsRKjNsssQxetX3ulLY7866k/dwShWw 5Tm9ENFk/TOFJwhRLAGay1NBoN8m+tD51thMeLoC1WbUG8U957EzPYrqQiBSmGoDbO6s nR4Og2Qz+z03peiVFERzOfjBW2bXcCjrjEvOdibugyDL1iRNQlosBPXhAGGKQa7ilDev /GX1stlQj2fxDySShZUcxHPI5bgxFRlr7QrNewYs4SPBT2857m1bhsZI6AD38KO1X5Lt 6Y+FQa1fv3IUITOKmWt9FNlGYSj83JBRTdg+j+ddPCUDG/HqlRiWk5T8gr6iHmOBobrZ vAIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=2OvJx7AxTUJ0pacBHpfR4EB7axuem5OmBv1tntyjd18=; b=aHbdLpyeermKJpzHTUsAdsGb3hsYKe1AQCg5Zn/aRURkjcA9sn+1+6jCrbTtk4BT+E cBHqFqbEQ8s6H4c9+PKND2zxsWizuVocR/qMhvSLdglst/bSozkSUoT3c2kit2xdt/5V 0uWsOZy6dso5qrpBHW/7f2wrp26Pf5hF6dBvJAPdk2wEtXKUuyJlxTC1lMLL4MRs6xD/ XAxmat14+TZjHcjTm0KqjFFmlAaTIRK5JrgWPhfOC3mm5PcJcoM+YNRMXsnKonz3ff8q h5qKtsdyR7bgQnrmtfYD9PDPiFPxGBz720K0myagCOIVFLPf7WY6O9iOsUR35nTgoV49 N6Kg== X-Forwarded-Encrypted: i=1; AJvYcCV3eByilXRGWqOvR08srZom7d8iT1gYWwIdj2HYOoQpGrpzWUwG5wCvsyobB3x05fiBdhsm544I1nFHMiI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw39fWiDGGQ5koIna70/ua7ZVJvFKz+fupjGINNT2GYYZZTRgaB u3mAL30errei5FgutWgJ7zNYH0b6g7/ntMuCCVyt85oZ8teD5xzcR/ailqJggrfHoykCKm7K40p qJvTDaVU38vOzY7wHS3ggV3peCMaUw3mGKt9EVA28Nm5QNpgTLwNK X-Gm-Gg: AY/fxX4pIanBjkGEzS7ke8Qnoy2WeCbuRt+xAlG07J3ntqIW1khIVXZObVeoTF1YT7s jgGy0zcuf5R1n9PUUC9E2vsYtJzLe31/IZWKrJXEiYq7/O7wC7p777nCT8ypFHldsSjoc4tuV85 3qJ+zg7iwCwuhEqnkycmg5UMk3k+komUMVkdF/YDKXqmKXlWUuNBbs0YHRTLoHebyjC3QTrE8mI 3oTf1krRWEcoATHUp/hr+L5iSnQ+QH60v1ReM16PVhDt5bb+DgAi0NasMporZ/R0GVilyDwK6t1 xxcOQVVOBL6NAPnsFWlJRLoQhMX/dusTbXhW2Bobeqyl/DzaO5SWGtznnI113vy1GxODEzFXwBj xAEJas8PyvD/B6uRboS++ruAbZaE= X-Google-Smtp-Source: AGHT+IFbG6sbuUMK8Z52DIdwdRmhPJfwF/v7UIPe9gL8Y8b6oOH7po6qZZFyRaDqM7Jnd07PI/nXVcYALu2n X-Received: by 2002:a05:6870:e8e:b0:3ec:3bfe:bda7 with SMTP id 586e51a60fabf-3f5f8a3a5admr7121872fac.1.1765949713810; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-3f614e7dab4sm1520399fac.18.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id E028D3420F0; Tue, 16 Dec 2025 22:35:12 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id DCFA5E41A08; Tue, 16 Dec 2025 22:35:12 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 13/20] ublk: optimize ublk_user_copy() on daemon task Date: Tue, 16 Dec 2025 22:34:47 -0700 Message-ID: <20251217053455.281509-14-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ublk user copy syscalls may be issued from any task, so they take a reference count on the struct ublk_io to check whether it is owned by the ublk server and prevent a concurrent UBLK_IO_COMMIT_AND_FETCH_REQ from completing the request. However, if the user copy syscall is issued on the io's daemon task, a concurrent UBLK_IO_COMMIT_AND_FETCH_REQ isn't possible, so the atomic reference count dance is unnecessary. Check for UBLK_IO_FLAG_OWNED_BY_SRV to ensure the request is dispatched to the sever and obtain the request from ublk_io's req field instead of looking it up on the tagset. Skip the reference count increment and decrement. Commit 8a8fe42d765b ("ublk: optimize UBLK_IO_REGISTER_IO_BUF on daemon task") made an analogous optimization for ublk zero copy buffer registration. Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 042df4de9253..a0fbabd49feb 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -180,11 +180,11 @@ struct ublk_io { /* * The number of uses of this I/O by the ublk server * if user copy or zero copy are enabled: * - UBLK_REFCOUNT_INIT from dispatch to the server * until UBLK_IO_COMMIT_AND_FETCH_REQ - * - 1 for each inflight ublk_ch_{read,write}_iter() call + * - 1 for each inflight ublk_ch_{read,write}_iter() call not on task * - 1 for each io_uring registered buffer not registered on task * The I/O can only be completed once all references are dropped. * User copy and buffer registration operations are only permitted * if the reference count is nonzero. */ @@ -2644,10 +2644,11 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) struct ublk_queue *ubq; struct request *req; struct ublk_io *io; unsigned data_len; bool is_integrity; + bool on_daemon; size_t buf_off; u16 tag, q_id; ssize_t ret; =20 if (!user_backed_iter(iter)) @@ -2670,13 +2671,24 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) =20 if (tag >=3D ub->dev_info.queue_depth) return -EINVAL; =20 io =3D &ubq->ios[tag]; - req =3D __ublk_check_and_get_req(ub, q_id, tag, io); - if (!req) - return -EINVAL; + on_daemon =3D current =3D=3D READ_ONCE(io->task); + if (on_daemon) { + /* On daemon, io can't be completed concurrently, so skip ref */ + if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV)) + return -EINVAL; + + req =3D io->req; + if (!ublk_rq_has_data(req)) + return -EINVAL; + } else { + req =3D __ublk_check_and_get_req(ub, q_id, tag, io); + if (!req) + return -EINVAL; + } =20 if (is_integrity) { struct blk_integrity *bi =3D &req->q->limits.integrity; =20 data_len =3D bio_integrity_bytes(bi, blk_rq_sectors(req)); @@ -2697,11 +2709,12 @@ ublk_user_copy(struct kiocb *iocb, struct iov_iter = *iter, int dir) ret =3D ublk_copy_user_integrity(req, buf_off, iter, dir); else ret =3D ublk_copy_user_pages(req, buf_off, iter, dir); =20 out: - ublk_put_req_ref(io, req); + if (!on_daemon) + ublk_put_req_ref(io, req); return ret; } =20 static ssize_t ublk_ch_read_iter(struct kiocb *iocb, struct iov_iter *to) { --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-ot1-f99.google.com (mail-ot1-f99.google.com [209.85.210.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DA57283FEF for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949723; cv=none; b=OdxlNtLIQPwEGQ1QtTPMqnNDJDPONf8MhE/r2U+nmi6RUg1QAyzm14f4q47atSqDRHaq8Dpia0Qq+x+WKCHve1g+Ag+bcnW6eGrGoL/3z8OAHq740pZdZT4X4gBAhlfQ4Kju0EoJdJuHf7v5YXCe35vNLRf4C638zBH3QM8vnaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949723; c=relaxed/simple; bh=/9oWm8ceEqAfsBsRYIxRgDxZg5GCtOB+F+ShDr0LW3Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CC6cv6BnBHKYa5vPqI3ik3RSqx/jIzGQ1Q/oJeZab8JgLsNdS/ONQRTPL59mbA2KZ+MwUhFFxVSEp2jzdCSUDbf3jkLjCnKquQyKYSwawENRtkzseGfDScJBAf+Zf8CsOUAKIzS6xu3R8s59PCNI905dXP0GVPAwWM+aO7G7064= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=VJCQn6ag; arc=none smtp.client-ip=209.85.210.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="VJCQn6ag" Received: by mail-ot1-f99.google.com with SMTP id 46e09a7af769-7c7589281e9so975217a34.1 for ; Tue, 16 Dec 2025 21:35:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=eXZxkMGXAND9SSH5kAPkz2RMm8mE6lzClGRP/OAbhxk=; b=VJCQn6agCcXKaI+LUIjJ4n+k6Eo0cWNzp/wrQtzqjxyVdSwdzLrDdfZXEIEkM7+ixM 4nyI7oIDvSh2VmvDvhkhUWst9jnfWW7BLPIa3TPVjiEvabKToGYPJ/e7yfp6e1Fj3gX4 Idr4t/dQG5pPZ3fKXiKx4c5/cOkQa74OiR5n14ZzUxqITGSnzWr9nC8EwfOcG8ZZ+Z+9 ot2dFA3eh55snxbbb/6k0hptYjnJy/RBCSZgBC5RzKFVXSsVogh7uJgygccNvlvPxp3/ D8GmOvbhzRwD/tRYCNMrkA+gxMB9MSh4co8HKsF/sAy14RYzZDvKQK91fALRPAAL6g4s wkMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=eXZxkMGXAND9SSH5kAPkz2RMm8mE6lzClGRP/OAbhxk=; b=oHTFYJTZ9y3Xos83lMh35oxxw1apSz0VnqQNUNvW8PrxQ2GJ6LOOhagk9uo2W9JxEh vzANGKq/rJ9M+3/EjZSaSH6rcCIcAPOuDE0nKmuFPsdijBkCLKsbnfCIdQS4RnVthh6B zBcLdNzd2nvm+wRUVt6znQeWpDjWVVlIX2KzBbvksYpTM2D2m6B2yjszZhp+KWO6EY60 oGSUzKTrElvRswySCL6BBCBdX4ia0cz6DQ01BDzES76U38pXii+64pOFSZIl3jKJfBxz s38yWCDMtWeSLNPDUOV/TmsB56yIbi1wSJUfhXw9XQ7MSJUedjzK3g+i1AHmKFBDqX4N DUdA== X-Forwarded-Encrypted: i=1; AJvYcCXWWXIJhBc7nunkzhERdfzyTFPRt/p6iW2pD7E6rqgCon9/m7objC1UyBihVZW797YCGEL7VuRGw+Wp0hs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0QOUitQHOPAU/5qizaSa24lVMtjOxL2zbXDx7uZkrRRj/CJcq wYPCahCtWE46keU8M8Ew1dHcf0pqx307Vgp3nxJVFTxjqBAD3uIgsIl/Owwd3AbbD3eJwHpPuRj JomWAeN32j7jFBHxGGPa1tnMJAZ5UE8aC9KUs X-Gm-Gg: AY/fxX5dYNvUTzfTq7QVmf88JQIfsBWPmLOqyrSj+tQhl9HslGKiAQBI/ANmCM290Bj iM3MAoR49v0+uSDcyfWr96jHZ0yIkxYuYdw04kcQA5OnaSpJiam0RDC0LEBBDb24xHogkPb5ZQY w9rF+aT9kR7WevKNo0tg26gtvRq6ozdHjO0pNaSOuMAuzZNzaqCqAbRFwsWyseDJ5kiHjabCxDr 1HbEhVdFuWaTUcfmhtMvA8KTaqyRVo+L5i4Fk3x7V1XcurOyNjgG7owvAOzjD4wH9eWzmWNTZFZ GG4hFSBTq7DzyaLwqm6cXAD2SeaYqq7jXK/MgIEyl8HMN5npHqpQsrv4odFcQLfIRuvW8aXOxW8 6Rk51At1wd5E9s3gOF6M5fD9ZPXjSyEnRAd0F0tUqVw== X-Google-Smtp-Source: AGHT+IHXjysvU040YFqXFjQ9lictL0w/Wiouu+uAIOKK3LSVq7ies8MkHYN1VQATthOXjraDEMCDPEeJjZXq X-Received: by 2002:a05:6830:2685:b0:7c9:594f:2d1d with SMTP id 46e09a7af769-7cae8362350mr8864025a34.3.1765949713977; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id 46e09a7af769-7cadb33121dsm2862394a34.8.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 089EA342237; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 06676E41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 14/20] selftests: ublk: add utility to get block device metadata size Date: Tue, 16 Dec 2025 22:34:48 -0700 Message-ID: <20251217053455.281509-15-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some block device integrity parameters are available in sysfs, but others are only accessible using the FS_IOC_GETLBMD_CAP ioctl. Add a metadata_size utility program to print out the logical block metadata size, PI offset, and PI size within the metadata. Example output: $ metadata_size /dev/ublkb0 metadata_size: 64 pi_offset: 56 pi_tuple_size: 8 Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/Makefile | 4 +-- tools/testing/selftests/ublk/metadata_size.c | 36 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tools/testing/selftests/ublk/metadata_size.c diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftest= s/ublk/Makefile index 837977b62417..0f6abb95c87a 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -46,14 +46,14 @@ TEST_PROGS +=3D test_stress_03.sh TEST_PROGS +=3D test_stress_04.sh TEST_PROGS +=3D test_stress_05.sh TEST_PROGS +=3D test_stress_06.sh TEST_PROGS +=3D test_stress_07.sh =20 -TEST_GEN_PROGS_EXTENDED =3D kublk +TEST_GEN_PROGS_EXTENDED =3D kublk metadata_size =20 include ../lib.mk =20 -$(TEST_GEN_PROGS_EXTENDED): kublk.c null.c file_backed.c common.c stripe.c= \ +$(OUTPUT)/kublk: kublk.c null.c file_backed.c common.c stripe.c \ fault_inject.c =20 check: shellcheck -x -f gcc *.sh diff --git a/tools/testing/selftests/ublk/metadata_size.c b/tools/testing/s= elftests/ublk/metadata_size.c new file mode 100644 index 000000000000..76ecddf04d25 --- /dev/null +++ b/tools/testing/selftests/ublk/metadata_size.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + struct logical_block_metadata_cap cap =3D {}; + const char *filename; + int fd; + int result; + + if (argc !=3D 2) { + fprintf(stderr, "Usage: %s BLOCK_DEVICE\n", argv[0]); + return 1; + } + + filename =3D argv[1]; + fd =3D open(filename, O_RDONLY); + if (fd < 0) { + perror(filename); + return 1; + } + + result =3D ioctl(fd, FS_IOC_GETLBMD_CAP, &cap); + if (result < 0) { + perror("ioctl"); + return 1; + } + + printf("metadata_size: %u\n", cap.lbmd_size); + printf("pi_offset: %u\n", cap.lbmd_pi_offset); + printf("pi_tuple_size: %u\n", cap.lbmd_pi_size); + return 0; +} --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-qv1-f97.google.com (mail-qv1-f97.google.com [209.85.219.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11AAA2773D8 for ; Wed, 17 Dec 2025 05:35:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949724; cv=none; b=qQ630M2f+XAJJT6P1e2kmFTnOK/BXCuncUHUJD/K4cfl9YYPgsWD3p5Q6pdXmnQNHgM+eX8R9pJwgyRxAHX1T/AtpSIrr2bGAcT/QBuSaMpvJy6Y4NcYloRllgmkSvDmXoNPo20NqBDChihrbAeml4RoVuyZl8LoXF4MPuvJrOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949724; c=relaxed/simple; bh=F2YA9J7kvPe4E9oFSFW6GvS4Z+ZBhkmjxqsgWcqaulc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LobgtCcdf2CxBJjY4/lcB1EBxUH9xZ64odR3JirGmR134ypdKpqooZKG3AUhfMCuoHrZdjF57xs7MJlTcH7jHDhi5ESwUdNIC6QcSpIrkkuIXK3qiqORvPMtYhm6yeZSOV/bFNKoFRakg26ECffPcHHHS6jMwkNcKfhaRW/PMhk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=ckoZT62C; arc=none smtp.client-ip=209.85.219.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="ckoZT62C" Received: by mail-qv1-f97.google.com with SMTP id 6a1803df08f44-88a390056e1so1074976d6.0 for ; Tue, 16 Dec 2025 21:35:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=UWSWrSXKkDNu/tYQwDsjXq4BKtHb+jfeRIxJwmQpDds=; b=ckoZT62C5imhl1JpfIfwNsao/dUS3zzswwZM62pRgRpegbnnJ4Jm76lcLK3xeFCzNh lXH0dCvjLkvOz4VR41iNp6uSENI3d4KdqQkFayHWE26nn7YZuZCisScRhhFaxF7IKJzG dBR+xHnDwmIgRqyAmstgQfy1cevkMIzmivnQrkoShG992F63E1UrYNS+Gjw51fT9CQPT WtgWzDLezCFQKPdwtolT6J9Eq/R9nzICAQC2saOuHVGrQa3TGHNrjplQ3YUsiRZs8+c2 4dYjioSYUigawZBXHPy9csusVZgW+6QRxR/3iC0hZgHIGBSLyWfn/kVEXzfHzNM31WmV cJtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=UWSWrSXKkDNu/tYQwDsjXq4BKtHb+jfeRIxJwmQpDds=; b=Q3H9vS6qutQPpeCQFrmX10GcxyL6lsKFtcIIwp0h/qgkigc458+tR81Ly+bHh+ygB7 CSoB0W7iioT3skjLtZ9FaUr0TZUFb/8bVwAXqs1OGMq9cg4GcA0mhfhAQaVlwn7hUC2h qYkNbMedexW1GQo0r5kmwcrtf87kN36xnyVLdVb7kDTRDuQh11vyljJR52tyDRPfzaty L1zt9WbVL3bZcKssN/18AZcUFMzQ5jW3D5ksim0SOyEFX2DfEPWQnB8VtMAnBgmcIE2n 637ijiJpGTK23IKuibu8/ZSGVgxmtVSM8/YdZIFYG66bZPAsz2NtnrEJAzqgcgyH5K0L MX6Q== X-Forwarded-Encrypted: i=1; AJvYcCWWSq9vQ8+krlaRHeKSkVYyD4OwOjy/wWdSYbZhEqw2odJLlsROrg7pDZkZENs/o3S8/W8MA7P0YGNWozY=@vger.kernel.org X-Gm-Message-State: AOJu0YwPkKCPGJFcpMuvY/9qkxlO9SrndDPMQif+K4xu2W0PgPh0XjFd Mgej/QqJ0ObJt/NK4QhEkpvBO90GIBVa5b5akF0QUcfyJSyGwBiQ0d+RT2S+9zj0qwy3OmoGTuz Q9KlaAGvSB5ABttWUd0iV1EYs8cwyd4a5nvVyaPgk6SobBntIt6PR X-Gm-Gg: AY/fxX4+r5sqFiLLp8sC7fupvYplRP5aKs/3AuqLoSPvscfT3WOHjrbQAf3H8gMtbuv Q/t81VIIiwMFFAsmZFuPsJXxAcAk2zVvJzV1OQbzgV6J6oSBHRDtQJtSXF67MTwu1BtwlTPMP8R 06pV/ym0sQeUI7OJaN1K+4TUehlKwM9Kr7t0d19CW0I6++DQRghCIsph/YqnUALeCD1/InXCDOK 72uzqoDlVNkiswoJJeyDmd9SroyFk56aZj3lKv9iapC7WlUTNtLJU/3OC7rehadFYtqUq+NKtsn E+Rz7W4SB361avVIlkrCUo+GUoksgUc26mCxouaAnHEATj2eWYpRQEkISBW47xLHHiuQ++Qsd4P K22JAKn1AnfXHZSupz6peYDv0wh8= X-Google-Smtp-Source: AGHT+IF6N23Mpr6lZoIb0Wx4GWzJ8U4AfU5lbCGIzFBNYvixWrE0mTyk2S4zPw+vQE7GQ5HV8VNP6GCqzM4m X-Received: by 2002:ad4:5bcf:0:b0:880:5222:358 with SMTP id 6a1803df08f44-8887ddc3d4fmr219746936d6.0.1765949714278; Tue, 16 Dec 2025 21:35:14 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-88a525a8f2csm2530076d6.14.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:14 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 2A6DE34225F; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 256BDE41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 15/20] selftests: ublk: add kublk support for integrity params Date: Tue, 16 Dec 2025 22:34:49 -0700 Message-ID: <20251217053455.281509-16-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add integrity param command line arguments to kublk. Plumb these to struct ublk_params for the null and fault_inject targets, as they don't need to actually read or write the integrity data. Forbid the integrity params for loop or stripe until the integrity data copy is implemented. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/fault_inject.c | 1 + tools/testing/selftests/ublk/file_backed.c | 4 ++ tools/testing/selftests/ublk/kublk.c | 44 +++++++++++++++++++++ tools/testing/selftests/ublk/kublk.h | 21 ++++++++++ tools/testing/selftests/ublk/null.c | 1 + tools/testing/selftests/ublk/stripe.c | 4 ++ 6 files changed, 75 insertions(+) diff --git a/tools/testing/selftests/ublk/fault_inject.c b/tools/testing/se= lftests/ublk/fault_inject.c index b227bd78b252..3b897f69c014 100644 --- a/tools/testing/selftests/ublk/fault_inject.c +++ b/tools/testing/selftests/ublk/fault_inject.c @@ -31,10 +31,11 @@ static int ublk_fault_inject_tgt_init(const struct dev_= ctx *ctx, .io_min_shift =3D 9, .max_sectors =3D info->max_io_buf_bytes >> 9, .dev_sectors =3D dev_size >> 9, }, }; + ublk_set_integrity_params(ctx, &dev->tgt.params); =20 dev->private_data =3D (void *)(unsigned long)(ctx->fault_inject.delay_us = * 1000); return 0; } =20 diff --git a/tools/testing/selftests/ublk/file_backed.c b/tools/testing/sel= ftests/ublk/file_backed.c index 269d5f124e06..c14ce6608696 100644 --- a/tools/testing/selftests/ublk/file_backed.c +++ b/tools/testing/selftests/ublk/file_backed.c @@ -156,10 +156,14 @@ static int ublk_loop_tgt_init(const struct dev_ctx *c= tx, struct ublk_dev *dev) =20 if (ctx->auto_zc_fallback) { ublk_err("%s: not support auto_zc_fallback\n", __func__); return -EINVAL; } + if (ctx->metadata_size) { + ublk_err("%s: integrity not supported\n", __func__); + return -EINVAL; + } =20 ret =3D backing_file_tgt_init(dev); if (ret) return ret; =20 diff --git a/tools/testing/selftests/ublk/kublk.c b/tools/testing/selftests= /ublk/kublk.c index 185ba553686a..cf58d3b60ace 100644 --- a/tools/testing/selftests/ublk/kublk.c +++ b/tools/testing/selftests/ublk/kublk.c @@ -1,10 +1,11 @@ /* SPDX-License-Identifier: MIT */ /* * Description: uring_cmd based ublk */ =20 +#include #include "kublk.h" =20 #define MAX_NR_TGT_ARG 64 =20 unsigned int ublk_dbg_mask =3D UBLK_LOG; @@ -1547,10 +1548,12 @@ static void __cmd_create_help(char *exe, bool recov= ery) printf("%s %s -t [null|loop|stripe|fault_inject] [-q nr_queues] [-d depth= ] [-n dev_id]\n", exe, recovery ? "recover" : "add"); printf("\t[--foreground] [--quiet] [-z] [--auto_zc] [--auto_zc_fallback] = [--debug_mask mask] [-r 0|1] [-g] [-u]\n"); printf("\t[-e 0|1 ] [-i 0|1] [--no_ublk_fixed_fd]\n"); printf("\t[--nthreads threads] [--per_io_tasks]\n"); + printf("\t[--integrity_capable] [--integrity_reftag] [--metadata_size SIZ= E] " + "[--pi_offset OFFSET] [--csum_type ip|t10dif|nvme] [--tag_size SIZE]\n"= ); printf("\t[target options] [backfile1] [backfile2] ...\n"); printf("\tdefault: nr_queues=3D2(max 32), depth=3D128(max 1024), dev_id= =3D-1(auto allocation)\n"); printf("\tdefault: nthreads=3Dnr_queues"); =20 for (i =3D 0; i < ARRAY_SIZE(tgt_ops_list); i++) { @@ -1610,20 +1613,27 @@ int main(int argc, char *argv[]) { "user_copy", 0, NULL, 'u'}, { "size", 1, NULL, 's'}, { "nthreads", 1, NULL, 0 }, { "per_io_tasks", 0, NULL, 0 }, { "no_ublk_fixed_fd", 0, NULL, 0 }, + { "integrity_capable", 0, NULL, 0 }, + { "integrity_reftag", 0, NULL, 0 }, + { "metadata_size", 1, NULL, 0 }, + { "pi_offset", 1, NULL, 0 }, + { "csum_type", 1, NULL, 0 }, + { "tag_size", 1, NULL, 0 }, { 0, 0, 0, 0 } }; const struct ublk_tgt_ops *ops =3D NULL; int option_idx, opt; const char *cmd =3D argv[1]; struct dev_ctx ctx =3D { .queue_depth =3D 128, .nr_hw_queues =3D 2, .dev_id =3D -1, .tgt_type =3D "unknown", + .csum_type =3D LBMD_PI_CSUM_NONE, }; int ret =3D -EINVAL, i; int tgt_argc =3D 1; char *tgt_argv[MAX_NR_TGT_ARG] =3D { NULL }; int value; @@ -1694,10 +1704,32 @@ int main(int argc, char *argv[]) ctx.nthreads =3D strtol(optarg, NULL, 10); if (!strcmp(longopts[option_idx].name, "per_io_tasks")) ctx.per_io_tasks =3D 1; if (!strcmp(longopts[option_idx].name, "no_ublk_fixed_fd")) ctx.no_ublk_fixed_fd =3D 1; + if (!strcmp(longopts[option_idx].name, "integrity_capable")) + ctx.integrity_flags |=3D LBMD_PI_CAP_INTEGRITY; + if (!strcmp(longopts[option_idx].name, "integrity_reftag")) + ctx.integrity_flags |=3D LBMD_PI_CAP_REFTAG; + if (!strcmp(longopts[option_idx].name, "metadata_size")) + ctx.metadata_size =3D strtoul(optarg, NULL, 0); + if (!strcmp(longopts[option_idx].name, "pi_offset")) + ctx.pi_offset =3D strtoul(optarg, NULL, 0); + if (!strcmp(longopts[option_idx].name, "csum_type")) { + if (!strcmp(optarg, "ip")) { + ctx.csum_type =3D LBMD_PI_CSUM_IP; + } else if (!strcmp(optarg, "t10dif")) { + ctx.csum_type =3D LBMD_PI_CSUM_CRC16_T10DIF; + } else if (!strcmp(optarg, "nvme")) { + ctx.csum_type =3D LBMD_PI_CSUM_CRC64_NVME; + } else { + ublk_err("invalid csum_type: %s\n", optarg); + return -EINVAL; + } + } + if (!strcmp(longopts[option_idx].name, "tag_size")) + ctx.tag_size =3D strtoul(optarg, NULL, 0); break; case '?': /* * target requires every option must have argument */ @@ -1736,10 +1768,22 @@ int main(int argc, char *argv[]) ctx.auto_zc_fallback > 1) { fprintf(stderr, "too many data copy modes specified\n"); return -EINVAL; } =20 + if (!ctx.metadata_size && (ctx.integrity_flags || + ctx.pi_offset || + ctx.csum_type !=3D LBMD_PI_CSUM_NONE || + ctx.tag_size)) { + ublk_err("integrity parameters require metadata_size\n"); + return -EINVAL; + } + if (ctx.metadata_size && !(ctx.flags & UBLK_F_USER_COPY)) { + ublk_err("integrity requires user_copy\n"); + return -EINVAL; + } + i =3D optind; while (i < argc && ctx.nr_files < MAX_BACK_FILES) { ctx.files[ctx.nr_files++] =3D argv[i++]; } =20 diff --git a/tools/testing/selftests/ublk/kublk.h b/tools/testing/selftests= /ublk/kublk.h index 8a83b90ec603..d00f2b465cdf 100644 --- a/tools/testing/selftests/ublk/kublk.h +++ b/tools/testing/selftests/ublk/kublk.h @@ -76,10 +76,15 @@ struct dev_ctx { unsigned int fg:1; unsigned int recovery:1; unsigned int auto_zc_fallback:1; unsigned int per_io_tasks:1; unsigned int no_ublk_fixed_fd:1; + __u32 integrity_flags; + __u8 metadata_size; + __u8 pi_offset; + __u8 csum_type; + __u8 tag_size; =20 int _evtfd; int _shmid; =20 /* built from shmem, only for ublk_dump_dev() */ @@ -200,10 +205,26 @@ struct ublk_dev { void *private_data; }; =20 extern int ublk_queue_io_cmd(struct ublk_thread *t, struct ublk_io *io); =20 +static inline void ublk_set_integrity_params(const struct dev_ctx *ctx, + struct ublk_params *params) +{ + if (!ctx->metadata_size) + return; + + params->types |=3D UBLK_PARAM_TYPE_INTEGRITY; + params->integrity =3D (struct ublk_param_integrity) { + .flags =3D ctx->integrity_flags, + .interval_exp =3D params->basic.logical_bs_shift, + .metadata_size =3D ctx->metadata_size, + .pi_offset =3D ctx->pi_offset, + .csum_type =3D ctx->csum_type, + .tag_size =3D ctx->tag_size, + }; +} =20 static inline int ublk_io_auto_zc_fallback(const struct ublksrv_io_desc *i= od) { return !!(iod->op_flags & UBLK_IO_F_NEED_REG_BUF); } diff --git a/tools/testing/selftests/ublk/null.c b/tools/testing/selftests/= ublk/null.c index 280043f6b689..3aa162f08476 100644 --- a/tools/testing/selftests/ublk/null.c +++ b/tools/testing/selftests/ublk/null.c @@ -34,10 +34,11 @@ static int ublk_null_tgt_init(const struct dev_ctx *ctx= , struct ublk_dev *dev) .seg_boundary_mask =3D 4095, .max_segment_size =3D 32 << 10, .max_segments =3D 32, }, }; + ublk_set_integrity_params(ctx, &dev->tgt.params); =20 if (info->flags & UBLK_F_SUPPORT_ZERO_COPY) dev->tgt.sq_depth =3D dev->tgt.cq_depth =3D 2 * info->queue_depth; return 0; } diff --git a/tools/testing/selftests/ublk/stripe.c b/tools/testing/selftest= s/ublk/stripe.c index fd412e1f01c0..d4aaf3351d71 100644 --- a/tools/testing/selftests/ublk/stripe.c +++ b/tools/testing/selftests/ublk/stripe.c @@ -296,10 +296,14 @@ static int ublk_stripe_tgt_init(const struct dev_ctx = *ctx, struct ublk_dev *dev) =20 if (ctx->auto_zc_fallback) { ublk_err("%s: not support auto_zc_fallback\n", __func__); return -EINVAL; } + if (ctx->metadata_size) { + ublk_err("%s: integrity not supported\n", __func__); + return -EINVAL; + } =20 if ((chunk_size & (chunk_size - 1)) || !chunk_size) { ublk_err("invalid chunk size %u\n", chunk_size); return -EINVAL; } --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pj1-f100.google.com (mail-pj1-f100.google.com [209.85.216.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B9AA1FF7C7 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; cv=none; b=T1R4I74mDUvs6PA0J4CC4KjxCfuKuzc5fZyKVS5sKK+7YshYQfBqOl6xKGT79noMxvsZNi3aGuMCmjQfhFbi529Wb1WFjn3Ra3hp1vz8k51MDXvrwUs/ZmkUWkYDHP5JQD+gFXRb5dqma9FoMKw8/3L71DzHrmxEx4PTxfOhTZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; c=relaxed/simple; bh=QYvJIqKQumt8IfNUlGMFrE3ehe8qSD246lkZ1mH3XeI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Bs8mrwRo6rePa86FZKEjJa8obxou3L2XDwSPv2wKyRcNlC0ZIHAn/WMDdARGUudOYysvFV2E4OxS5LocwQIqPcYsvAtaw5Etv/BQUuJ3gRkwdYm1TZkz2hW2CZGurgTM0nppcOuyEoDTQ/NhpCdfUCYMU+fPBbDAZEp5nzbXMxY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=IlgTXx2p; arc=none smtp.client-ip=209.85.216.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="IlgTXx2p" Received: by mail-pj1-f100.google.com with SMTP id 98e67ed59e1d1-34c27ea32a3so385633a91.2 for ; Tue, 16 Dec 2025 21:35:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=BkZMs1mdCQoeDbmGUZO0BOuHaVJQ2pa1P9n9bwg3xLI=; b=IlgTXx2pT1nJrJBX0JuYDd0KfTQteJ7TP+NfSsy/ESars3P0SU4LLZkv1FO2Sa45D3 T9UtIHkWxNL/0pI/TIqpqRczFgf9oSB3AEeUknNLGcvX5MxZnuB2Otwz3ZigaykA9zKg dFS+EEqJnlB3Vy8qsspzRK5Zl+e/H5ksTybY5d1WX7LsIfnBaKG1NRPdDc0lE56aUqbW iyhHL5vJGNxo6Tk7AwLDCMugCe9cIeRTCT6xBXH1TvbmP0zIr69kNdwDfoHlIgAEG3C5 Dej92RsV1UA3cMdWzuDFfj+FSlhCHa3oVxmta0B5jK/KSPygTgHsao5BXjAT/upLpVqI c6Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=BkZMs1mdCQoeDbmGUZO0BOuHaVJQ2pa1P9n9bwg3xLI=; b=nDxSTN5vOIkbMz9LuWYFcpSaD60pAMp12a8VNsAwREfUqG0zcudnbASl0VU0Fd3Ut5 71JJrnJjgnkUT85OcQwsB8PgR895yStG8ywYg7VwtpXU2rLAr51haC8d9F1y6RzGZ0GO kq91HWXRDrNO9ES5nxtECiI7a3xTBs9CYfs3womdeODmkfxa4eBK1lI14JHqHsvjAIId +HEuCgX/VBo7/HLid2Rl2T6wc3JBNYJh8te582iVnLGRo1Bdw0olOBke10MH56YmJqpI HbZhkdLcr/fVnF+bCmkweznIs0faJ2pYVV8f3P6ieuw1ecP99DuQDLZb56DrzjHx6zBr /IuA== X-Forwarded-Encrypted: i=1; AJvYcCXs4nUPMWlmq8KLDpI7Mg6fux7XqFBwoYNH3P0WGsslTuTUYsXhY9DMekn+TQweAHnnLWQtIQTuENDbTns=@vger.kernel.org X-Gm-Message-State: AOJu0YwwaNumCcp5KMLHjr0vds3W2B117xLjdqlDlJxGbdQfOqtBjXiI sOIrrHCDxxk+pbp/uzm1/8EFDbGEzrAWO/ORXPMIqH4Jp02+KFGd78lxPJM/bda2Uflzdn/nHex x2yyEyltH/m7z69KJGPTjXSgokwEenbBJPP+5 X-Gm-Gg: AY/fxX47Yt4UvdySiOFZPPIfEgMNC8tBvCOlvLC2jTYzXB8NgEdy30GZZTsTJBSqMoe /wd9GaORphIixBYACvaWwMSn/Bo9/RrFxzIICvNvsxyNs+f8gzYXe9dhDH0n+WHCiBacbYTbatM PYTMqPd2UN+NTRVP87S2cLkCbFxkbCZMnNHMwx8g4l8H/9GfBajOPokxUPe9UHO5RugWbKLrzYF 49rQnqIq7CBVQrVdx6qdo8cq0UVhqqK+x2tISr1iWGAajUUL1B3PBJgb1C2T7rlu/Sb7P5ziM4E NEvvIFc0EKRxNta7n+3q+hr8qipBbwo8yti+CU4gOJ4B7TtLpjPazck+1joUrkJH1vMcCMgv203 x3ImzHgxugGuYfNISo8UHFDQOVgFGwIUqkujc2ikfVg== X-Google-Smtp-Source: AGHT+IFf3eCE3H35adlG4cypwURDwiWp8Kq8fvpd2S11DVDwpXDLJOrhZXH633pkG1vE1diVe8wO4CztiHo0 X-Received: by 2002:a17:90b:3b50:b0:340:e0f3:8212 with SMTP id 98e67ed59e1d1-34abd90f7a1mr11451532a91.8.1765949713817; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-34cfd70ed09sm240678a91.4.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 4644F34222B; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 43F5AE41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 16/20] selftests: ublk: implement integrity user copy in kublk Date: Tue, 16 Dec 2025 22:34:50 -0700 Message-ID: <20251217053455.281509-17-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If integrity data is enabled for kublk, allocate an integrity buffer for each I/O. Extend ublk_user_copy() to copy the integrity data between the ublk request and the integrity buffer if the ublksrv_io_desc indicates that the request has integrity data. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/kublk.c | 41 ++++++++++++++++++++++++---- tools/testing/selftests/ublk/kublk.h | 14 ++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/ublk/kublk.c b/tools/testing/selftests= /ublk/kublk.c index cf58d3b60ace..a5c0e4ff9e2a 100644 --- a/tools/testing/selftests/ublk/kublk.c +++ b/tools/testing/selftests/ublk/kublk.c @@ -414,12 +414,14 @@ static void ublk_queue_deinit(struct ublk_queue *q) int nr_ios =3D q->q_depth; =20 if (q->io_cmd_buf) munmap(q->io_cmd_buf, ublk_queue_cmd_buf_sz(q)); =20 - for (i =3D 0; i < nr_ios; i++) + for (i =3D 0; i < nr_ios; i++) { free(q->ios[i].buf_addr); + free(q->ios[i].integrity_buf); + } } =20 static void ublk_thread_deinit(struct ublk_thread *t) { io_uring_unregister_buffers(&t->ring); @@ -431,23 +433,25 @@ static void ublk_thread_deinit(struct ublk_thread *t) close(t->ring.ring_fd); t->ring.ring_fd =3D -1; } } =20 -static int ublk_queue_init(struct ublk_queue *q, unsigned long long extra_= flags) +static int ublk_queue_init(struct ublk_queue *q, unsigned long long extra_= flags, + __u8 metadata_size) { struct ublk_dev *dev =3D q->dev; int depth =3D dev->dev_info.queue_depth; int i; - int cmd_buf_size, io_buf_size; + int cmd_buf_size, io_buf_size, integrity_size; unsigned long off; =20 q->tgt_ops =3D dev->tgt.ops; q->flags =3D 0; q->q_depth =3D depth; q->flags =3D dev->dev_info.flags; q->flags |=3D extra_flags; + q->metadata_size =3D metadata_size; =20 /* Cache fd in queue for fast path access */ q->ublk_fd =3D dev->fds[0]; =20 cmd_buf_size =3D ublk_queue_cmd_buf_sz(q); @@ -459,15 +463,27 @@ static int ublk_queue_init(struct ublk_queue *q, unsi= gned long long extra_flags) q->dev->dev_info.dev_id, q->q_id); goto fail; } =20 io_buf_size =3D dev->dev_info.max_io_buf_bytes; + integrity_size =3D ublk_integrity_len(q, io_buf_size); for (i =3D 0; i < q->q_depth; i++) { q->ios[i].buf_addr =3D NULL; q->ios[i].flags =3D UBLKS_IO_NEED_FETCH_RQ | UBLKS_IO_FREE; q->ios[i].tag =3D i; =20 + if (integrity_size) { + q->ios[i].integrity_buf =3D malloc(integrity_size); + if (!q->ios[i].integrity_buf) { + ublk_err("ublk dev %d queue %d io %d malloc(%d) failed: %m\n", + dev->dev_info.dev_id, q->q_id, i, + integrity_size); + goto fail; + } + } + + if (ublk_queue_no_buf(q)) continue; =20 if (posix_memalign((void **)&q->ios[i].buf_addr, getpagesize(), io_buf_size)) { @@ -606,17 +622,17 @@ static void ublk_user_copy(const struct ublk_io *io, = __u8 match_ublk_op) const struct ublksrv_io_desc *iod =3D ublk_get_iod(q, io->tag); __u64 off =3D ublk_user_copy_offset(q->q_id, io->tag); __u8 ublk_op =3D ublksrv_get_op(iod); __u32 len =3D iod->nr_sectors << 9; void *addr =3D io->buf_addr; + ssize_t copied; =20 if (ublk_op !=3D match_ublk_op) return; =20 while (len) { __u32 copy_len =3D min(len, UBLK_USER_COPY_LEN); - ssize_t copied; =20 if (ublk_op =3D=3D UBLK_IO_OP_WRITE) copied =3D pread(q->ublk_fd, addr, copy_len, off); else if (ublk_op =3D=3D UBLK_IO_OP_READ) copied =3D pwrite(q->ublk_fd, addr, copy_len, off); @@ -625,10 +641,24 @@ static void ublk_user_copy(const struct ublk_io *io, = __u8 match_ublk_op) assert(copied =3D=3D (ssize_t)copy_len); addr +=3D copy_len; off +=3D copy_len; len -=3D copy_len; } + + if (!(iod->op_flags & UBLK_IO_F_INTEGRITY)) + return; + + len =3D ublk_integrity_len(q, iod->nr_sectors << 9); + off =3D ublk_user_copy_offset(q->q_id, io->tag); + off +=3D UBLKSRV_IO_INTEGRITY_FLAG; + if (ublk_op =3D=3D UBLK_IO_OP_WRITE) + copied =3D pread(q->ublk_fd, io->integrity_buf, len, off); + else if (ublk_op =3D=3D UBLK_IO_OP_READ) + copied =3D pwrite(q->ublk_fd, io->integrity_buf, len, off); + else + assert(0); + assert(copied =3D=3D (ssize_t)len); } =20 int ublk_queue_io_cmd(struct ublk_thread *t, struct ublk_io *io) { struct ublk_queue *q =3D ublk_io_to_queue(io); @@ -1011,11 +1041,12 @@ static int ublk_start_daemon(const struct dev_ctx *= ctx, struct ublk_dev *dev) =20 for (i =3D 0; i < dinfo->nr_hw_queues; i++) { dev->q[i].dev =3D dev; dev->q[i].q_id =3D i; =20 - ret =3D ublk_queue_init(&dev->q[i], extra_flags); + ret =3D ublk_queue_init(&dev->q[i], extra_flags, + ctx->metadata_size); if (ret) { ublk_err("ublk dev %d queue %d init queue failed\n", dinfo->dev_id, i); goto fail; } diff --git a/tools/testing/selftests/ublk/kublk.h b/tools/testing/selftests= /ublk/kublk.h index d00f2b465cdf..830b49a7716a 100644 --- a/tools/testing/selftests/ublk/kublk.h +++ b/tools/testing/selftests/ublk/kublk.h @@ -110,10 +110,11 @@ struct ublk_ctrl_cmd_data { __u32 len; }; =20 struct ublk_io { char *buf_addr; + void *integrity_buf; =20 #define UBLKS_IO_NEED_FETCH_RQ (1UL << 0) #define UBLKS_IO_NEED_COMMIT_RQ_COMP (1UL << 1) #define UBLKS_IO_FREE (1UL << 2) #define UBLKS_IO_NEED_GET_DATA (1UL << 3) @@ -173,10 +174,11 @@ struct ublk_queue { /* borrow one bit of ublk uapi flags, which may never be used */ #define UBLKS_Q_AUTO_BUF_REG_FALLBACK (1ULL << 63) #define UBLKS_Q_NO_UBLK_FIXED_FD (1ULL << 62) __u64 flags; int ublk_fd; /* cached ublk char device fd */ + __u8 metadata_size; struct ublk_io ios[UBLK_QUEUE_DEPTH]; }; =20 struct ublk_thread { struct ublk_dev *dev; @@ -222,10 +224,22 @@ static inline void ublk_set_integrity_params(const st= ruct dev_ctx *ctx, .csum_type =3D ctx->csum_type, .tag_size =3D ctx->tag_size, }; } =20 +static inline size_t ublk_integrity_len(const struct ublk_queue *q, size_t= len) +{ + /* All targets currently use interval_exp =3D logical_bs_shift =3D 9 */ + return (len >> 9) * q->metadata_size; +} + +static inline size_t +ublk_integrity_data_len(const struct ublk_queue *q, size_t integrity_len) +{ + return (integrity_len / q->metadata_size) << 9; +} + static inline int ublk_io_auto_zc_fallback(const struct ublksrv_io_desc *i= od) { return !!(iod->op_flags & UBLK_IO_F_NEED_REG_BUF); } =20 --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-vs1-f99.google.com (mail-vs1-f99.google.com [209.85.217.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72E75296BCB for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; cv=none; b=uJRaFeyN5Iy24BmCTUEdsESZmUJwmrsG9kLmi2CutVEto6NJi+tjiitc8d0FjnWeczQd04LrlfhnKW3fc5iaot8eFmqTM3CQo5hlCtTvBXaMOj9LNxuSDCWTy9LVqpXCnUMUPV1i7flRS0aUwj2A+/deQJFhbgeOu4Ybl41484k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; c=relaxed/simple; bh=FpSk9SBO7a8fTola1zwsU8+516cI+0H9/8WbLKjGV0Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ume+08RX52lK3A3zIHJ8dTBK7dIObKlNAZRNCOrSCDQUiVbFfSveO2UxbzqnDSS47BG81bwxrGP5IEjjH03bSCxqmHqonjrsy92mVUCBJc2HY7gJ7Sg5mN/cj5EqchnvaYbjXMFRZBrrJQzP9EQZ3AJ56Uc+bI4+SvgrzWuC0xc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Dfm4S+Xp; arc=none smtp.client-ip=209.85.217.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Dfm4S+Xp" Received: by mail-vs1-f99.google.com with SMTP id ada2fe7eead31-5dfb5eb4adeso227153137.0 for ; Tue, 16 Dec 2025 21:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949715; x=1766554515; darn=vger.kernel.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=zdwpGAzUowZ3h68lzOUG2hhVHWdUBrDTU/ZZOy1LyBQ=; b=Dfm4S+XpMmGGUCQuca1Fo1fBeTpLoKTBs3gEUAHgptA/jxigRIoUOvYOKpyfuBm89c 3lLdvn+c4kPNPZr0G/2zvI2WV6t9Xf4hvGKLjXk1CqAqgXGZqJH4SKGxiY4ZXZqnWwj0 O9AEjDMuprOtE6P7paNTCdfWXfFixhGetP/IYTzKsf3Cghkngz8msH6P3vmFXV9Jv5r/ kmw3k3WQl11kzTCRB46xljrfIJSrc6pLhwRUnGj+JMk6TjL+op/JIYh23awU7CZ9lW7U JDRZlI0RCTVxmNYEmF8DCFt3s9pwe7soXfMweiwoh8+ooRttcHzK8tt3KvnE/GZt91M9 bIzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949715; x=1766554515; 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=zdwpGAzUowZ3h68lzOUG2hhVHWdUBrDTU/ZZOy1LyBQ=; b=wKC5h7I3cXpVINIG2CSd/s1X+0tVPtR6ROIv9onqFGMJ4cttUyNKIG0kiAwM+qC/S/ xrNsqSdTS9ZxN+2SNeQ+QZqILGZOGXtwerAXh9YvqqPtwclLbXAId0EtuGf5xjtgVX3P NnBD49zsKZa/r17JhWcjdTSKaXHHlwGUmQrE3BP3MBBjEw5NEm7IbMENaolj6K/SaD2G q8DrKNvMtC522BOXqIIv58VUeFOcVOv4SnoqJ6EBucUG2tIgdg8dwfQnLaWIy3lIlpaw XJEFvnOaIVPyjPs61hCW96FqUEHd0uKKB1I1NxCW+ewwfwfQ0Cq8LmFfSo7QHqjyRvue i01g== X-Forwarded-Encrypted: i=1; AJvYcCVhF959WRtof04uSnOdKawaP5oTR33A2/CtVP2IXaDYfiwIIrLFUvmKOTL2hWqP3rkw7f9T1pE/jVU5OMY=@vger.kernel.org X-Gm-Message-State: AOJu0YwvPcNZBURm4HKs/pa3i637oyev+WU3C7gzF7FdJA+GEp+MF0Kr 9UzJQjVnKfDWJbVmHCE/rv/TauP2xZKpOOQUQbRzVLGujxP7gMQE+pmwMcU1JEDtQ8pjiMTRqqR S17QMv4dcbdmvjxIM/EBdF6jOV9fHaFj5J44jbeO7Ts2kXS0ifziA X-Gm-Gg: AY/fxX7OzpUg4/1TfBK19wunG2JNuhERpe8VitYg/s8fZcDMtZHUMU8BxXhuAWc/r4w jLlkSot9gpACoW2HGdt2ctJ0d+PZ0dYByvbG+MfuRHT3DenVVTYI6iiqu0EOh1Kcnrw1ya7b28D PpYbcxxe4gdffHPnMaqAoRS/iJh6bs12M/TM4dfyrKMENtjdauMdtNBlBrNAJrmrE9bSI0tQY4w ky4bxByBdVsS8akWeP4UM3RZhf7Aad4us2jsyvJk/ohVQUUbtNRDx+ne1iHy5UnoWF3t8vef/Fs wn7S0K6m7ucLMJAwJHZDXpRaV6oywCnKs7OLm7tV2I9GuZV+scsdNdc/HFFZM13M8uXE3czxSRU CQxfIK4CN2NX82pK0l8XVzY6LP+U= X-Google-Smtp-Source: AGHT+IGbTNJ02+RKFBYlqs7YIcJpilxtpylxbJjk/gFQO432hKQBGIITHIc+g1MwE2v1dfjvNiGYySuW+HQJ X-Received: by 2002:a05:6102:5f70:b0:5e4:9fd:5a3 with SMTP id ada2fe7eead31-5e8277e5aacmr3076145137.6.1765949714905; Tue, 16 Dec 2025 21:35:14 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id ada2fe7eead31-5e7c85bb9b4sm2722834137.0.2025.12.16.21.35.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:14 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 6406E3420E8; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 62062E41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 17/20] selftests: ublk: support non-O_DIRECT backing files Date: Tue, 16 Dec 2025 22:34:51 -0700 Message-ID: <20251217053455.281509-18-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A subsequent commit will add support for using a backing file to store integrity data. Since integrity data is accessed in intervals of metadata_size, which may be much smaller than a logical block on the backing device, direct I/O cannot be used. Add an argument to backing_file_tgt_init() to specify the number of files to open for direct I/O. The remaining files will use buffered I/O. For now, continue to request direct I/O for all the files. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/common.c | 4 ++-- tools/testing/selftests/ublk/file_backed.c | 2 +- tools/testing/selftests/ublk/kublk.h | 2 +- tools/testing/selftests/ublk/stripe.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/ublk/common.c b/tools/testing/selftest= s/ublk/common.c index 01580a6f8519..d9873d4d50d0 100644 --- a/tools/testing/selftests/ublk/common.c +++ b/tools/testing/selftests/ublk/common.c @@ -10,11 +10,11 @@ void backing_file_tgt_deinit(struct ublk_dev *dev) fsync(dev->fds[i]); close(dev->fds[i]); } } =20 -int backing_file_tgt_init(struct ublk_dev *dev) +int backing_file_tgt_init(struct ublk_dev *dev, unsigned int nr_direct) { int fd, i; =20 assert(dev->nr_fds =3D=3D 1); =20 @@ -23,11 +23,11 @@ int backing_file_tgt_init(struct ublk_dev *dev) unsigned long bytes; struct stat st; =20 ublk_dbg(UBLK_DBG_DEV, "%s: file %d: %s\n", __func__, i, file); =20 - fd =3D open(file, O_RDWR | O_DIRECT); + fd =3D open(file, O_RDWR | (i < nr_direct ? O_DIRECT : 0)); if (fd < 0) { ublk_err("%s: backing file %s can't be opened: %s\n", __func__, file, strerror(errno)); return -EBADF; } diff --git a/tools/testing/selftests/ublk/file_backed.c b/tools/testing/sel= ftests/ublk/file_backed.c index c14ce6608696..db4c176a4f28 100644 --- a/tools/testing/selftests/ublk/file_backed.c +++ b/tools/testing/selftests/ublk/file_backed.c @@ -161,11 +161,11 @@ static int ublk_loop_tgt_init(const struct dev_ctx *c= tx, struct ublk_dev *dev) if (ctx->metadata_size) { ublk_err("%s: integrity not supported\n", __func__); return -EINVAL; } =20 - ret =3D backing_file_tgt_init(dev); + ret =3D backing_file_tgt_init(dev, 1); if (ret) return ret; =20 if (dev->tgt.nr_backing_files !=3D 1) return -EINVAL; diff --git a/tools/testing/selftests/ublk/kublk.h b/tools/testing/selftests= /ublk/kublk.h index 830b49a7716a..96c66b337bc0 100644 --- a/tools/testing/selftests/ublk/kublk.h +++ b/tools/testing/selftests/ublk/kublk.h @@ -460,8 +460,8 @@ extern const struct ublk_tgt_ops null_tgt_ops; extern const struct ublk_tgt_ops loop_tgt_ops; extern const struct ublk_tgt_ops stripe_tgt_ops; extern const struct ublk_tgt_ops fault_inject_tgt_ops; =20 void backing_file_tgt_deinit(struct ublk_dev *dev); -int backing_file_tgt_init(struct ublk_dev *dev); +int backing_file_tgt_init(struct ublk_dev *dev, unsigned int nr_direct); =20 #endif diff --git a/tools/testing/selftests/ublk/stripe.c b/tools/testing/selftest= s/ublk/stripe.c index d4aaf3351d71..2be1c36438e7 100644 --- a/tools/testing/selftests/ublk/stripe.c +++ b/tools/testing/selftests/ublk/stripe.c @@ -313,11 +313,11 @@ static int ublk_stripe_tgt_init(const struct dev_ctx = *ctx, struct ublk_dev *dev) return -EINVAL; } =20 chunk_shift =3D ilog2(chunk_size); =20 - ret =3D backing_file_tgt_init(dev); + ret =3D backing_file_tgt_init(dev, dev->tgt.nr_backing_files); if (ret) return ret; =20 if (!dev->tgt.nr_backing_files || dev->tgt.nr_backing_files > NR_STRIPE) return -EINVAL; --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 973EB287505 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; cv=none; b=XKZ010sgqa9W9H22t9ajv+My4h7x2E8L/eGughBq5aSvWukTVoQCiqxdWlADya0rIkdTSqTa/cB9VCz35lVrljYzDoWb2k02NrLzXTDJjEhmrckRGvHoAV9dfjS4gCapuT84rBaQrbUsRFHv2Rf5bQHMbcVCuGtJMDS3MVa6FLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949721; c=relaxed/simple; bh=f8EP+bPK1MvqaUPNHimhlYSpt7ZjD3QQvEFMsrXub80=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r2aFlm3US8Gn2Ucw7yHxiLNcYrVkmVl84b/MXyAd+MxjMZAahF5TPwE4w9mLoVRsR6Uwqxo5l6lrwt26rEXgNqPcu9dBuSEHQyAc7ffNyf2vmngHXeJkfCCsHz6Eh5qKUetfcEa6ijnTzF/9slj/kRU7iF1oDwlKeJx5jq5f1+A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=bh3R4Mzn; arc=none smtp.client-ip=209.85.216.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="bh3R4Mzn" Received: by mail-pj1-f99.google.com with SMTP id 98e67ed59e1d1-34c567db0a9so448953a91.1 for ; Tue, 16 Dec 2025 21:35:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949714; x=1766554514; darn=vger.kernel.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=0K5vEftPdYiPKum60OYL4RUxMxughkX0Uvdp3aFS+SM=; b=bh3R4MznsX4HN2sSwUeUQoF8SG4fShGPMt4lCeGDziENdlf4sfmVtFZS6vwmXpxFum v094S6KXgE2NXNo0d61hiXTLLia/8cCnXF9Q2B8Z2QTPz4HP/TJQ4xXA0gdltFkC1uP2 gVASd5oaqiaLARNd0/rtKfPlzo1FgI1COjau9sw5qf9Ej8VHD75fsD9mvgJxgVAtOSRk ipjZ+0c2C7oBqGsKllxmwXvZD2CzKDJ+wDwVfe3PNHPW7Vh8N0vreiwaP0x5IZ4kaTCB Fn5nNbvgSQz/CjwWmQYWguX0dOIE/wNSoglxRn9TawzFejrZ8ntjDegmwGS54lqeB+L+ EJeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949714; x=1766554514; 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=0K5vEftPdYiPKum60OYL4RUxMxughkX0Uvdp3aFS+SM=; b=UDSh8s9iWwnrEEHrtD/4/YBPrO+YA/GwyGweR/f20WtFPRCb+4e0kXsHAH74XnwICV +O/et45NIsr0MIKAYNFuxcawlgZCBzpzYpuSdHnAIdhSOgJVLsbH1i58kipGPs0IicK8 gI0KxWwk0/r2Wtg55JUM/mGBe5N5R0ZfTrtiTlFScw+2VyLr8bSmKV4lmhioXzRK+Ghd co6E2J8GoTVezV0ilu5ip+8yg4mjkeSkMUcwbzAjxiaZ3EnnuT4Gli5UVsOoPEAN0Qbm rCiHej+Jx5pFwLFS+EJwsIQtsLCi3bucxwDxCGontWFYrQ1HESCGRUBFJxjUesHLoguQ 6hfg== X-Forwarded-Encrypted: i=1; AJvYcCUASdijnnGBL4KOhSyBx5KfAYlsc35sCqGW3A4FhDCKXivvflm5mTT2TrLq89YbpUvaE8tdc8QjvByquvE=@vger.kernel.org X-Gm-Message-State: AOJu0YxRxtgTw8YlCRslAca3f5P8lufi5sh/ZD0zyiiHikYNDITtjcDt gstSQWigP8lyZK8Q15y26kSGXuf5PcoyybtYC5M4uYS0DPGvG+IuBVcxHpoq6wBAqpKlzTWtgxL vLzGg4RiKenQG4vs5Y73JgqNi3paPkdRFgtE/q8FruBX2lvatMHNz X-Gm-Gg: AY/fxX6oZ3lqBi2UJIJ4MS2/54zJTOm27YL7Kb/Rwwh9TC4LY05UxeNv2icB1n6T/6j ZMne/a3XGI1Pzn7UudEuilWFmrf2iijEs0GXpJBzo5IcnocVcaTDms2GsEO/1cjNPmJ6GnRNtWk wjGMZh6xog1MGRUgH/kuGgNm7Yx80oMvzYCqOeHLqvlA0AtSI0CnHYNE8QoQqAI/Rm0OWdBl738 wKx5chhKVuN7dqaPo2nnXRY2aHU1UlzWNH3i28xJ1A/GvEqFxZoBVMz5RvE9aQQ5+JM1sOBRFYO Tg1uxcWcbmAqsZu+zlEBx6QgfDSRehNWMQg/TmNUg3gHEvOZcl9lff+7F5zFnHe78j/Jz/B5Rpp OT+lxjK92p2x/fNDcnyiQyIoOIMU= X-Google-Smtp-Source: AGHT+IF3QWWDircA2HU2nyaFINqIKymyhDZzCc1uZwJse38kkaHRBo2S1/CTHo+jeLRwwK8DtAAmlCsojSBS X-Received: by 2002:a05:7022:fa2:b0:11b:862d:8031 with SMTP id a92af1059eb24-11f34874285mr7166802c88.0.1765949713871; Tue, 16 Dec 2025 21:35:13 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id a92af1059eb24-11f2e151243sm3230598c88.0.2025.12.16.21.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:13 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 863CE34225B; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 84110E41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 18/20] selftests: ublk: add integrity data support to loop target Date: Tue, 16 Dec 2025 22:34:52 -0700 Message-ID: <20251217053455.281509-19-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" To perform and end-to-end test of integrity information through a ublk device, we need to actually store it somewhere and retrieve it. Add this support to kublk's loop target. It uses a second backing file for the integrity data corresponding to the data stored in the first file. The integrity file is opened without O_DIRECT since it will be accessed at sub-block granularity. Each incoming read/write results in a pair of reads/writes, one to the data file, and one to the integrity file. If either backing I/O fails, the error is propagated to the ublk request. If both backing I/Os read/write some bytes, the ublk request is completed with the smaller of the number of blocks accessed by each I/O. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/file_backed.c | 63 +++++++++++++++------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/ublk/file_backed.c b/tools/testing/sel= ftests/ublk/file_backed.c index db4c176a4f28..b8aacaa928a4 100644 --- a/tools/testing/selftests/ublk/file_backed.c +++ b/tools/testing/selftests/ublk/file_backed.c @@ -33,48 +33,62 @@ static int loop_queue_tgt_rw_io(struct ublk_thread *t, = struct ublk_queue *q, unsigned ublk_op =3D ublksrv_get_op(iod); unsigned zc =3D ublk_queue_use_zc(q); unsigned auto_zc =3D ublk_queue_use_auto_zc(q); enum io_uring_op op =3D ublk_to_uring_op(iod, zc | auto_zc); struct ublk_io *io =3D ublk_get_io(q, tag); + __u64 offset =3D iod->start_sector << 9; + __u32 len =3D iod->nr_sectors << 9; struct io_uring_sqe *sqe[3]; void *addr =3D io->buf_addr; =20 + if (iod->op_flags & UBLK_IO_F_INTEGRITY) { + ublk_io_alloc_sqes(t, sqe, 1); + /* Use second backing file for integrity data */ + io_uring_prep_rw(op, sqe[0], ublk_get_registered_fd(q, 2), + io->integrity_buf, + ublk_integrity_len(q, len), + ublk_integrity_len(q, offset)); + sqe[0]->flags =3D IOSQE_FIXED_FILE; + /* tgt_data =3D 1 indicates integrity I/O */ + sqe[0]->user_data =3D build_user_data(tag, ublk_op, 1, q->q_id, 1); + } + if (!zc || auto_zc) { ublk_io_alloc_sqes(t, sqe, 1); if (!sqe[0]) return -ENOMEM; =20 io_uring_prep_rw(op, sqe[0], ublk_get_registered_fd(q, 1) /*fds[1]*/, addr, - iod->nr_sectors << 9, - iod->start_sector << 9); + len, + offset); if (auto_zc) sqe[0]->buf_index =3D tag; io_uring_sqe_set_flags(sqe[0], IOSQE_FIXED_FILE); /* bit63 marks us as tgt io */ sqe[0]->user_data =3D build_user_data(tag, ublk_op, 0, q->q_id, 1); - return 1; + return !!(iod->op_flags & UBLK_IO_F_INTEGRITY) + 1; } =20 ublk_io_alloc_sqes(t, sqe, 3); =20 io_uring_prep_buf_register(sqe[0], q, tag, q->q_id, io->buf_index); sqe[0]->flags |=3D IOSQE_CQE_SKIP_SUCCESS | IOSQE_IO_HARDLINK; sqe[0]->user_data =3D build_user_data(tag, ublk_cmd_op_nr(sqe[0]->cmd_op), 0, q->q_id, 1); =20 io_uring_prep_rw(op, sqe[1], ublk_get_registered_fd(q, 1) /*fds[1]*/, 0, - iod->nr_sectors << 9, - iod->start_sector << 9); + len, + offset); sqe[1]->buf_index =3D tag; sqe[1]->flags |=3D IOSQE_FIXED_FILE | IOSQE_IO_HARDLINK; sqe[1]->user_data =3D build_user_data(tag, ublk_op, 0, q->q_id, 1); =20 io_uring_prep_buf_unregister(sqe[2], q, tag, q->q_id, io->buf_index); sqe[2]->user_data =3D build_user_data(tag, ublk_cmd_op_nr(sqe[2]->cmd_op)= , 0, q->q_id, 1); =20 - return 2; + return !!(iod->op_flags & UBLK_IO_F_INTEGRITY) + 2; } =20 static int loop_queue_tgt_io(struct ublk_thread *t, struct ublk_queue *q, = int tag) { const struct ublksrv_io_desc *iod =3D ublk_get_iod(q, tag); @@ -117,16 +131,21 @@ static void ublk_loop_io_done(struct ublk_thread *t, = struct ublk_queue *q, { unsigned tag =3D user_data_to_tag(cqe->user_data); unsigned op =3D user_data_to_op(cqe->user_data); struct ublk_io *io =3D ublk_get_io(q, tag); =20 - if (cqe->res < 0 || op !=3D ublk_cmd_op_nr(UBLK_U_IO_UNREGISTER_IO_BUF)) { - if (!io->result) - io->result =3D cqe->res; - if (cqe->res < 0) - ublk_err("%s: io failed op %x user_data %lx\n", - __func__, op, cqe->user_data); + if (cqe->res < 0) { + io->result =3D cqe->res; + ublk_err("%s: io failed op %x user_data %lx\n", + __func__, op, cqe->user_data); + } else if (op !=3D ublk_cmd_op_nr(UBLK_U_IO_UNREGISTER_IO_BUF)) { + __s32 data_len =3D user_data_to_tgt_data(cqe->user_data) + ? ublk_integrity_data_len(q, cqe->res) + : cqe->res; + + if (!io->result || data_len < io->result) + io->result =3D data_len; } =20 /* buffer register op is IOSQE_CQE_SKIP_SUCCESS */ if (op =3D=3D ublk_cmd_op_nr(UBLK_U_IO_REGISTER_IO_BUF)) io->tgt_ios +=3D 1; @@ -136,10 +155,11 @@ static void ublk_loop_io_done(struct ublk_thread *t, = struct ublk_queue *q, } =20 static int ublk_loop_tgt_init(const struct dev_ctx *ctx, struct ublk_dev *= dev) { unsigned long long bytes; + unsigned long blocks; int ret; struct ublk_params p =3D { .types =3D UBLK_PARAM_TYPE_BASIC | UBLK_PARAM_TYPE_DMA_ALIGN, .basic =3D { .attrs =3D UBLK_ATTR_VOLATILE_CACHE, @@ -152,27 +172,34 @@ static int ublk_loop_tgt_init(const struct dev_ctx *c= tx, struct ublk_dev *dev) .dma =3D { .alignment =3D 511, }, }; =20 + ublk_set_integrity_params(ctx, &p); if (ctx->auto_zc_fallback) { ublk_err("%s: not support auto_zc_fallback\n", __func__); return -EINVAL; } - if (ctx->metadata_size) { - ublk_err("%s: integrity not supported\n", __func__); - return -EINVAL; - } =20 + /* Use O_DIRECT only for data file */ ret =3D backing_file_tgt_init(dev, 1); if (ret) return ret; =20 - if (dev->tgt.nr_backing_files !=3D 1) + /* Expect a second file for integrity data */ + if (dev->tgt.nr_backing_files !=3D 1 + !!ctx->metadata_size) return -EINVAL; =20 - bytes =3D dev->tgt.backing_file_size[0]; + blocks =3D dev->tgt.backing_file_size[0] >> p.basic.logical_bs_shift; + if (ctx->metadata_size) { + unsigned long metadata_blocks =3D + dev->tgt.backing_file_size[1] / ctx->metadata_size; + + /* Ensure both data and integrity data fit in backing files */ + blocks =3D min(blocks, metadata_blocks); + } + bytes =3D blocks << p.basic.logical_bs_shift; dev->tgt.dev_size =3D bytes; p.basic.dev_sectors =3D bytes >> 9; dev->tgt.params =3D p; =20 return 0; --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-ot1-f99.google.com (mail-ot1-f99.google.com [209.85.210.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D82E299AAB for ; Wed, 17 Dec 2025 05:35:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949723; cv=none; b=KkeTyzteoJQ07YPDYK8PSY/Zsx+js/mzCihslwYAmtr+M3+R5WTZpvknaCLs8aB6IrActPP7O7/Un0tMGoN20unZD+GwTo1xPTKcJbYaCAi8dxLq1tLi1IAju/jK8RBZAe9G9IkKyLJ75cyvsWzsOYdhiv0wx3xJOajv4A74ats= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949723; c=relaxed/simple; bh=t9cYHGY+lbIuHzE8g0pXWWnK6GJfVuAiJzVnLuKG2yM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jZPBtnoH/kwO665W3NlsAQg7sUac8xPUOXxjcBtQANaG9oXWQkmsmMoR29mF+ec4DpI8GjF6JGJo+572SY2j4xHSxjfKn3F9+3ypk7oES7Ru+GgEn2tU936zeNRQN9BkgxyYhu/kHqsI8ZBFtbmNVbQG7cEimYqIslqXGVJB+3o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=LX1e/g3f; arc=none smtp.client-ip=209.85.210.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="LX1e/g3f" Received: by mail-ot1-f99.google.com with SMTP id 46e09a7af769-7c72d7e6c0fso861938a34.3 for ; Tue, 16 Dec 2025 21:35:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949715; x=1766554515; darn=vger.kernel.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=bjfInq/j6ZbezL3hpJSlIUNNH1Zh7wSL0H2qNcnLw04=; b=LX1e/g3fDzzEFaG3LUsSGMfYcs7aBOROErCshxIvPEH2jMPXjljTA2N70/QKzpZ9DF 8/KvUK4ni7/sLX2YwF33J4CnIrs647YVqduOU8uvSqIYVINwWUD/Vg6zzuMrZMsWMJBO amrFGpiRSsuuktf8Zm50epMAZ6XEHljvreQSmpVoqRmXjc1s6wGykxlhiMpRC1OQbw7O NYhCqepEvDfkYqZJEJWJ9onkC0tDAtKdaRAHELOGbUSIx922a67ccPbKffVQkxyN33mD G7dpZmqW+sV4jFgV15Kq9sDksSqpSfEna11zfJXqJHvoAYxTaBp/qgvojUGdSSthjUzT d+ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949715; x=1766554515; 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=bjfInq/j6ZbezL3hpJSlIUNNH1Zh7wSL0H2qNcnLw04=; b=Viigv/IdvIOXmplq9vFoIJ3OQl23vjwWq2pD8N5QO0hm0yLrAi/zhKnTlV6dfoYg7N J9luaOSCFXAi8FX9Oj0aMGCTWWfPyc9fofwk/0fFXEPkSYyYTpR3uetqoFofOz+7hcf0 Gkl06EsA9KP/b0NzYU5MdZmy6ou+mI4wM6+Jnxyvxz0N+lgjGCE0BPmJGM7UDMC5vUL2 drRFRP29RBw+oy67eljxlKgAGuMdAs2VFYaM/dhLAm2YV1AU+nvkAk2DnuddHE+oES5A uqMv2cLJOZkqR7JUUs5DEUPOIcNet10HvA/ky1riSCR7enhecX/SRwMwfTXsqFJz4uTA +aGA== X-Forwarded-Encrypted: i=1; AJvYcCVcNkC0VZLCD3f13lMNXNiugGoRgnQtfrbMQH6ygRb2tvkOWsG0m0OvXPO31K3wajpPBSj4B3mkabWjooQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7HS1ZhVxtKmX9uvSgFnxztF/rCQYba5QaMPJbFkbNNhOIKn/4 gXQqAdMjbmbqLdrqIjoTMhXv1Ex2Hu9idCdoMD+hj6UdB7h1Gg0w0Xlbt8fnqpMCl24v4mEgxSR 0a1m/hMTSr51K8FF0GrjCqhioWZk4DneLxRroUJG2UMaGtLawUywg X-Gm-Gg: AY/fxX7Iros79Onofh8xk8OcHE8iRQRVUnPnQoYzNa9c/BvxONE5r+lfXLOk1VsB+4U EEhCNu/fd+bapfGQdUVTaBPnStM74RhCo1UYdYkUdbI5AjPxd+DoM2TkgJVcA/wp6zfZMcJfx0b /c+NO+vQjImOzwTurJUBVPINTvhxiZpA2A/Wrtn3wt2nABdkQBx7lOrA/McKSUOe0q+ayX/iHd8 8yk+pHDmk6CRkkn7NVlcIcGNh4mDqF0bkSx8VYe9eH+elcwsM8p0hu14UZZFEs0Jjq01dsEBKX2 eCn9LjThq3khdpYTLc1siNVdJlza0eYMjzRaMnVe2YS9UhZxkI968DYxN+4wJ/gAqhbadKxbL0A R/ITx1T4npEAbqIrspIORpHbcSH8= X-Google-Smtp-Source: AGHT+IHGuUlVvqYdwC5MHO+Zg10nd280P7si1rrad6oOsSGHdNNclHEYNg0v2QaljbxWC85Y2sUJA+x8m7OF X-Received: by 2002:a05:6830:2708:b0:7c5:4005:ffe0 with SMTP id 46e09a7af769-7cae837c564mr8249162a34.6.1765949715602; Tue, 16 Dec 2025 21:35:15 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 46e09a7af769-7cadb2d9814sm2754118a34.3.2025.12.16.21.35.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:15 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id A6A793404B4; Tue, 16 Dec 2025 22:35:14 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id A1573E41A08; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 19/20] selftests: ublk: add integrity params test Date: Tue, 16 Dec 2025 22:34:53 -0700 Message-ID: <20251217053455.281509-20-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add test case null_04 to exercise all the different integrity params. It creates 4 different ublk devices with different combinations of integrity arguments and verifies their integrity limits via sysfs and the metadata_size utility. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/Makefile | 1 + tools/testing/selftests/ublk/test_common.sh | 10 ++ tools/testing/selftests/ublk/test_null_04.sh | 166 +++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100755 tools/testing/selftests/ublk/test_null_04.sh diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftest= s/ublk/Makefile index 0f6abb95c87a..d567f90d30b3 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -24,10 +24,11 @@ TEST_PROGS +=3D test_generic_13.sh TEST_PROGS +=3D test_generic_14.sh =20 TEST_PROGS +=3D test_null_01.sh TEST_PROGS +=3D test_null_02.sh TEST_PROGS +=3D test_null_03.sh +TEST_PROGS +=3D test_null_04.sh TEST_PROGS +=3D test_loop_01.sh TEST_PROGS +=3D test_loop_02.sh TEST_PROGS +=3D test_loop_03.sh TEST_PROGS +=3D test_loop_04.sh TEST_PROGS +=3D test_loop_05.sh diff --git a/tools/testing/selftests/ublk/test_common.sh b/tools/testing/se= lftests/ublk/test_common.sh index 6f1c042de40e..9756b0ee876c 100755 --- a/tools/testing/selftests/ublk/test_common.sh +++ b/tools/testing/selftests/ublk/test_common.sh @@ -374,10 +374,20 @@ run_io_and_recover() _ublk_test_top_dir() { cd "$(dirname "$0")" && pwd } =20 +METADATA_SIZE_PROG=3D"$(_ublk_test_top_dir)/metadata_size" + +_get_metadata_size() +{ + local dev_id=3D$1 + local field=3D$2 + + "$METADATA_SIZE_PROG" "/dev/ublkb$dev_id" | grep "$field" | grep -o "[0-9= ]*" +} + UBLK_PROG=3D$(_ublk_test_top_dir)/kublk UBLK_TEST_QUIET=3D1 UBLK_TEST_SHOW_RESULT=3D1 UBLK_BACKFILES=3D() export UBLK_PROG diff --git a/tools/testing/selftests/ublk/test_null_04.sh b/tools/testing/s= elftests/ublk/test_null_04.sh new file mode 100755 index 000000000000..0b0719ea33a3 --- /dev/null +++ b/tools/testing/selftests/ublk/test_null_04.sh @@ -0,0 +1,166 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3Dnull_04 + +_prep_test "null" "integrity params" + +dev_id=3D$(_add_ublk_dev -t null -u --metadata_size 8) +_check_add_dev $TID $? +metadata_size=3D$(_get_metadata_size "$dev_id" metadata_size) +if [ "$metadata_size" !=3D 8 ]; then + echo "metadata_size $metadata_size !=3D 8" + _show_result $TID 255 +fi +pi_offset=3D$(_get_metadata_size "$dev_id" pi_offset) +if [ "$pi_offset" !=3D 0 ]; then + echo "pi_offset $pi_offset !=3D 0" + _show_result $TID 255 +fi +pi_tuple_size=3D$(_get_metadata_size "$dev_id" pi_tuple_size) +if [ "$pi_tuple_size" !=3D 0 ]; then + echo "pi_tuple_size $pi_tuple_size !=3D 0" + _show_result $TID 255 +fi +capable=3D$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_cap= able") +if [ "$capable" !=3D 0 ]; then + echo "device_is_integrity_capable $capable !=3D 0" + _show_result $TID 255 +fi +format=3D$(cat "/sys/block/ublkb$dev_id/integrity/format") +if [ "$format" !=3D nop ]; then + echo "format $format !=3D nop" + _show_result $TID 255 +fi +protection_interval_bytes=3D$(cat "/sys/block/ublkb$dev_id/integrity/prote= ction_interval_bytes") +if [ "$protection_interval_bytes" !=3D 512 ]; then + echo "protection_interval_bytes $protection_interval_bytes !=3D 512" + _show_result $TID 255 +fi +tag_size=3D$(cat "/sys/block/ublkb$dev_id/integrity/tag_size") +if [ "$tag_size" !=3D 0 ]; then + echo "tag_size $tag_size !=3D 0" + _show_result $TID 255 +fi +_cleanup_test + +dev_id=3D$(_add_ublk_dev -t null -u --integrity_capable --metadata_size 64= --pi_offset 56 --csum_type ip) +_check_add_dev $TID $? +metadata_size=3D$(_get_metadata_size "$dev_id" metadata_size) +if [ "$metadata_size" !=3D 64 ]; then + echo "metadata_size $metadata_size !=3D 64" + _show_result $TID 255 +fi +pi_offset=3D$(_get_metadata_size "$dev_id" pi_offset) +if [ "$pi_offset" !=3D 56 ]; then + echo "pi_offset $pi_offset !=3D 56" + _show_result $TID 255 +fi +pi_tuple_size=3D$(_get_metadata_size "$dev_id" pi_tuple_size) +if [ "$pi_tuple_size" !=3D 8 ]; then + echo "pi_tuple_size $pi_tuple_size !=3D 8" + _show_result $TID 255 +fi +capable=3D$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_cap= able") +if [ "$capable" !=3D 1 ]; then + echo "device_is_integrity_capable $capable !=3D 1" + _show_result $TID 255 +fi +format=3D$(cat "/sys/block/ublkb$dev_id/integrity/format") +if [ "$format" !=3D T10-DIF-TYPE3-IP ]; then + echo "format $format !=3D T10-DIF-TYPE3-IP" + _show_result $TID 255 +fi +protection_interval_bytes=3D$(cat "/sys/block/ublkb$dev_id/integrity/prote= ction_interval_bytes") +if [ "$protection_interval_bytes" !=3D 512 ]; then + echo "protection_interval_bytes $protection_interval_bytes !=3D 512" + _show_result $TID 255 +fi +tag_size=3D$(cat "/sys/block/ublkb$dev_id/integrity/tag_size") +if [ "$tag_size" !=3D 0 ]; then + echo "tag_size $tag_size !=3D 0" + _show_result $TID 255 +fi +_cleanup_test + +dev_id=3D$(_add_ublk_dev -t null -u --integrity_reftag --metadata_size 8 -= -csum_type t10dif) +_check_add_dev $TID $? +metadata_size=3D$(_get_metadata_size "$dev_id" metadata_size) +if [ "$metadata_size" !=3D 8 ]; then + echo "metadata_size $metadata_size !=3D 8" + _show_result $TID 255 +fi +pi_offset=3D$(_get_metadata_size "$dev_id" pi_offset) +if [ "$pi_offset" !=3D 0 ]; then + echo "pi_offset $pi_offset !=3D 0" + _show_result $TID 255 +fi +pi_tuple_size=3D$(_get_metadata_size "$dev_id" pi_tuple_size) +if [ "$pi_tuple_size" !=3D 8 ]; then + echo "pi_tuple_size $pi_tuple_size !=3D 8" + _show_result $TID 255 +fi +capable=3D$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_cap= able") +if [ "$capable" !=3D 0 ]; then + echo "device_is_integrity_capable $capable !=3D 0" + _show_result $TID 255 +fi +format=3D$(cat "/sys/block/ublkb$dev_id/integrity/format") +if [ "$format" !=3D T10-DIF-TYPE1-CRC ]; then + echo "format $format !=3D T10-DIF-TYPE1-CRC" + _show_result $TID 255 +fi +protection_interval_bytes=3D$(cat "/sys/block/ublkb$dev_id/integrity/prote= ction_interval_bytes") +if [ "$protection_interval_bytes" !=3D 512 ]; then + echo "protection_interval_bytes $protection_interval_bytes !=3D 512" + _show_result $TID 255 +fi +tag_size=3D$(cat "/sys/block/ublkb$dev_id/integrity/tag_size") +if [ "$tag_size" !=3D 0 ]; then + echo "tag_size $tag_size !=3D 0" + _show_result $TID 255 +fi +_cleanup_test + +dev_id=3D$(_add_ublk_dev -t null -u --metadata_size 16 --csum_type nvme --= tag_size 8) +_check_add_dev $TID $? +metadata_size=3D$(_get_metadata_size "$dev_id" metadata_size) +if [ "$metadata_size" !=3D 16 ]; then + echo "metadata_size $metadata_size !=3D 16" + _show_result $TID 255 +fi +pi_offset=3D$(_get_metadata_size "$dev_id" pi_offset) +if [ "$pi_offset" !=3D 0 ]; then + echo "pi_offset $pi_offset !=3D 0" + _show_result $TID 255 +fi +pi_tuple_size=3D$(_get_metadata_size "$dev_id" pi_tuple_size) +if [ "$pi_tuple_size" !=3D 16 ]; then + echo "pi_tuple_size $pi_tuple_size !=3D 16" + _show_result $TID 255 +fi +capable=3D$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_cap= able") +if [ "$capable" !=3D 0 ]; then + echo "device_is_integrity_capable $capable !=3D 0" + _show_result $TID 255 +fi +format=3D$(cat "/sys/block/ublkb$dev_id/integrity/format") +if [ "$format" !=3D EXT-DIF-TYPE3-CRC64 ]; then + echo "format $format !=3D EXT-DIF-TYPE3-CRC64" + _show_result $TID 255 +fi +protection_interval_bytes=3D$(cat "/sys/block/ublkb$dev_id/integrity/prote= ction_interval_bytes") +if [ "$protection_interval_bytes" !=3D 512 ]; then + echo "protection_interval_bytes $protection_interval_bytes !=3D 512" + _show_result $TID 255 +fi +tag_size=3D$(cat "/sys/block/ublkb$dev_id/integrity/tag_size") +if [ "$tag_size" !=3D 8 ]; then + echo "tag_size $tag_size !=3D 8" + _show_result $TID 255 +fi +_cleanup_test + +_show_result $TID 0 --=20 2.45.2 From nobody Thu Dec 18 23:25:20 2025 Received: from mail-oi1-f225.google.com (mail-oi1-f225.google.com [209.85.167.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DFCF284898 for ; Wed, 17 Dec 2025 05:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949719; cv=none; b=aI37wpEkyPD2dLz+cZlWk4c7H+Hff50xnGk+BbsMsBZpLSkf2NaHZPjV98MUXKFYT7s1yAmaeetbGX1xJZcpV0zb6bBpvf/exR0hsueD9WK5NnGp/wEccZBoyc2aJ3Yy811nXWyf4GSekn3ENRsiDvxYZgsOXnTpBs63QFt5jcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765949719; c=relaxed/simple; bh=tNS2wrfRbubpl2FKYaIvxyO2cy+QowCqwPCVDfS/LJs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E/8W/L8lpBkzaoY8UrLI8UhR2NHXAHD+MOT4FH+fVs5yGdqbjVba9+0rrao9ir3cfVwITQvkqrNunhwiAUzehejhUaJu6V1OEr3J9qNGPxHTidIsCK+U3/rPFouVN0D+ir1SLYyttSLTGhuRDB/5b7owj/XljWU+c7A7j11nRyI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=SNxVTOz3; arc=none smtp.client-ip=209.85.167.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="SNxVTOz3" Received: by mail-oi1-f225.google.com with SMTP id 5614622812f47-4557cad23d7so227467b6e.3 for ; Tue, 16 Dec 2025 21:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765949715; x=1766554515; darn=vger.kernel.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=vlHrt31dSzsMCqKtBJiCTlOW1Fegip2uQ4N5CLB4TZY=; b=SNxVTOz3b75is+WidNjLZ5dAT0iTbqHaJbQxtyBniJ2AhNxb5CQl379dAZZtW42dOg 4yyrnb51Dd3MRi+aT+BDlX7g4P1/yq7lG1SHwlv5pMUtaySVQTK3fC2UGvNZsh8XWpNR ZBSWKmSKVoTir/AcAgNOfQKY+cpMyRVntdpfNqbZZG3MOLdRrkVsKldYjml+P5oBEukL l0nEIf6O/XNyTa6DzjHvjP7GjJOPxrFZ3Uc6bICVXuIqN1qddx1qYqT01k3pl1nI95o5 mbSx85BjwOx5fi1VqTklipOU88mqUwRxr255KpOE5Z1Z3tz6nowLr51W80zdgbKuWn5f RJxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765949715; x=1766554515; 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=vlHrt31dSzsMCqKtBJiCTlOW1Fegip2uQ4N5CLB4TZY=; b=J8+Tc3DRbUEFsFhPi7RT/sy3Kg0pvdEfxUmiYQl1XKh0uneewP49Aqe2arnGFc/AoW m2KLnZDnoWMZbUv01bIoflNf/fiUWoCR9GrFA2NeC6zOFD8yJeM7uN8nbRSnEyBdAjMF Fk/XT6Pl09AbMmMYDqeRO1PYSMLfIFg+ak01CyT3UCfR5U4vowyhqHk2j9cA8tIKTsSd FZWD8pK809SBK1vl+KbAaEgeLvFCDfbES8gR1a+g8IlTPCRNyUu77IaZ8ZdSdzNHBqHx DYFs+s1KqdahK/V76QCgmqpw5SyZjhHgpJ8IeEewxOITjePvzK7AHHp/6NsApkGgtuXF DQxQ== X-Forwarded-Encrypted: i=1; AJvYcCXXRt3UO55qBKGeHRJ+5LtDSDHofhGsZraNrCdGQAvo+gyzbd2YZhJUNmudaDjQYtPXzdH2xoWHMXWnDJw=@vger.kernel.org X-Gm-Message-State: AOJu0YwvvIhPIcutk0QUmLgcKdNk/FQNFLvZj4wPyGrW2U9/aB57hIE7 +c8I1/hc/BOftI3heCbLbLdLNgBjaCKqgKouFJOhHrxcUbaMuLjPPMbmRYus3S9FIMKBFf6/8gO MqO2t5iPeZBZFOQay73ZV1igjGh2MycoLzo5QbqTzZYyDx8tqaRju X-Gm-Gg: AY/fxX6YklLU2R+fsRn96VxM/6zI0OILkv8kGNli7D6keHh+MU6rUXq23ZpVc/b34Wa ciAC6EMKuGmc8U5z8RGqhu0QGu6CkSXrbBsNQiffUsyxcsRux79MixgHR9/pS80HT+e3Gm9eX2N CI4c1KWEOdQCJTL8gJyOYNcAtjEgtka8K8DIH8wWFzbKgAKcVFRqYDw1Hjnz/a3Wa6FT5hZAULM YgbAFp86bJNxDEqRfQvxqf+GsP08fpK6o7z22or0oWFIsRU8b6kKXO8RKh/8xcsATfxvY3JdkUm AccavWBHm8VvsbgDmPdPwe2hj4ZvnN/7Akhcztwn5Q5pdg5alcqZr32D3FjLKBsZURGgXbKZxc2 PUDo7JSMqEwgVYAVJ80MgF+p563A= X-Google-Smtp-Source: AGHT+IFmg7UFWWMtPg9z6BqUt2g1F1zPH+pOkUttTKRwp+eStSdZRSo6zkGL63PLfLuD5BP2o3UTB1a4nGUw X-Received: by 2002:a05:6871:3416:b0:3ea:d0e3:9696 with SMTP id 586e51a60fabf-3f5f8989e9fmr6393090fac.9.1765949714710; Tue, 16 Dec 2025 21:35:14 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-3f614e29004sm1368934fac.13.2025.12.16.21.35.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 21:35:14 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id C7CF33401D2; Tue, 16 Dec 2025 22:35:13 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id C2E38E41AC4; Tue, 16 Dec 2025 22:35:13 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Jens Axboe , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Stanley Zhang , Uday Shankar , Caleb Sander Mateos Subject: [PATCH 20/20] selftests: ublk: add end-to-end integrity test Date: Tue, 16 Dec 2025 22:34:54 -0700 Message-ID: <20251217053455.281509-21-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251217053455.281509-1-csander@purestorage.com> References: <20251217053455.281509-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add test case loop_08 to verify the ublk integrity data flow. It uses the kublk loop target to create a ublk device with integrity on top of backing data and integrity files. It then writes to the whole device with fio configured to generate integrity data. Then it reads back the whole device with fio configured to verify the integrity data. It also verifies that injected guard, reftag, and apptag corruptions are correctly detected. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/Makefile | 1 + tools/testing/selftests/ublk/test_loop_08.sh | 111 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100755 tools/testing/selftests/ublk/test_loop_08.sh diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftest= s/ublk/Makefile index d567f90d30b3..e04922085fd5 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -32,10 +32,11 @@ TEST_PROGS +=3D test_loop_02.sh TEST_PROGS +=3D test_loop_03.sh TEST_PROGS +=3D test_loop_04.sh TEST_PROGS +=3D test_loop_05.sh TEST_PROGS +=3D test_loop_06.sh TEST_PROGS +=3D test_loop_07.sh +TEST_PROGS +=3D test_loop_08.sh TEST_PROGS +=3D test_stripe_01.sh TEST_PROGS +=3D test_stripe_02.sh TEST_PROGS +=3D test_stripe_03.sh TEST_PROGS +=3D test_stripe_04.sh TEST_PROGS +=3D test_stripe_05.sh diff --git a/tools/testing/selftests/ublk/test_loop_08.sh b/tools/testing/s= elftests/ublk/test_loop_08.sh new file mode 100755 index 000000000000..ca289cfb2ad4 --- /dev/null +++ b/tools/testing/selftests/ublk/test_loop_08.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +if ! _have_program fio; then + exit $UBLK_SKIP_CODE +fi + +fio_version=3D$(fio --version) +if [[ "$fio_version" =3D~ fio-[0-9]+\.[0-9]+$ ]]; then + echo "Requires development fio version with https://github.com/axboe/fio/= pull/1992" + exit $UBLK_SKIP_CODE +fi + +TID=3Dloop_08 + +_prep_test "loop" "end-to-end integrity" + +_create_backfile 0 256M +_create_backfile 1 32M # 256M * (64 integrity bytes / 512 data bytes) +integrity_params=3D"--integrity_capable --integrity_reftag + --metadata_size 64 --pi_offset 56 --csum_type t10dif" +dev_id=3D$(_add_ublk_dev -t loop -u $integrity_params "${UBLK_BACKFILES[@]= }") +_check_add_dev $TID $? + +# 1M * (64 integrity bytes / 512 data bytes) =3D 128K +fio_args=3D"--ioengine io_uring --direct 1 --bsrange 512-1M --iodepth 32 + --md_per_io_size 128K --pi_act 0 --pi_chk GUARD,REFTAG,APPTAG + --filename /dev/ublkb$dev_id" +fio --name fill --rw randwrite $fio_args > /dev/null +err=3D$? +if [ $err !=3D 0 ]; then + echo "fio fill failed" + _show_result $TID $err +fi + +fio --name verify --rw randread $fio_args > /dev/null +err=3D$? +if [ $err !=3D 0 ]; then + echo "fio verify failed" + _show_result $TID $err +fi + +fio_err=3D$(mktemp fio_err_XXXXX) + +# Overwrite 4-byte reftag at offset 56 + 4 =3D 60 +dd_reftag_args=3D"bs=3D1 seek=3D60 count=3D4 oflag=3Ddsync conv=3Dnotrunc = status=3Dnone" +dd if=3D/dev/urandom "of=3D${UBLK_BACKFILES[1]}" $dd_reftag_args +err=3D$? +if [ $err !=3D 0 ]; then + echo "dd corrupted_reftag failed" + rm -f "$fio_err" + _show_result $TID $err +fi +if fio --name corrupted_reftag --rw randread $fio_args > /dev/null 2> "$fi= o_err"; then + echo "fio corrupted_reftag unexpectedly succeeded" + rm -f "$fio_err" + _show_result $TID 255 +fi +expected_err=3D"REFTAG compare error: LBA: 0 Expected=3D0, Actual=3D" +if ! grep -q "$expected_err" "$fio_err"; then + echo "fio corrupted_reftag message not found: $expected_err" + rm -f "$fio_err" + _show_result $TID 255 +fi +# Reset to 0 +dd if=3D/dev/zero "of=3D${UBLK_BACKFILES[1]}" $dd_reftag_args +err=3D$? +if [ $err !=3D 0 ]; then + echo "dd restore corrupted_reftag failed" + rm -f "$fio_err" + _show_result $TID $err +fi + +dd_data_args=3D"bs=3D512 count=3D1 oflag=3Ddirect,dsync conv=3Dnotrunc sta= tus=3Dnone" +dd if=3D/dev/zero "of=3D${UBLK_BACKFILES[0]}" $dd_data_args +err=3D$? +if [ $err !=3D 0 ]; then + echo "dd corrupted_data failed" + rm -f "$fio_err" + _show_result $TID $err +fi +if fio --name corrupted_data --rw randread $fio_args > /dev/null 2> "$fio_= err"; then + echo "fio corrupted_data unexpectedly succeeded" + rm -f "$fio_err" + _show_result $TID 255 +fi +expected_err=3D"Guard compare error: LBA: 0 Expected=3D0, Actual=3D" +if ! grep -q "$expected_err" "$fio_err"; then + echo "fio corrupted_data message not found: $expected_err" + rm -f "$fio_err" + _show_result $TID 255 +fi + +if fio --name bad_apptag --rw randread $fio_args --apptag 0x4321 > /dev/nu= ll 2> "$fio_err"; then + echo "fio bad_apptag unexpectedly succeeded" + rm -f "$fio_err" + _show_result $TID 255 +fi +expected_err=3D"APPTAG compare error: LBA: [0-9]* Expected=3D4321, Actual= =3D1234" +if ! grep -q "$expected_err" "$fio_err"; then + echo "fio bad_apptag message not found: $expected_err" + rm -f "$fio_err" + _show_result $TID 255 +fi + +rm -f "$fio_err" + +_cleanup_test +_show_result $TID 0 --=20 2.45.2