block: Make struct request_queue smaller for CONFIG_BLK_DEV_ZONED=n
Exclude zoned block device members from struct request_queue for CONFIG_BLK_DEV_ZONED == n. Avoid breaking the build by only building the code that uses these struct request_queue members if CONFIG_BLK_DEV_ZONED != n. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Cc: Matias Bjorling <mb@lightnvm.io> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
7c8542b798
commit
6a5ac98465
|
@ -177,6 +177,10 @@ config BLK_DEBUG_FS
|
||||||
Unless you are building a kernel for a tiny system, you should
|
Unless you are building a kernel for a tiny system, you should
|
||||||
say Y here.
|
say Y here.
|
||||||
|
|
||||||
|
config BLK_DEBUG_FS_ZONED
|
||||||
|
bool
|
||||||
|
default BLK_DEBUG_FS && BLK_DEV_ZONED
|
||||||
|
|
||||||
config BLK_SED_OPAL
|
config BLK_SED_OPAL
|
||||||
bool "Logic for interfacing with Opal enabled SEDs"
|
bool "Logic for interfacing with Opal enabled SEDs"
|
||||||
---help---
|
---help---
|
||||||
|
|
|
@ -34,4 +34,5 @@ obj-$(CONFIG_BLK_MQ_RDMA) += blk-mq-rdma.o
|
||||||
obj-$(CONFIG_BLK_DEV_ZONED) += blk-zoned.o
|
obj-$(CONFIG_BLK_DEV_ZONED) += blk-zoned.o
|
||||||
obj-$(CONFIG_BLK_WBT) += blk-wbt.o
|
obj-$(CONFIG_BLK_WBT) += blk-wbt.o
|
||||||
obj-$(CONFIG_BLK_DEBUG_FS) += blk-mq-debugfs.o
|
obj-$(CONFIG_BLK_DEBUG_FS) += blk-mq-debugfs.o
|
||||||
|
obj-$(CONFIG_BLK_DEBUG_FS_ZONED)+= blk-mq-debugfs-zoned.o
|
||||||
obj-$(CONFIG_BLK_SED_OPAL) += sed-opal.o
|
obj-$(CONFIG_BLK_SED_OPAL) += sed-opal.o
|
||||||
|
|
24
block/blk-mq-debugfs-zoned.c
Normal file
24
block/blk-mq-debugfs-zoned.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Western Digital Corporation or its affiliates.
|
||||||
|
*
|
||||||
|
* This file is released under the GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
#include "blk-mq-debugfs.h"
|
||||||
|
|
||||||
|
int queue_zone_wlock_show(void *data, struct seq_file *m)
|
||||||
|
{
|
||||||
|
struct request_queue *q = data;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (!q->seq_zones_wlock)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < q->nr_zones; i++)
|
||||||
|
if (test_bit(i, q->seq_zones_wlock))
|
||||||
|
seq_printf(m, "%u\n", i);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -206,21 +206,6 @@ static ssize_t queue_write_hint_store(void *data, const char __user *buf,
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int queue_zone_wlock_show(void *data, struct seq_file *m)
|
|
||||||
{
|
|
||||||
struct request_queue *q = data;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!q->seq_zones_wlock)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (i = 0; i < q->nr_zones; i++)
|
|
||||||
if (test_bit(i, q->seq_zones_wlock))
|
|
||||||
seq_printf(m, "%u\n", i);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct blk_mq_debugfs_attr blk_mq_debugfs_queue_attrs[] = {
|
static const struct blk_mq_debugfs_attr blk_mq_debugfs_queue_attrs[] = {
|
||||||
{ "poll_stat", 0400, queue_poll_stat_show },
|
{ "poll_stat", 0400, queue_poll_stat_show },
|
||||||
{ "requeue_list", 0400, .seq_ops = &queue_requeue_list_seq_ops },
|
{ "requeue_list", 0400, .seq_ops = &queue_requeue_list_seq_ops },
|
||||||
|
|
|
@ -80,4 +80,13 @@ static inline void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hc
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEBUG_FS_ZONED
|
||||||
|
int queue_zone_wlock_show(void *data, struct seq_file *m);
|
||||||
|
#else
|
||||||
|
static inline int queue_zone_wlock_show(void *data, struct seq_file *m)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -592,6 +592,7 @@ struct request_queue {
|
||||||
|
|
||||||
struct queue_limits limits;
|
struct queue_limits limits;
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_ZONED
|
||||||
/*
|
/*
|
||||||
* Zoned block device information for request dispatch control.
|
* Zoned block device information for request dispatch control.
|
||||||
* nr_zones is the total number of zones of the device. This is always
|
* nr_zones is the total number of zones of the device. This is always
|
||||||
|
@ -612,6 +613,7 @@ struct request_queue {
|
||||||
unsigned int nr_zones;
|
unsigned int nr_zones;
|
||||||
unsigned long *seq_zones_bitmap;
|
unsigned long *seq_zones_bitmap;
|
||||||
unsigned long *seq_zones_wlock;
|
unsigned long *seq_zones_wlock;
|
||||||
|
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sg stuff
|
* sg stuff
|
||||||
|
@ -800,6 +802,7 @@ static inline unsigned int blk_queue_zone_sectors(struct request_queue *q)
|
||||||
return blk_queue_is_zoned(q) ? q->limits.chunk_sectors : 0;
|
return blk_queue_is_zoned(q) ? q->limits.chunk_sectors : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_ZONED
|
||||||
static inline unsigned int blk_queue_zone_no(struct request_queue *q,
|
static inline unsigned int blk_queue_zone_no(struct request_queue *q,
|
||||||
sector_t sector)
|
sector_t sector)
|
||||||
{
|
{
|
||||||
|
@ -815,6 +818,7 @@ static inline bool blk_queue_zone_is_seq(struct request_queue *q,
|
||||||
return false;
|
return false;
|
||||||
return test_bit(blk_queue_zone_no(q, sector), q->seq_zones_bitmap);
|
return test_bit(blk_queue_zone_no(q, sector), q->seq_zones_bitmap);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||||
|
|
||||||
static inline bool rq_is_sync(struct request *rq)
|
static inline bool rq_is_sync(struct request *rq)
|
||||||
{
|
{
|
||||||
|
@ -1065,6 +1069,7 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
|
||||||
return blk_rq_cur_bytes(rq) >> SECTOR_SHIFT;
|
return blk_rq_cur_bytes(rq) >> SECTOR_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_ZONED
|
||||||
static inline unsigned int blk_rq_zone_no(struct request *rq)
|
static inline unsigned int blk_rq_zone_no(struct request *rq)
|
||||||
{
|
{
|
||||||
return blk_queue_zone_no(rq->q, blk_rq_pos(rq));
|
return blk_queue_zone_no(rq->q, blk_rq_pos(rq));
|
||||||
|
@ -1074,6 +1079,7 @@ static inline unsigned int blk_rq_zone_is_seq(struct request *rq)
|
||||||
{
|
{
|
||||||
return blk_queue_zone_is_seq(rq->q, blk_rq_pos(rq));
|
return blk_queue_zone_is_seq(rq->q, blk_rq_pos(rq));
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BLK_DEV_ZONED */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some commands like WRITE SAME have a payload or data transfer size which
|
* Some commands like WRITE SAME have a payload or data transfer size which
|
||||||
|
|
Loading…
Reference in a new issue