]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
dm: allow targets to return output from messages they are sent
authorMike Snitzer <snitzer@redhat.com>
Wed, 28 Feb 2018 20:59:59 +0000 (15:59 -0500)
committerMike Snitzer <snitzer@redhat.com>
Tue, 3 Apr 2018 19:04:10 +0000 (15:04 -0400)
Could be useful for a target to return stats or other information.
If a target does DMEMIT() anything to @result from its .message method
then it must return 1 to the caller.

Signed-off-By: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-cache-target.c
drivers/md/dm-crypt.c
drivers/md/dm-era-target.c
drivers/md/dm-ioctl.c
drivers/md/dm-log-writes.c
drivers/md/dm-mpath.c
drivers/md/dm-raid.c
drivers/md/dm-switch.c
drivers/md/dm-thin.c
include/linux/device-mapper.h
include/uapi/linux/dm-ioctl.h

index 47407e43b96a168eed8660a7284a60132284d189..da208638fba435b412264d34c9ce9bfd2d878424 100644 (file)
@@ -3387,7 +3387,8 @@ static int process_invalidate_cblocks_message(struct cache *cache, unsigned coun
  *
  * The key migration_threshold is supported by the cache target core.
  */
-static int cache_message(struct dm_target *ti, unsigned argc, char **argv)
+static int cache_message(struct dm_target *ti, unsigned argc, char **argv,
+                        char *result, unsigned maxlen)
 {
        struct cache *cache = ti->private;
 
index 8168f737590e7cff141b933fe91421da8a6ac326..dd9b5332b39c224293c05ea269c6b02afead37dc 100644 (file)
@@ -2942,7 +2942,8 @@ static void crypt_resume(struct dm_target *ti)
  *     key set <key>
  *     key wipe
  */
-static int crypt_message(struct dm_target *ti, unsigned argc, char **argv)
+static int crypt_message(struct dm_target *ti, unsigned argc, char **argv,
+                        char *result, unsigned maxlen)
 {
        struct crypt_config *cc = ti->private;
        int key_size, ret = -EINVAL;
index 73a5c198113a6a95dd7c81e4471b433a5b53fe58..8e48920a3ffa6681c87721dee414f8e2db09ae3a 100644 (file)
@@ -1635,7 +1635,8 @@ static void era_status(struct dm_target *ti, status_type_t type,
        DMEMIT("Error");
 }
 
-static int era_message(struct dm_target *ti, unsigned argc, char **argv)
+static int era_message(struct dm_target *ti, unsigned argc, char **argv,
+                      char *result, unsigned maxlen)
 {
        struct era *era = ti->private;
 
index a89fd8f44453e7ce3a0a658c31ecc0b3fd8e3f76..5acf77de5945eb33d856b46509e5ed4b6c5e33f7 100644 (file)
@@ -1595,7 +1595,7 @@ static int target_message(struct file *filp, struct dm_ioctl *param, size_t para
                DMWARN("Target message sector outside device.");
                r = -EINVAL;
        } else if (ti->type->message)
-               r = ti->type->message(ti, argc, argv);
+               r = ti->type->message(ti, argc, argv, result, maxlen);
        else {
                DMWARN("Target type does not support messages");
                r = -EINVAL;
index 3362d866793b320149bcb7a83b663e1bb68cf927..e4c015dfef4358a9341c8b182aac88a8cc3bcb3a 100644 (file)
@@ -887,7 +887,8 @@ static int log_writes_iterate_devices(struct dm_target *ti,
  * Messages supported:
  *   mark <mark data> - specify the marked data.
  */
-static int log_writes_message(struct dm_target *ti, unsigned argc, char **argv)
+static int log_writes_message(struct dm_target *ti, unsigned argc, char **argv,
+                             char *result, unsigned maxlen)
 {
        int r = -EINVAL;
        struct log_writes_c *lc = ti->private;
index a6b7baf31cddf1d4dee1d90eddee38cfe67b8a9d..1e60ec44942e90929377ee6e2b8f7f7345be0cfb 100644 (file)
@@ -1811,7 +1811,8 @@ static void multipath_status(struct dm_target *ti, status_type_t type,
        spin_unlock_irqrestore(&m->lock, flags);
 }
 
-static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
+static int multipath_message(struct dm_target *ti, unsigned argc, char **argv,
+                            char *result, unsigned maxlen)
 {
        int r = -EINVAL;
        struct dm_dev *dev;
index c1d1034ff7b75eb740d40920615c0ae10a308c43..b7a9c710ebecdbd770bb7dd908510cac523c1959 100644 (file)
@@ -3663,7 +3663,8 @@ static void raid_status(struct dm_target *ti, status_type_t type,
        }
 }
 
-static int raid_message(struct dm_target *ti, unsigned int argc, char **argv)
+static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
+                       char *result, unsigned maxlen)
 {
        struct raid_set *rs = ti->private;
        struct mddev *mddev = &rs->md;
index 8d0ba879777e486cbc4f9fc84600fdc7ba82c5ba..8f9208c2d2e3b6edc07fd10b209c4cf99c157c4f 100644 (file)
@@ -466,7 +466,8 @@ static int process_set_region_mappings(struct switch_ctx *sctx,
  *
  * Only set_region_mappings is supported.
  */
-static int switch_message(struct dm_target *ti, unsigned argc, char **argv)
+static int switch_message(struct dm_target *ti, unsigned argc, char **argv,
+                         char *result, unsigned maxlen)
 {
        static DEFINE_MUTEX(message_mutex);
 
index 629c555890c1be277d882ae42069c2f4342c8fa3..b11107497d2efd3974a5f4feee1610cc95fa7196 100644 (file)
@@ -3705,7 +3705,8 @@ static int process_release_metadata_snap_mesg(unsigned argc, char **argv, struct
  *   reserve_metadata_snap
  *   release_metadata_snap
  */
-static int pool_message(struct dm_target *ti, unsigned argc, char **argv)
+static int pool_message(struct dm_target *ti, unsigned argc, char **argv,
+                       char *result, unsigned maxlen)
 {
        int r = -EINVAL;
        struct pool_c *pt = ti->private;
index da83f64952e7d07ebccded358bb363807d49b7b5..1e2426c18eb4b3c81677981e4b26dce7f7d25ab4 100644 (file)
@@ -87,7 +87,8 @@ typedef void (*dm_resume_fn) (struct dm_target *ti);
 typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
                              unsigned status_flags, char *result, unsigned maxlen);
 
-typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
+typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv,
+                             char *result, unsigned maxlen);
 
 typedef int (*dm_prepare_ioctl_fn) (struct dm_target *ti,
                            struct block_device **bdev, fmode_t *mode);
index 14c44ec8b622291a2c96dea0f1685d6c5f8d05e7..5108da02cd32a0e0389de36018dd0f8dd075cc32 100644 (file)
@@ -270,9 +270,9 @@ enum {
 #define DM_DEV_SET_GEOMETRY    _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
 
 #define DM_VERSION_MAJOR       4
-#define DM_VERSION_MINOR       37
+#define DM_VERSION_MINOR       38
 #define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2017-09-20)"
+#define DM_VERSION_EXTRA       "-ioctl (2018-02-28)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */