From: Ahmad Fatoum <a.fatoum@barebox.org>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>
Subject: [PATCH 12/26] block: define helpers for non-512-byte sector support
Date: Fri, 26 Jun 2026 10:42:23 +0200 [thread overview]
Message-ID: <20260626084608.1388806-13-a.fatoum@barebox.org> (raw)
In-Reply-To: <20260626084608.1388806-1-a.fatoum@barebox.org>
Instead of opencoding the checks at the various direct and indirect (via
cdev API) block device users that are going to be switched away from
hardcoding the 512 byte sector assumption, define some helpers.
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
common/block.c | 11 +++++++++++
include/block.h | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/common/block.c b/common/block.c
index 9d3865626555..5f509bfb9df3 100644
--- a/common/block.c
+++ b/common/block.c
@@ -14,6 +14,7 @@
#include <range.h>
#include <bootargs.h>
#include <file-list.h>
+#include <linux/log2.h>
LIST_HEAD(block_device_list);
EXPORT_SYMBOL(block_device_list);
@@ -53,6 +54,16 @@ static void blk_stats_record_write(struct block_device *blk, blkcnt_t count) { }
static void blk_stats_record_erase(struct block_device *blk, blkcnt_t count) { }
#endif
+int block_size_bits(struct device *dev, unsigned block_size)
+{
+ if (block_size < MIN_SECTOR_SIZE || !is_power_of_2(block_size)) {
+ dev_err(dev, "unsupported block size %u\n", block_size);
+ return -ENOTSUPP;
+ }
+
+ return ffs(block_size) - 1;
+}
+
static int chunk_flush(struct block_device *blk, struct chunk *chunk)
{
blkcnt_t len;
diff --git a/include/block.h b/include/block.h
index fa916f8d4ee7..9a0102db1565 100644
--- a/include/block.h
+++ b/include/block.h
@@ -3,6 +3,7 @@
#define __BLOCK_H
#include <driver.h>
+#include <disks.h>
#include <linux/list.h>
#include <linux/types.h>
@@ -68,6 +69,28 @@ struct block_device {
#define BLOCKSIZE(blk) (1u << (blk)->blockbits)
+int block_size_bits(struct device *dev, unsigned block_size);
+
+static inline u64 blockdevice_size(const struct block_device *blk)
+{
+ return blk->num_blocks << blk->blockbits;
+}
+
+static inline blkcnt_t
+blockdevice_round_nblocks(const struct block_device *blk, u64 nbytes)
+{
+ if (nbytes == 0)
+ return 0;
+
+ return (((u64)nbytes - 1) >> blk->blockbits) + 1;
+}
+
+static inline u64
+blockdevice_round_block_nbytes(const struct block_device *blk, u64 nbytes)
+{
+ return blockdevice_round_nblocks(blk, nbytes) << blk->blockbits;
+}
+
extern struct list_head block_device_list;
#define for_each_block_device(bdev) list_for_each_entry(bdev, &block_device_list, list)
@@ -126,4 +149,15 @@ static inline struct block_device *cdev_get_block_device(const struct cdev *cdev
return cdev_is_block_device(cdev) ? cdev->priv : NULL;
}
+static inline unsigned cdev_blockbits(const struct cdev *cdev)
+{
+ struct block_device *bdev = cdev_get_block_device(cdev);
+ return bdev ? bdev->blockbits : SECTOR_SHIFT;
+}
+
+static inline unsigned cdev_blocksize(const struct cdev *cdev)
+{
+ return 1u << cdev_blockbits(cdev);
+}
+
#endif /* __BLOCK_H */
--
2.47.3
next prev parent reply other threads:[~2026-06-26 8:47 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 8:42 [PATCH 00/26] block: add support for non-512 byte sectors Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 01/26] nvme: use barebox-appropriate 64-bit type for timeouts Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 02/26] nvme: fix buffer advancement when chunking due to max_hw_sectors Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 03/26] nvme: allow flush opcode Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 04/26] nvme: honor namespace block size for I/O Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 05/26] bootscan: fix detection of GPT Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 06/26] block: clarify that writebuffer_io_len returns sector counts Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 07/26] block: fix wrong type for discard_start/size byte ranges Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 08/26] block: fix discard zeroing too little memory Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 09/26] block: use logical block size for reparse checks Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 10/26] block: require lower bound of sector size to be 512 bytes Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 11/26] filetype: don't hardcode sector size in file_detect_partition_table Ahmad Fatoum
2026-06-26 8:42 ` Ahmad Fatoum [this message]
2026-06-26 8:42 ` [PATCH 13/26] bootscan: use block size for partition table probe Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 14/26] ramdisk: validate exported sector size Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 15/26] efi: block: fix sector size mismatch in block device registration and ops Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 16/26] efi: loader: disk: report block device size in Block I/O Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 17/26] efi: loader: file: report cdev block size in file info Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 18/26] partitions: use byte offset for first partition policy Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 19/26] partitions: dos: allocate correctly sized buffer for dos_partition_desc Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 20/26] partition: support non-512 byte sectors Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 21/26] fs: fat: fix garbage read when writing with bigger block size Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 22/26] fs: fat: support larger block device sectors Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 23/26] usb-storage: preserve READ CAPACITY sector size Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 24/26] fuzz: add 4K-sector partition ramdisk target Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 25/26] commands: parted: prepare use of non-512-byte sectors Ahmad Fatoum
2026-06-26 8:42 ` [PATCH 26/26] commands: parted: exit if block size if not 512 Ahmad Fatoum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260626084608.1388806-13-a.fatoum@barebox.org \
--to=a.fatoum@barebox.org \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox