Re: [PATCH v2 09/11] block: Expose queue nr_zones in sysfs

2018-10-11 Thread Ewan D. Milne
So in v2 you moved the #ifdef CONFIG_BLK_DEV_ZONED
so that nr_zones is always present?  It was previously
changed to keep the request_queue size smaller.

Would make more sense to make the nr_zones sysfs
code here conditional on CONFIG_BLK_DEV_ZONED?

-Ewan


On Thu, 2018-10-11 at 16:09 +0900, Damien Le Moal wrote:
> Expose through sysfs the nr_zones field of a zoned block device request
> queue. This represents the total number of zones of the device
> calculated using the known disk capacity and zone size.
> 
> Exposing this value helps in debugging disk issues as well as
> facilitating scripts based use of the disk (e.g. blktests).
> 
> Signed-off-by: Damien Le Moal 
> ---
>  block/blk-sysfs.c  | 11 +++
>  include/linux/blkdev.h |  2 +-
>  2 files changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
> index 3772671cf2bc..f7060a938bf9 100644
> --- a/block/blk-sysfs.c
> +++ b/block/blk-sysfs.c
> @@ -300,6 +300,11 @@ static ssize_t queue_zoned_show(struct request_queue *q, 
> char *page)
>   }
>  }
>  
> +static ssize_t queue_nr_zones_show(struct request_queue *q, char *page)
> +{
> + return queue_var_show(q->nr_zones, page);
> +}
> +
>  static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
>  {
>   return queue_var_show((blk_queue_nomerges(q) << 1) |
> @@ -637,6 +642,11 @@ static struct queue_sysfs_entry queue_zoned_entry = {
>   .show = queue_zoned_show,
>  };
>  
> +static struct queue_sysfs_entry queue_nr_zones_entry = {
> + .attr = {.name = "nr_zones", .mode = 0444 },
> + .show = queue_nr_zones_show,
> +};
> +
>  static struct queue_sysfs_entry queue_nomerges_entry = {
>   .attr = {.name = "nomerges", .mode = 0644 },
>   .show = queue_nomerges_show,
> @@ -727,6 +737,7 @@ static struct attribute *default_attrs[] = {
>   _write_zeroes_max_entry.attr,
>   _nonrot_entry.attr,
>   _zoned_entry.attr,
> + _nr_zones_entry.attr,
>   _nomerges_entry.attr,
>   _rq_affinity_entry.attr,
>   _iostats_entry.attr,
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index c24969b1741b..23ab53d2d4ca 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -593,7 +593,6 @@ struct request_queue {
>  
>   struct queue_limits limits;
>  
> -#ifdef CONFIG_BLK_DEV_ZONED
>   /*
>* Zoned block device information for request dispatch control.
>* nr_zones is the total number of zones of the device. This is always
> @@ -612,6 +611,7 @@ struct request_queue {
>* blk_mq_unfreeze_queue().
>*/
>   unsigned intnr_zones;
> +#ifdef CONFIG_BLK_DEV_ZONED
>   unsigned long   *seq_zones_bitmap;
>   unsigned long   *seq_zones_wlock;
>  #endif /* CONFIG_BLK_DEV_ZONED */




[PATCH v2 09/11] block: Expose queue nr_zones in sysfs

2018-10-11 Thread Damien Le Moal
Expose through sysfs the nr_zones field of a zoned block device request
queue. This represents the total number of zones of the device
calculated using the known disk capacity and zone size.

Exposing this value helps in debugging disk issues as well as
facilitating scripts based use of the disk (e.g. blktests).

Signed-off-by: Damien Le Moal 
---
 block/blk-sysfs.c  | 11 +++
 include/linux/blkdev.h |  2 +-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 3772671cf2bc..f7060a938bf9 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -300,6 +300,11 @@ static ssize_t queue_zoned_show(struct request_queue *q, 
char *page)
}
 }
 
+static ssize_t queue_nr_zones_show(struct request_queue *q, char *page)
+{
+   return queue_var_show(q->nr_zones, page);
+}
+
 static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
 {
return queue_var_show((blk_queue_nomerges(q) << 1) |
@@ -637,6 +642,11 @@ static struct queue_sysfs_entry queue_zoned_entry = {
.show = queue_zoned_show,
 };
 
+static struct queue_sysfs_entry queue_nr_zones_entry = {
+   .attr = {.name = "nr_zones", .mode = 0444 },
+   .show = queue_nr_zones_show,
+};
+
 static struct queue_sysfs_entry queue_nomerges_entry = {
.attr = {.name = "nomerges", .mode = 0644 },
.show = queue_nomerges_show,
@@ -727,6 +737,7 @@ static struct attribute *default_attrs[] = {
_write_zeroes_max_entry.attr,
_nonrot_entry.attr,
_zoned_entry.attr,
+   _nr_zones_entry.attr,
_nomerges_entry.attr,
_rq_affinity_entry.attr,
_iostats_entry.attr,
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index c24969b1741b..23ab53d2d4ca 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -593,7 +593,6 @@ struct request_queue {
 
struct queue_limits limits;
 
-#ifdef CONFIG_BLK_DEV_ZONED
/*
 * Zoned block device information for request dispatch control.
 * nr_zones is the total number of zones of the device. This is always
@@ -612,6 +611,7 @@ struct request_queue {
 * blk_mq_unfreeze_queue().
 */
unsigned intnr_zones;
+#ifdef CONFIG_BLK_DEV_ZONED
unsigned long   *seq_zones_bitmap;
unsigned long   *seq_zones_wlock;
 #endif /* CONFIG_BLK_DEV_ZONED */
-- 
2.17.1