Message ID | 20160623133016.3781907-1-arnd@arndb.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Thanks Arnd,
the series looks fine to me:
Reviewed-by: Christoph Hellwig <hch@lst.de>
--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Looks good, for the series:
Reviewed-by: Sagi Grimbeg <sagi@grimbeg.me>
--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 23 Jun 2016, Arnd Bergmann wrote: >Several drivers use an expensive do_div() to compute the number >of logical or physical blocks in a blockdev, which can be done >more efficiently using a shift, since the blocksize is always >a power of two number. > >Let's introduce bdev_logical_block_count() and bdev_physical_block_count() >helper functions mirroring the bdev_logical_block_size() and >bdev_physical_block_size() interfaces for the block size. >@@ -1226,6 +1226,13 @@ static inline unsigned short bdev_logical_block_size(struct block_device *bdev) > return queue_logical_block_size(bdev_get_queue(bdev)); > } > >+static inline sector_t bdev_logical_block_count(struct block_device *bdev) Curious, why not just return u64 instead for all these instead of sector_t (ie dealing with lba, it reads weird)? Thanks, Davidlohr -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 9d1e0a4650dc..ae8c408f6c22 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1226,6 +1226,13 @@ static inline unsigned short bdev_logical_block_size(struct block_device *bdev) return queue_logical_block_size(bdev_get_queue(bdev)); } +static inline sector_t bdev_logical_block_count(struct block_device *bdev) +{ + unsigned int block_shift = ilog2(bdev_logical_block_size(bdev)); + + return bdev->bd_inode->i_size >> block_shift; +} + static inline unsigned int queue_physical_block_size(struct request_queue *q) { return q->limits.physical_block_size; @@ -1236,6 +1243,13 @@ static inline unsigned int bdev_physical_block_size(struct block_device *bdev) return queue_physical_block_size(bdev_get_queue(bdev)); } +static inline sector_t bdev_physical_block_count(struct block_device *bdev) +{ + unsigned int block_shift = ilog2(bdev_physical_block_size(bdev)); + + return bdev->bd_inode->i_size >> block_shift; +} + static inline unsigned int queue_io_min(struct request_queue *q) { return q->limits.io_min;
Several drivers use an expensive do_div() to compute the number of logical or physical blocks in a blockdev, which can be done more efficiently using a shift, since the blocksize is always a power of two number. Let's introduce bdev_logical_block_count() and bdev_physical_block_count() helper functions mirroring the bdev_logical_block_size() and bdev_physical_block_size() interfaces for the block size. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Suggested-by: Christoph Hellwig <hch@infradead.org> --- include/linux/blkdev.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)