Commit 90b39d58 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Mike Snitzer

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: default avatarHannes Reinecke <hare@suse.de>
Reviewed-by: default avatarBob Liu <bob.liu@oracle.com>
Reviewed-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent bc3d5717
...@@ -160,3 +160,15 @@ where <nr_zones> is the total number of zones, <nr_unmap_rnd> is the number ...@@ -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, 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 <nr_unmap_seq> the number of unmapped sequential zones, and <nr_seq> the
total number of sequential zones. 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.
...@@ -990,6 +990,20 @@ static void dmz_status(struct dm_target *ti, status_type_t type, ...@@ -990,6 +990,20 @@ static void dmz_status(struct dm_target *ti, status_type_t type,
return; 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 = { static struct target_type dmz_type = {
.name = "zoned", .name = "zoned",
.version = {1, 1, 0}, .version = {1, 1, 0},
...@@ -1004,6 +1018,7 @@ static struct target_type dmz_type = { ...@@ -1004,6 +1018,7 @@ static struct target_type dmz_type = {
.resume = dmz_resume, .resume = dmz_resume,
.iterate_devices = dmz_iterate_devices, .iterate_devices = dmz_iterate_devices,
.status = dmz_status, .status = dmz_status,
.message = dmz_message,
}; };
static int __init dmz_init(void) static int __init dmz_init(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment