Message ID | 20200327070849.67694-1-hare@suse.de (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | dm-zoned: add 'status' and 'message' callbacks | expand |
On 2020/03/27 16:09, Hannes Reinecke wrote: > 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> Looks good. Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> > --- > drivers/md/dm-zoned-metadata.c | 15 +++++++++++++++ > drivers/md/dm-zoned-target.c | 43 ++++++++++++++++++++++++++++++++++++++++++ > drivers/md/dm-zoned.h | 3 +++ > 3 files changed, 61 insertions(+) > > diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c > index 516c7b671d25..6c456b9165db 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..44e30a7de8b9 100644 > --- a/drivers/md/dm-zoned-target.c > +++ b/drivers/md/dm-zoned-target.c > @@ -965,6 +965,47 @@ 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 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}, > @@ -978,6 +1019,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 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). >
On Fri, Mar 27 2020 at 3:08am -0400, Hannes Reinecke <hare@suse.de> wrote: > Add callbacks to supply information for 'dmsetup status' > and 'dmsetup info', and implement the message 'reclaim' > to start the reclaim worker. Who/What will use the 'reclaim' message? Shouldn't it be documented? Think the dmz_status changes should be split out from this reclaim message. BTW, these dm-zoned changes (and your following 4 patch set) missed 5.7 -- merge window opened Sunday. Mike -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 516c7b671d25..6c456b9165db 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..44e30a7de8b9 100644 --- a/drivers/md/dm-zoned-target.c +++ b/drivers/md/dm-zoned-target.c @@ -965,6 +965,47 @@ 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 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}, @@ -978,6 +1019,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 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).
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 | 43 ++++++++++++++++++++++++++++++++++++++++++ drivers/md/dm-zoned.h | 3 +++ 3 files changed, 61 insertions(+)