From nobody Fri Dec 19 07:23:40 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