On Tue, 12 May 2026, Mikulas Patocka wrote:

> The VDO code needs to perform some calculations before creating a device. 
> The calculations should be performed in the kernel, so that the same logic 
> is not duplicated in the kernel and in the userspace.
> 
> However, currently it is not possible to call a device mapper target 
> when no device exists.
> 
> This commit solves the problem by adding "deviceless" messages. If the 
> message starts with '%', the name is a name of a target, not a name of a 
> device. The message will be directed to the target by calling the 
> "deviceless_message" method. The target can perform the requested 
> calculations in this method and return the result back to userspace.
> 
> Signed-off-by: Mikulas Patocka <[email protected]>

This is example code how to use deviceless messages. You can call it with 
"dmsetup message linear 0 %Hello"

Mikulas

---
 drivers/md/dm-linear.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

Index: linux-2.6/drivers/md/dm-linear.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-linear.c       2026-05-11 13:00:08.000000000 
+0200
+++ linux-2.6/drivers/md/dm-linear.c    2026-05-11 13:00:14.000000000 +0200
@@ -199,6 +199,15 @@ static size_t linear_dax_recovery_write(
 #define linear_dax_recovery_write NULL
 #endif
 
+static int linear_deviceless_message(unsigned int argc, char **argv, char 
*result, unsigned int maxlen)
+{
+       if (argc == 1 && !strcasecmp(argv[0], "%Hello")) {
+               snprintf(result, maxlen, "World!");
+               return 1;
+       }
+       return -EINVAL;
+}
+
 static struct target_type linear_target = {
        .name   = "linear",
        .version = {1, 5, 0},
@@ -211,6 +220,7 @@ static struct target_type linear_target
        .dtr    = linear_dtr,
        .map    = linear_map,
        .status = linear_status,
+       .deviceless_message = linear_deviceless_message,
        .prepare_ioctl = linear_prepare_ioctl,
        .iterate_devices = linear_iterate_devices,
        .direct_access = linear_dax_direct_access,


Reply via email to