Message ID | 20200507075100.1779-8-thunder.leizhen@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | clean up SECTOR related macros and sectors/pages conversions | expand |
On Thu, May 07, 2020 at 03:50:57PM +0800, Zhen Lei wrote: > +++ b/block/blk-settings.c > @@ -150,7 +150,7 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto > unsigned int max_sectors; > > if ((max_hw_sectors << 9) < PAGE_SIZE) { > - max_hw_sectors = 1 << (PAGE_SHIFT - 9); > + max_hw_sectors = PAGE_SECTORS; Surely this should be: if (max_hw_sectors < PAGE_SECTORS) { max_hw_sectors = PAGE_SECTORS; ... no? > - page = read_mapping_page(mapping, > - (pgoff_t)(n >> (PAGE_SHIFT - 9)), NULL); > + page = read_mapping_page(mapping, (pgoff_t)sectors_to_npage(n), NULL); ... again, get the type right, and you won't need the cast.
On 2020/5/15 12:19, Matthew Wilcox wrote: > On Thu, May 07, 2020 at 03:50:57PM +0800, Zhen Lei wrote: >> +++ b/block/blk-settings.c >> @@ -150,7 +150,7 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto >> unsigned int max_sectors; >> >> if ((max_hw_sectors << 9) < PAGE_SIZE) { >> - max_hw_sectors = 1 << (PAGE_SHIFT - 9); >> + max_hw_sectors = PAGE_SECTORS; > > Surely this should be: > > if (max_hw_sectors < PAGE_SECTORS) { > max_hw_sectors = PAGE_SECTORS; > > ... no? I've noticed this place before. "(max_hw_sectors << 9) < PAGE_SIZE" can also make sure that max_hw_sectors is not too large, that means (max_hw_sectors << 9) may overflow. > >> - page = read_mapping_page(mapping, >> - (pgoff_t)(n >> (PAGE_SHIFT - 9)), NULL); >> + page = read_mapping_page(mapping, (pgoff_t)sectors_to_npage(n), NULL); > > ... again, get the type right, and you won't need the cast. OK, I'll consider it. > > > . >
diff --git a/block/blk-settings.c b/block/blk-settings.c index 14397b4c4b53..171665ed8318 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -150,7 +150,7 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto unsigned int max_sectors; if ((max_hw_sectors << 9) < PAGE_SIZE) { - max_hw_sectors = 1 << (PAGE_SHIFT - 9); + max_hw_sectors = PAGE_SECTORS; printk(KERN_INFO "%s: set to minimum %d\n", __func__, max_hw_sectors); } @@ -159,7 +159,7 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto max_sectors = min_not_zero(max_hw_sectors, limits->max_dev_sectors); max_sectors = min_t(unsigned int, max_sectors, BLK_DEF_MAX_SECTORS); limits->max_sectors = max_sectors; - q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9); + q->backing_dev_info->io_pages = sectors_to_npage(max_sectors); } EXPORT_SYMBOL(blk_queue_max_hw_sectors); @@ -630,7 +630,7 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, } t->backing_dev_info->io_pages = - t->limits.max_sectors >> (PAGE_SHIFT - 9); + sectors_to_npage(t->limits.max_sectors); } EXPORT_SYMBOL(disk_stack_limits); diff --git a/block/partitions/core.c b/block/partitions/core.c index 9ef48a8cff86..4859739a2414 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -640,8 +640,7 @@ void *read_part_sector(struct parsed_partitions *state, sector_t n, Sector *p) return NULL; } - page = read_mapping_page(mapping, - (pgoff_t)(n >> (PAGE_SHIFT - 9)), NULL); + page = read_mapping_page(mapping, (pgoff_t)sectors_to_npage(n), NULL); if (IS_ERR(page)) goto out; if (PageError(page)) @@ -649,7 +648,7 @@ void *read_part_sector(struct parsed_partitions *state, sector_t n, Sector *p) p->v = page; return (unsigned char *)page_address(page) + - ((n & ((1 << (PAGE_SHIFT - 9)) - 1)) << SECTOR_SHIFT); + ((n & (PAGE_SECTORS - 1)) << SECTOR_SHIFT); out_put_page: put_page(page); out:
1. Replace "1 << (PAGE_SHIFT - 9)" with PAGE_SECTORS 2. Replace ">> (PAGE_SHIFT - 9)" with sectors_to_npage() Suggested-by: Matthew Wilcox <willy@infradead.org> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> --- block/blk-settings.c | 6 +++--- block/partitions/core.c | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-)