From: Hannes Reinecke <hare@suse.de>
To: Mike Snitzer <snitzer@redhat.com>
Cc: Damien LeMoal <damien.lemoal@wdc.com>,
Bob Liu <bob.liu@oracle.com>,
dm-devel@redhat.com
Subject: [PATCH 01/15] dm-zoned: add 'status' callback
Date: Mon, 11 May 2020 10:24:16 +0200 [thread overview]
Message-ID: <20200511082430.39455-2-hare@suse.de> (raw)
In-Reply-To: <20200511082430.39455-1-hare@suse.de>
Add callback to supply information for 'dmsetup status'
and 'dmsetup table'. The output for 'dmsetup status' is
0 <size> zoned <nr_zones> zones <nr_unmap_rnd>/<nr_rnd> random <nr_unmap_seq>/<nr_seq> sequential
where <nr_unmap_rnd> is the number of unmapped (ie free) random zones,
<nr_rnd> the total number of random zones, <nr_unmap_seq> the number
of unmapped sequential zones, and <nr_seq> the total number of
sequential zones.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Bob Liu <bob.liu@oracle.com>
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
---
.../admin-guide/device-mapper/dm-zoned.rst | 16 +++++++++++++
drivers/md/dm-zoned-metadata.c | 15 +++++++++++++
drivers/md/dm-zoned-target.c | 26 ++++++++++++++++++++++
drivers/md/dm-zoned.h | 3 +++
4 files changed, 60 insertions(+)
diff --git a/Documentation/admin-guide/device-mapper/dm-zoned.rst b/Documentation/admin-guide/device-mapper/dm-zoned.rst
index 07f56ebc1730..4165fbf1aeb6 100644
--- a/Documentation/admin-guide/device-mapper/dm-zoned.rst
+++ b/Documentation/admin-guide/device-mapper/dm-zoned.rst
@@ -144,3 +144,19 @@ underlying zoned block device name. Ex::
echo "0 `blockdev --getsize ${dev}` zoned ${dev}" | \
dmsetup create dmz-`basename ${dev}`
+
+Information about the internal layout and current usage of the zones can
+be obtained with the 'status' callback from dmsetup:
+
+Ex::
+
+ dmsetup status /dev/dm-X
+
+will return a line
+
+ 0 <size> zoned <nr_zones> zones <nr_unmap_rnd>/<nr_rnd> random <nr_unmap_seq>/<nr_seq> sequential
+
+where <nr_zones> is the total number of zones, <nr_unmap_rnd> is the number
+of unmapped (ie free) random zones, <nr_rnd> the total number of zones,
+<nr_unmap_seq> the number of unmapped sequential zones, and <nr_seq> the
+total number of sequential zones.
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index 369de15c4e80..c8787560fa9f 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -202,6 +202,11 @@ sector_t dmz_start_block(struct dmz_metadata *zmd, struct dm_zone *zone)
return (sector_t)dmz_id(zmd, zone) << zmd->dev->zone_nr_blocks_shift;
}
+unsigned int dmz_nr_zones(struct dmz_metadata *zmd)
+{
+ return zmd->dev->nr_zones;
+}
+
unsigned int dmz_nr_chunks(struct dmz_metadata *zmd)
{
return zmd->nr_chunks;
@@ -217,6 +222,16 @@ unsigned int dmz_nr_unmap_rnd_zones(struct dmz_metadata *zmd)
return atomic_read(&zmd->unmap_nr_rnd);
}
+unsigned int dmz_nr_seq_zones(struct dmz_metadata *zmd)
+{
+ return zmd->nr_seq;
+}
+
+unsigned int dmz_nr_unmap_seq_zones(struct dmz_metadata *zmd)
+{
+ return atomic_read(&zmd->unmap_nr_seq);
+}
+
/*
* Lock/unlock mapping table.
* The map lock also protects all the zone lists.
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index f4f83d39b3dc..0b4b27d280fb 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -965,6 +965,31 @@ static int dmz_iterate_devices(struct dm_target *ti,
return fn(ti, dmz->ddev, 0, capacity, data);
}
+static void dmz_status(struct dm_target *ti, status_type_t type,
+ unsigned int status_flags, char *result,
+ unsigned int maxlen)
+{
+ struct dmz_target *dmz = ti->private;
+ ssize_t sz = 0;
+ char buf[BDEVNAME_SIZE];
+
+ switch (type) {
+ case STATUSTYPE_INFO:
+ DMEMIT("%u zones %u/%u random %u/%u sequential",
+ dmz_nr_zones(dmz->metadata),
+ dmz_nr_unmap_rnd_zones(dmz->metadata),
+ dmz_nr_rnd_zones(dmz->metadata),
+ dmz_nr_unmap_seq_zones(dmz->metadata),
+ dmz_nr_seq_zones(dmz->metadata));
+ break;
+ case STATUSTYPE_TABLE:
+ format_dev_t(buf, dmz->dev->bdev->bd_dev);
+ DMEMIT("%s", buf);
+ break;
+ }
+ return;
+}
+
static struct target_type dmz_type = {
.name = "zoned",
.version = {1, 1, 0},
@@ -978,6 +1003,7 @@ static struct target_type dmz_type = {
.postsuspend = dmz_suspend,
.resume = dmz_resume,
.iterate_devices = dmz_iterate_devices,
+ .status = dmz_status,
};
static int __init dmz_init(void)
diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h
index 5b5e493d479c..884c0e586082 100644
--- a/drivers/md/dm-zoned.h
+++ b/drivers/md/dm-zoned.h
@@ -190,8 +190,11 @@ void dmz_free_zone(struct dmz_metadata *zmd, struct dm_zone *zone);
void dmz_map_zone(struct dmz_metadata *zmd, struct dm_zone *zone,
unsigned int chunk);
void dmz_unmap_zone(struct dmz_metadata *zmd, struct dm_zone *zone);
+unsigned int dmz_nr_zones(struct dmz_metadata *zmd);
unsigned int dmz_nr_rnd_zones(struct dmz_metadata *zmd);
unsigned int dmz_nr_unmap_rnd_zones(struct dmz_metadata *zmd);
+unsigned int dmz_nr_seq_zones(struct dmz_metadata *zmd);
+unsigned int dmz_nr_unmap_seq_zones(struct dmz_metadata *zmd);
/*
* Activate a zone (increment its reference count).
--
2.16.4
next prev parent reply other threads:[~2020-05-11 8:24 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-11 8:24 [PATCHv6 00/14] dm-zoned: metadata version 2 Hannes Reinecke
2020-05-11 8:24 ` Hannes Reinecke [this message]
2020-05-11 8:24 ` [PATCH 02/15] dm-zoned: add 'message' callback Hannes Reinecke
2020-05-11 8:24 ` [PATCH 03/15] dm-zoned: store zone id within the zone structure and kill dmz_id() Hannes Reinecke
2020-05-11 8:24 ` [PATCH 04/15] dm-zoned: use array for superblock zones Hannes Reinecke
2020-05-11 8:24 ` [PATCH 05/15] dm-zoned: store device in struct dmz_sb Hannes Reinecke
2020-05-11 8:24 ` [PATCH 06/15] dm-zoned: move fields from struct dmz_dev to dmz_metadata Hannes Reinecke
2020-05-11 8:24 ` [PATCH 07/15] dm-zoned: introduce dmz_metadata_label() to format device name Hannes Reinecke
2020-05-11 8:24 ` [PATCH 08/15] dm-zoned: Introduce dmz_dev_is_dying() and dmz_check_dev() Hannes Reinecke
2020-05-11 8:24 ` [PATCH 09/15] dm-zoned: remove 'dev' argument from reclaim Hannes Reinecke
2020-05-11 8:24 ` [PATCH 10/15] dm-zoned: replace 'target' pointer in the bio context Hannes Reinecke
2020-05-11 8:24 ` [PATCH 11/15] dm-zoned: use dmz_zone_to_dev() when handling metadata I/O Hannes Reinecke
2020-05-11 8:24 ` [PATCH 12/15] dm-zoned: add metadata logging functions Hannes Reinecke
2020-05-11 8:24 ` [PATCH 13/15] dm-zoned: Reduce logging output on startup Hannes Reinecke
2020-05-11 8:24 ` [PATCH 14/15] dm-zoned: ignore metadata zone in dmz_alloc_zone() Hannes Reinecke
2020-05-11 8:24 ` [PATCH 15/15] dm-zoned: metadata version 2 Hannes Reinecke
2020-05-11 8:36 ` Damien Le Moal
2020-05-11 8:46 ` Hannes Reinecke
2020-05-11 8:51 ` Damien Le Moal
2020-05-11 9:18 ` Hannes Reinecke
2020-05-11 9:20 ` Damien Le Moal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200511082430.39455-2-hare@suse.de \
--to=hare@suse.de \
--cc=bob.liu@oracle.com \
--cc=damien.lemoal@wdc.com \
--cc=dm-devel@redhat.com \
--cc=snitzer@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.