diff options
author | Hannes Reinecke <hare@suse.de> | 2020-05-11 10:24:17 +0200 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2020-05-15 10:29:36 -0400 |
commit | 90b39d58f39e1f3f3147caee6fb2a71528db74a2 (patch) | |
tree | 978ac4ee5a6358d1a6b892a8106b3de6f88873b8 | |
parent | bc3d5717d242a37d2e9ea85d7e7b2e3569324d24 (diff) | |
download | linux-90b39d58f39e1f3f3147caee6fb2a71528db74a2.tar.gz linux-90b39d58f39e1f3f3147caee6fb2a71528db74a2.tar.bz2 linux-90b39d58f39e1f3f3147caee6fb2a71528db74a2.zip |
dm zoned: add 'message' callback
Add callback for 'dmsetup message' to allow the reclaim process
to be triggered manually.
Eg.
dmsetup message /dev/dm-X 0 message
will start the reclaim process even if the default threshold
of 50 percent of free random zones is not reached.
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>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-rw-r--r-- | Documentation/admin-guide/device-mapper/dm-zoned.rst | 12 | ||||
-rw-r--r-- | drivers/md/dm-zoned-target.c | 15 |
2 files changed, 27 insertions, 0 deletions
diff --git a/Documentation/admin-guide/device-mapper/dm-zoned.rst b/Documentation/admin-guide/device-mapper/dm-zoned.rst index 4165fbf1aeb6..7547ce635161 100644 --- a/Documentation/admin-guide/device-mapper/dm-zoned.rst +++ b/Documentation/admin-guide/device-mapper/dm-zoned.rst @@ -160,3 +160,15 @@ 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. + +Normally the reclaim process will be started once there are less than 50 +percent free random zones. In order to start the reclaim process manually +even before reaching this threshold the 'dmsetup message' function can be +used: + +Ex:: + + dmsetup message /dev/dm-X 0 reclaim + +will start the reclaim process and random zones will be moved to sequential +zones. diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c index 0b4b27d280fb..0bfe34162dbb 100644 --- a/drivers/md/dm-zoned-target.c +++ b/drivers/md/dm-zoned-target.c @@ -990,6 +990,20 @@ static void dmz_status(struct dm_target *ti, status_type_t type, 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}, @@ -1004,6 +1018,7 @@ static struct target_type dmz_type = { .resume = dmz_resume, .iterate_devices = dmz_iterate_devices, .status = dmz_status, + .message = dmz_message, }; static int __init dmz_init(void) |