summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2020-05-11 10:24:17 +0200
committerMike Snitzer <snitzer@redhat.com>2020-05-15 10:29:36 -0400
commit90b39d58f39e1f3f3147caee6fb2a71528db74a2 (patch)
tree978ac4ee5a6358d1a6b892a8106b3de6f88873b8
parentbc3d5717d242a37d2e9ea85d7e7b2e3569324d24 (diff)
downloadlinux-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.rst12
-rw-r--r--drivers/md/dm-zoned-target.c15
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)