sys/dev/disk/dm: Add dm_alloc_string()
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 9 Nov 2015 09:56:38 +0000 (18:56 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 9 Nov 2015 11:08:59 +0000 (20:08 +0900)
Add dm_alloc_string() which kmallocs char* from M_DM.

It was confusing that targets had to use M_DM for status
purpose while targets had their own M_DMXXX. Using this
wrapper function makes target code less error prone when
allocating a string without an extra comment on usage.

sys/dev/disk/dm/device-mapper.c
sys/dev/disk/dm/dm.h
sys/dev/disk/dm/targets/crypt/dm_target_crypt.c
sys/dev/disk/dm/targets/delay/dm_target_delay.c
sys/dev/disk/dm/targets/linear/dm_target_linear.c
sys/dev/disk/dm/targets/snapshot/dm_target_snapshot.c
sys/dev/disk/dm/targets/striped/dm_target_striped.c

index b900820..18297a4 100644 (file)
@@ -639,6 +639,14 @@ atoi64(const char *s)
        return n;
 }
 
+char *
+dm_alloc_string(int len)
+{
+       if (len <= 0)
+               len = DM_MAX_PARAMS_SIZE;
+       return kmalloc(len, M_DM, M_WAITOK | M_ZERO);
+}
+
 void
 dm_builtin_init(void *arg)
 {
index e3a3fb1..4c7cbcc 100644 (file)
@@ -241,6 +241,8 @@ void dm_target_busy(dm_target_t *);
 /* Generic function used to convert char to string */
 uint64_t atoi64(const char *);
 
+char *dm_alloc_string(int len);
+
 /* dm_table.c  */
 #define DM_TABLE_ACTIVE 0
 #define DM_TABLE_INACTIVE 1
index 1f33b7a..dee17c6 100644 (file)
@@ -746,8 +746,7 @@ dm_target_crypt_table(void *target_config)
 
        priv = target_config;
 
-       /* caller expects use of M_DM */
-       params = kmalloc(DM_MAX_PARAMS_SIZE, M_DM, M_WAITOK);
+       params = dm_alloc_string(DM_MAX_PARAMS_SIZE);
 
        ksnprintf(params, DM_MAX_PARAMS_SIZE, "%s",
            priv->status_str);
index 6f01db6..d697db3 100644 (file)
@@ -163,7 +163,7 @@ dm_target_delay_info(void *target_config)
        tdc = target_config;
        KKASSERT(tdc != NULL);
 
-       params = kmalloc(DM_MAX_PARAMS_SIZE, M_DM, M_WAITOK);
+       params = dm_alloc_string(DM_MAX_PARAMS_SIZE);
        ksnprintf(params, DM_MAX_PARAMS_SIZE,
                "%d %d", tdc->read.count, tdc->write.count);
 
@@ -179,7 +179,7 @@ dm_target_delay_table(void *target_config)
        tdc = target_config;
        KKASSERT(tdc != NULL);
 
-       params = kmalloc(DM_MAX_PARAMS_SIZE, M_DM, M_WAITOK);
+       params = dm_alloc_string(DM_MAX_PARAMS_SIZE);
        p = params;
        p += _table(&tdc->read, p);
        if (tdc->argc == 6) {
index 652a1ac..1fabc0f 100644 (file)
@@ -101,8 +101,7 @@ dm_target_linear_table(void *target_config)
 
        aprint_debug("Linear target table function called\n");
 
-       /* target expects use of M_DM */
-       params = kmalloc(DM_MAX_PARAMS_SIZE, M_DM, M_WAITOK);
+       params = dm_alloc_string(DM_MAX_PARAMS_SIZE);
 
        ksnprintf(params, DM_MAX_PARAMS_SIZE, "%s %" PRIu64,
            tlc->pdev->udev_name, tlc->offset);
index cc309e4..0789fe2 100644 (file)
@@ -190,8 +190,7 @@ dm_target_snapshot_table(void *target_config)
        /* length of names + count of chars + spaces and null char */
        prm_len = strlen(tsc->tsc_snap_dev->name) + cow_len + count + 5;
 
-       /* target expects use of M_DM */
-       params = kmalloc(prm_len, M_DM, M_WAITOK);
+       params = dm_alloc_string(prm_len);
 
        kprintf("%s %s %s %" PRIu64 "\n", tsc->tsc_snap_dev->name,
            tsc->tsc_cow_dev->name, tsc->tsc_persistent_dev ? "p" : "n",
index 364361b..31d475e 100644 (file)
@@ -166,7 +166,7 @@ dm_target_stripe_info(void *target_config)
        tsc = target_config;
 
        len = DM_MAX_PARAMS_SIZE;
-       params = kmalloc(len, M_DM, M_WAITOK | M_ZERO);
+       params = dm_alloc_string(len);
        ptr = params;
 
        ret = ksnprintf(ptr, len, "%d ", tsc->stripe_num);
@@ -208,7 +208,7 @@ dm_target_stripe_table(void *target_config)
        tsc = target_config;
 
        len = DM_MAX_PARAMS_SIZE;
-       params = kmalloc(len, M_DM, M_WAITOK | M_ZERO);
+       params = dm_alloc_string(len);
        ptr = params;
 
        ret = ksnprintf(ptr, len, "%d %jd",