block: simplify with PAGE_SECTORS_SHIFT
Subsystems (9)
v2 cover block: simplify with PAGE_SECTORS_SHIFT
A bit of block drivers have their own incantations with PAGE_SHIFT - SECTOR_SHIFT. Just simplfy and use PAGE_SECTORS_SHIFT all over.
Based on linux-next next-20230525.
Changes since v1:
o keep iomap math visibly simple
o Add tags for Reviews/acks
o rebase onto next-20230525
Luis Chamberlain (5):
block: annotate bdev_disk_changed() deprecation with a symbol
namespace
drbd: use PAGE_SECTORS_SHIFT and PAGE_SECTORS
iomap: simplify iomap_init() with PAGE_SECTORS
dm bufio: simplify by using PAGE_SECTORS_SHIFT
zram: use generic PAGE_SECTORS and PAGE_SECTORS_SHIFT
block/partitions/core.c | 6 +----- drivers/block/drbd/drbd_bitmap.c | 4 ++-- drivers/block/loop.c | 2 ++ drivers/block/zram/zram_drv.c | 12 ++++++------ drivers/block/zram/zram_drv.h | 2 -- drivers/md/dm-bufio.c | 4 ++-- drivers/s390/block/dasd_genhd.c | 2 ++ fs/iomap/buffered-io.c | 2 +- 8 files changed, 16 insertions(+), 18 deletions(-)
Signature · 1 line
2.39.2
PATCH v2 1/5 block: annotate bdev_disk_changed() deprecation with a symbol namespace
This ensures no other users pop up by mistake easily and provides us a with an easy vehicle to do the same with other routines should we need it later.
--- block/partitions/core.c | 6 +----- drivers/block/loop.c | 2 ++ drivers/s390/block/dasd_genhd.c | 2 ++ 3 files changed, 5 insertions(+), 5 deletions(-)
block/partitions/core.c +1 -5
@@ -690,11 +690,7 @@ int bdev_disk_changed(struct gendisk *disk, bool invalidate)return ret; } -/* -* Only exported for loop and dasd for historic reasons. Don't use in new -* code! -*/ -EXPORT_SYMBOL_GPL (bdev_disk_changed); +EXPORT_SYMBOL_NS_GPL (bdev_disk_changed,BLOCK_DEPRECATED );void *read_part_sector (struct parsed_partitions *state,sector_t n,Sector *p) {
drivers/block/loop.c +2 -0
@@ -37,6 +37,8 @@#include <linux/spinlock.h> #include <uapi/linux/loop.h> +MODULE_IMPORT_NS (BLOCK_DEPRECATED ); +/* Possible states of device */ enum { Lo_unbound,
drivers/s390/block/dasd_genhd.c +2 -0
@@ -25,6 +25,8 @@#include "dasd_int.h" +MODULE_IMPORT_NS (BLOCK_DEPRECATED ); +static unsigned int queue_depth =32 ;static unsigned int nr_hw_queues =4 ;
Signature · 1 line
2.39.2
Re: [PATCH v2 1/5] block: annotate bdev_disk_changed() deprecation with a symbol namespace
Quoted 3 lines · Luis Chamberlain
This ensures no other users pop up by mistake easily and provides us a with an easy vehicle to do the same with other routines should we need it later.
I don't see how this is related to the rest of the seris. I also don't think it's a good idea. The APIs isn't deprecated per se. It just should not be called by drivers. The right thing would be an interface like
EXPORT_SYMBOL_GPL_FOR(bdev_disk_changed, loop.ko, CONFIG_BLK_DEV_LOOP); EXPORT_SYMBOL_GPL_FOR(bdev_disk_changed, dasd_mod.ko, CONFIG_DASD);
with the modulo code enforcing that no one but the module this is explicitly exorted for can use the symbol.
Re: [PATCH v2 1/5] block: annotate bdev_disk_changed() deprecation with a symbol namespace
Quoted 6 lines · Christoph Hellwig
Quoted 3 lines · Luis Chamberlain
This ensures no other users pop up by mistake easily and provides us a with an easy vehicle to do the same with other routines should we need it later.
I don't see how this is related to the rest of the seris.
Jessh, sorry it is too late here and that was a typo that the commit went into the series. I'll go sleep now. This I just had queued as a reminder for the new annotation for deprecated symbols to be used in some situations.
Please ignore this patch.
Luis
PATCH v2 2/5 drbd: use PAGE_SECTORS_SHIFT and PAGE_SECTORS
In reply to Luis ChamberlainReplace common constants with generic versions.
This produces no functional changes.
--- drivers/block/drbd/drbd_bitmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/block/drbd/drbd_bitmap.c +2 -2
@@ -1000,7 +1000,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_hounsigned int len; first_bm_sect = device->ldev->md.md_offset + device->ldev->md.bm_offset; - on_disk_sector = first_bm_sect + (((sector_t )page_nr) << (PAGE_SHIFT -SECTOR_SHIFT )); + on_disk_sector = first_bm_sect + (((sector_t )page_nr) <<PAGE_SECTORS_SHIFT );/* this might happen with very small * flexible external meta data device,
@@ -1008,7 +1008,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho last_bm_sect =drbd_md_last_bitmap_sector (device->ldev);if (first_bm_sect <= on_disk_sector && last_bm_sect >= on_disk_sector) {sector_t len_sect = last_bm_sect - on_disk_sector +1 ; -if (len_sect <PAGE_SIZE /SECTOR_SIZE ) +if (len_sect <PAGE_SECTORS ) len = (unsigned int )len_sect*SECTOR_SIZE ;else len =PAGE_SIZE ;
Signature · 1 line
2.39.2
Re: [PATCH v2 2/5] drbd: use PAGE_SECTORS_SHIFT and PAGE_SECTORS
Looks good,
PATCH v2 3/5 iomap: simplify iomap_init() with PAGE_SECTORS
In reply to Luis ChamberlainReplace common constants with generic versions. This produces no functional changes.
--- fs/iomap/buffered-io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/iomap/buffered-io.c +1 -1
@@ -1831,7 +1831,7 @@ EXPORT_SYMBOL_GPL(iomap_writepages);static int __init iomap_init (void ) { -return bioset_init (&iomap_ioend_bioset,4 * (PAGE_SIZE /SECTOR_SIZE ), +return bioset_init (&iomap_ioend_bioset,4 *PAGE_SECTORS , offsetof(struct iomap_ioend , io_inline_bio),BIOSET_NEED_BVECS ); }
Signature · 1 line
2.39.2
Re: [PATCH v2 3/5] iomap: simplify iomap_init() with PAGE_SECTORS
Looks good:
Re: [PATCH v2 3/5] iomap: simplify iomap_init() with PAGE_SECTORS
In reply to Luis ChamberlainLooks good,
PATCH v2 4/5 dm bufio: simplify by using PAGE_SECTORS_SHIFT
In reply to Luis ChamberlainThe PAGE_SHIFT - SECTOR_SHIFT constant be replaced with PAGE_SECTORS_SHIFT defined in linux/blt_types.h, which is included by linux/blkdev.h.
This produces no functional changes.
--- drivers/md/dm-bufio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/md/dm-bufio.c +2 -2
@@ -1152,7 +1152,7 @@ static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask, gfp_mask & __GFP_NORETRY) { *data_mode =DATA_MODE_GET_FREE_PAGES ;return (void *)__get_free_pages (gfp_mask, - c->sectors_per_block_bits - (PAGE_SHIFT -SECTOR_SHIFT )); + c->sectors_per_block_bits - (PAGE_SECTORS_SHIFT )); } *data_mode =DATA_MODE_VMALLOC ;
@@ -1190,7 +1190,7 @@ static void free_buffer_data(struct dm_bufio_client *c,case DATA_MODE_GET_FREE_PAGES :free_pages ((unsigned long )data, - c->sectors_per_block_bits - (PAGE_SHIFT -SECTOR_SHIFT )); + c->sectors_per_block_bits - (PAGE_SECTORS_SHIFT ));break ;case DATA_MODE_VMALLOC :
Signature · 1 line
2.39.2
Re: [PATCH v2 4/5] dm bufio: simplify by using PAGE_SECTORS_SHIFT
drivers/md/dm-bufio.c static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask,
Quoted 10 lines · Luis Chamberlain
drivers/md/dm-bufio.c +2
-2*data_mode =DATA_MODE_GET_FREE_PAGES ;return (void *)__get_free_pages (gfp_mask, - c->sectors_per_block_bits - (PAGE_SHIFT -SECTOR_SHIFT )); + c->sectors_per_block_bits - (PAGE_SECTORS_SHIFT ));case DATA_MODE_GET_FREE_PAGES :free_pages ((unsigned long )data, - c->sectors_per_block_bits - (PAGE_SHIFT -SECTOR_SHIFT )); + c->sectors_per_block_bits - (PAGE_SECTORS_SHIFT ));
The parenthesis are completely unneeded in the new version, please remove them.
PATCH v2 5/5 zram: use generic PAGE_SECTORS and PAGE_SECTORS_SHIFT
In reply to Luis ChamberlainInstead of re-defining the already existing constants use the provided ones:
So replace:
o SECTORS_PER_PAGE_SHIFT with PAGE_SECTORS_SHIFT
o SECTORS_PER_PAGE with PAGE_SECTORS
This produces no functional changes.
--- drivers/block/zram/zram_drv.c | 12 ++++++------ drivers/block/zram/zram_drv.h | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-)
drivers/block/zram/zram_drv.c +6 -6
@@ -1834,8 +1834,8 @@ static ssize_t recompress_store(struct device *dev,static void zram_bio_discard (struct zram *zram,struct bio *bio) {size_t n = bio->bi_iter.bi_size; -u32 index = bio->bi_iter.bi_sector >>SECTORS_PER_PAGE_SHIFT ; -u32 offset = (bio->bi_iter.bi_sector & (SECTORS_PER_PAGE -1 )) << +u32 index = bio->bi_iter.bi_sector >>PAGE_SECTORS_SHIFT ; +u32 offset = (bio->bi_iter.bi_sector & (PAGE_SECTORS -1 )) <<SECTOR_SHIFT ;/*
@@ -1876,8 +1876,8 @@ static void zram_bio_read(struct zram *zram, struct bio *bio) start_time =bio_start_io_acct (bio);bio_for_each_segment (bv, bio, iter) { -u32 index = iter.bi_sector >>SECTORS_PER_PAGE_SHIFT ; -u32 offset = (iter.bi_sector & (SECTORS_PER_PAGE -1 )) << +u32 index = iter.bi_sector >>PAGE_SECTORS_SHIFT ; +u32 offset = (iter.bi_sector & (PAGE_SECTORS -1 )) <<SECTOR_SHIFT ;if (zram_bvec_read (zram, &bv, index, offset, bio) <0 ) {
@@ -1903,8 +1903,8 @@ static void zram_bio_write(struct zram *zram, struct bio *bio) start_time =bio_start_io_acct (bio);bio_for_each_segment (bv, bio, iter) { -u32 index = iter.bi_sector >>SECTORS_PER_PAGE_SHIFT ; -u32 offset = (iter.bi_sector & (SECTORS_PER_PAGE -1 )) << +u32 index = iter.bi_sector >>PAGE_SECTORS_SHIFT ; +u32 offset = (iter.bi_sector & (PAGE_SECTORS -1 )) <<SECTOR_SHIFT ;if (zram_bvec_write (zram, &bv, index, offset, bio) <0 ) {
drivers/block/zram/zram_drv.h +0 -2
@@ -21,8 +21,6 @@#include "zcomp.h" -#define SECTORS_PER_PAGE_SHIFT (PAGE_SHIFT - SECTOR_SHIFT) -#define SECTORS_PER_PAGE (1 << SECTORS_PER_PAGE_SHIFT)#define ZRAM_LOGICAL_BLOCK_SHIFT 12#define ZRAM_LOGICAL_BLOCK_SIZE (1 << ZRAM_LOGICAL_BLOCK_SHIFT)#define ZRAM_SECTOR_PER_LOGICAL_BLOCK \
Signature · 1 line
2.39.2
Re: [PATCH v2 5/5] zram: use generic PAGE_SECTORS and PAGE_SECTORS_SHIFT
drivers/block/zram/zram_drv.c static ssize_t recompress_store(struct device *dev, · line 1839
Quoted 3 lines · Luis Chamberlain
drivers/block/zram/zram_drv.c +2
-0+u32 index = bio->bi_iter.bi_sector >>PAGE_SECTORS_SHIFT ; +u32 offset = (bio->bi_iter.bi_sector & (PAGE_SECTORS -1 )) <<SECTOR_SHIFT ;
(PAGE_SECTORS - 1) is SECTOR_MASK, please use this.
Thanks,
Johannes
Quoted 20 lines · Luis Chamberlain
A bit of block drivers have their own incantations with
PAGE_SHIFT-SECTOR_SHIFT. Just simplfy and usePAGE_SECTORS_SHIFTall over.Based on linux-next next-20230525.
Changes since v1:
o keep iomap math visibly simple
o Add tags for Reviews/acks
o rebase onto next-20230525Luis Chamberlain (5):
block: annotatebdev_disk_changed()deprecation with a symbol
namespace
drbd: usePAGE_SECTORS_SHIFTandPAGE_SECTORS
iomap: simplifyiomap_init()withPAGE_SECTORS
dm bufio: simplify by usingPAGE_SECTORS_SHIFT
zram: use genericPAGE_SECTORSandPAGE_SECTORS_SHIFT
Quoted 10 lines
block/partitions/core.c | 6 +----- drivers/block/drbd/drbd_bitmap.c | 4 ++-- drivers/block/loop.c | 2 ++ drivers/block/zram/zram_drv.c | 12 ++++++------ drivers/block/zram/zram_drv.h | 2 -- drivers/md/dm-bufio.c | 4 ++-- drivers/s390/block/dasd_genhd.c | 2 ++ fs/iomap/buffered-io.c | 2 +- 8 files changed, 16 insertions(+), 18 deletions(-)
Hey Luis,
I've found another one in sd_zbc_revalidate_zones():
max_append = min_t(u32, logical_to_sectors(sdkp->device, zone_blocks), q->limits.max_segments << (PAGE_SHIFT - 9));
Mind taking care of it in the next round as well?
Thanks,
Johannes