From: Hannes Reinecke <hare@suse.de>
To: Damien LeMoal <damien.lemoal@wdc.com>
Cc: dm-devel@redhat.com, Johannes Thumshirn <jth@kernel.org>,
Mike Snitzer <snitzer@redhat.com>
Subject: [PATCH 2/2] dm-zoned: add 'status' and 'message' callbacks
Date: Mon, 23 Mar 2020 16:03:52 +0100 [thread overview]
Message-ID: <20200323150352.107826-3-hare@suse.de> (raw)
In-Reply-To: <20200323150352.107826-1-hare@suse.de>
Add callbacks to supply information for 'dmsetup status'
and 'dmsetup info', and implement the message 'reclaim'
to start the reclaim worker.
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/md/dm-zoned-metadata.c | 15 ++++++++++
drivers/md/dm-zoned-target.c | 50 ++++++++++++++++++++++++++++++++++
drivers/md/dm-zoned.h | 3 ++
3 files changed, 68 insertions(+)
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index 41cc3a29db0b..878e152250ab 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -219,6 +219,11 @@ sector_t dmz_start_block(struct dmz_metadata *zmd, struct dm_zone *zone)
return zone_id << zmd->dev->zone_nr_blocks_shift;
}
+unsigned int dmz_nr_zones(struct dmz_metadata *zmd)
+{
+ return zmd->nr_zones;
+}
+
unsigned int dmz_nr_chunks(struct dmz_metadata *zmd)
{
return zmd->nr_chunks;
@@ -244,6 +249,16 @@ unsigned int dmz_nr_unmap_cache_zones(struct dmz_metadata *zmd)
return atomic_read(&zmd->unmap_nr_cache);
}
+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 3f25953672b9..1c0368981f49 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -1050,6 +1050,54 @@ 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 cache "
+ "%u/%u random "
+ "%u/%u sequential",
+ dmz_nr_zones(dmz->metadata),
+ dmz_nr_unmap_cache_zones(dmz->metadata),
+ dmz_nr_cache_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);
+ if (dmz->cdev) {
+ format_dev_t(buf, dmz->cdev->bdev->bd_dev);
+ DMEMIT("%s ", buf);
+ }
+ break;
+ }
+ return;
+}
+
+static int dmz_message(struct dm_target *ti, unsigned int argc, char **argv,
+ char *result, unsigned int maxlen)
+{
+ struct dmz_target *dmz = ti->private;
+ int r = -EINVAL;
+
+ if (!strcasecmp(argv[0], "reclaim")) {
+ dmz_schedule_reclaim(dmz->reclaim);
+ r = 0;
+ } else
+ DMERR("unrecognized message %s", argv[0]);
+ return r;
+}
+
static struct target_type dmz_type = {
.name = "zoned",
.version = {1, 1, 0},
@@ -1063,6 +1111,8 @@ static struct target_type dmz_type = {
.postsuspend = dmz_suspend,
.resume = dmz_resume,
.iterate_devices = dmz_iterate_devices,
+ .status = dmz_status,
+ .message = dmz_message,
};
static int __init dmz_init(void)
diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h
index c2b6a919681a..2b3745e8f679 100644
--- a/drivers/md/dm-zoned.h
+++ b/drivers/md/dm-zoned.h
@@ -213,10 +213,13 @@ 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_cache_zones(struct dmz_metadata *zmd);
unsigned int dmz_nr_unmap_cache_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.25.0
next prev parent reply other threads:[~2020-03-23 15:03 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-23 15:03 [PATCH RFC 0/2] dm-zoned: add cache device Hannes Reinecke
2020-03-23 15:03 ` [PATCH 1/2] dm-zoned: cache device for zones Hannes Reinecke
2020-03-24 3:52 ` Damien Le Moal
2020-03-24 4:22 ` Bob Liu
2020-03-24 7:51 ` Hannes Reinecke
2020-03-24 9:03 ` Damien Le Moal
2020-03-23 15:03 ` Hannes Reinecke [this message]
2020-03-24 3:54 ` [PATCH 2/2] dm-zoned: add 'status' and 'message' callbacks Damien Le Moal
2020-03-24 3:59 ` Mike Snitzer
2020-03-24 4:01 ` Damien Le Moal
2020-03-23 15:15 ` [PATCH RFC 0/2] dm-zoned: add cache device Mike Snitzer
2020-03-23 15:26 ` Hannes Reinecke
2020-03-23 15:39 ` Mike Snitzer
2020-03-23 16:10 ` Hannes Reinecke
2020-03-23 16:52 ` Mike Snitzer
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=20200323150352.107826-3-hare@suse.de \
--to=hare@suse.de \
--cc=damien.lemoal@wdc.com \
--cc=dm-devel@redhat.com \
--cc=jth@kernel.org \
--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.