aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/blkdev.h
diff options
context:
space:
mode:
authorBart Van Assche <bart.vanassche@wdc.com>2018-03-14 18:48:06 -0400
committerJens Axboe <axboe@kernel.dk>2018-03-17 16:45:23 -0400
commit233bde21aa43516baa013ef7ac33f3427056db3e (patch)
treec90ab5a8f118fad728fd1506e672885834f80bb6 /include/linux/blkdev.h
parentec6dcf63c55c8b09b44fe5990082b07baf139c69 (diff)
block: Move SECTOR_SIZE and SECTOR_SHIFT definitions into <linux/blkdev.h>
It happens often while I'm preparing a patch for a block driver that I'm wondering: is a definition of SECTOR_SIZE and/or SECTOR_SHIFT available for this driver? Do I have to introduce definitions of these constants before I can use these constants? To avoid this confusion, move the existing definitions of SECTOR_SIZE and SECTOR_SHIFT into the <linux/blkdev.h> header file such that these become available for all block drivers. Make the SECTOR_SIZE definition in the uapi msdos_fs.h header file conditional to avoid that including that header file after <linux/blkdev.h> causes the compiler to complain about a SECTOR_SIZE redefinition. Note: the SECTOR_SIZE / SECTOR_SHIFT / SECTOR_BITS definitions have not been removed from uapi header files nor from NAND drivers in which these constants are used for another purpose than converting block layer offsets and sizes into a number of sectors. Cc: David S. Miller <davem@davemloft.net> Cc: Mike Snitzer <snitzer@redhat.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Nitin Gupta <ngupta@vflare.org> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r--include/linux/blkdev.h42
1 files changed, 31 insertions, 11 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 19eaf8d89368..9af3e0f430bc 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1022,6 +1022,19 @@ static inline struct request_queue *bdev_get_queue(struct block_device *bdev)
1022} 1022}
1023 1023
1024/* 1024/*
1025 * The basic unit of block I/O is a sector. It is used in a number of contexts
1026 * in Linux (blk, bio, genhd). The size of one sector is 512 = 2**9
1027 * bytes. Variables of type sector_t represent an offset or size that is a
1028 * multiple of 512 bytes. Hence these two constants.
1029 */
1030#ifndef SECTOR_SHIFT
1031#define SECTOR_SHIFT 9
1032#endif
1033#ifndef SECTOR_SIZE
1034#define SECTOR_SIZE (1 << SECTOR_SHIFT)
1035#endif
1036
1037/*
1025 * blk_rq_pos() : the current sector 1038 * blk_rq_pos() : the current sector
1026 * blk_rq_bytes() : bytes left in the entire request 1039 * blk_rq_bytes() : bytes left in the entire request
1027 * blk_rq_cur_bytes() : bytes left in the current segment 1040 * blk_rq_cur_bytes() : bytes left in the current segment
@@ -1048,12 +1061,12 @@ extern unsigned int blk_rq_err_bytes(const struct request *rq);
1048 1061
1049static inline unsigned int blk_rq_sectors(const struct request *rq) 1062static inline unsigned int blk_rq_sectors(const struct request *rq)
1050{ 1063{
1051 return blk_rq_bytes(rq) >> 9; 1064 return blk_rq_bytes(rq) >> SECTOR_SHIFT;
1052} 1065}
1053 1066
1054static inline unsigned int blk_rq_cur_sectors(const struct request *rq) 1067static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
1055{ 1068{
1056 return blk_rq_cur_bytes(rq) >> 9; 1069 return blk_rq_cur_bytes(rq) >> SECTOR_SHIFT;
1057} 1070}
1058 1071
1059static inline unsigned int blk_rq_zone_no(struct request *rq) 1072static inline unsigned int blk_rq_zone_no(struct request *rq)
@@ -1083,7 +1096,8 @@ static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
1083 int op) 1096 int op)
1084{ 1097{
1085 if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE)) 1098 if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE))
1086 return min(q->limits.max_discard_sectors, UINT_MAX >> 9); 1099 return min(q->limits.max_discard_sectors,
1100 UINT_MAX >> SECTOR_SHIFT);
1087 1101
1088 if (unlikely(op == REQ_OP_WRITE_SAME)) 1102 if (unlikely(op == REQ_OP_WRITE_SAME))
1089 return q->limits.max_write_same_sectors; 1103 return q->limits.max_write_same_sectors;
@@ -1395,16 +1409,21 @@ extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
1395static inline int sb_issue_discard(struct super_block *sb, sector_t block, 1409static inline int sb_issue_discard(struct super_block *sb, sector_t block,
1396 sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags) 1410 sector_t nr_blocks, gfp_t gfp_mask, unsigned long flags)
1397{ 1411{
1398 return blkdev_issue_discard(sb->s_bdev, block << (sb->s_blocksize_bits - 9), 1412 return blkdev_issue_discard(sb->s_bdev,
1399 nr_blocks << (sb->s_blocksize_bits - 9), 1413 block << (sb->s_blocksize_bits -
1414 SECTOR_SHIFT),
1415 nr_blocks << (sb->s_blocksize_bits -
1416 SECTOR_SHIFT),
1400 gfp_mask, flags); 1417 gfp_mask, flags);
1401} 1418}
1402static inline int sb_issue_zeroout(struct super_block *sb, sector_t block, 1419static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
1403 sector_t nr_blocks, gfp_t gfp_mask) 1420 sector_t nr_blocks, gfp_t gfp_mask)
1404{ 1421{
1405 return blkdev_issue_zeroout(sb->s_bdev, 1422 return blkdev_issue_zeroout(sb->s_bdev,
1406 block << (sb->s_blocksize_bits - 9), 1423 block << (sb->s_blocksize_bits -
1407 nr_blocks << (sb->s_blocksize_bits - 9), 1424 SECTOR_SHIFT),
1425 nr_blocks << (sb->s_blocksize_bits -
1426 SECTOR_SHIFT),
1408 gfp_mask, 0); 1427 gfp_mask, 0);
1409} 1428}
1410 1429
@@ -1511,7 +1530,8 @@ static inline int queue_alignment_offset(struct request_queue *q)
1511static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector) 1530static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t sector)
1512{ 1531{
1513 unsigned int granularity = max(lim->physical_block_size, lim->io_min); 1532 unsigned int granularity = max(lim->physical_block_size, lim->io_min);
1514 unsigned int alignment = sector_div(sector, granularity >> 9) << 9; 1533 unsigned int alignment = sector_div(sector, granularity >> SECTOR_SHIFT)
1534 << SECTOR_SHIFT;
1515 1535
1516 return (granularity + lim->alignment_offset - alignment) % granularity; 1536 return (granularity + lim->alignment_offset - alignment) % granularity;
1517} 1537}
@@ -1545,8 +1565,8 @@ static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector
1545 return 0; 1565 return 0;
1546 1566
1547 /* Why are these in bytes, not sectors? */ 1567 /* Why are these in bytes, not sectors? */
1548 alignment = lim->discard_alignment >> 9; 1568 alignment = lim->discard_alignment >> SECTOR_SHIFT;
1549 granularity = lim->discard_granularity >> 9; 1569 granularity = lim->discard_granularity >> SECTOR_SHIFT;
1550 if (!granularity) 1570 if (!granularity)
1551 return 0; 1571 return 0;
1552 1572
@@ -1557,7 +1577,7 @@ static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector
1557 offset = (granularity + alignment - offset) % granularity; 1577 offset = (granularity + alignment - offset) % granularity;
1558 1578
1559 /* Turn it back into bytes, gaah */ 1579 /* Turn it back into bytes, gaah */
1560 return offset << 9; 1580 return offset << SECTOR_SHIFT;
1561} 1581}
1562 1582
1563static inline int bdev_discard_alignment(struct block_device *bdev) 1583static inline int bdev_discard_alignment(struct block_device *bdev)