]> granicus.if.org Git - zfs/commitdiff
Fix strdup conflict on other platforms
authorMatthew Macy <mmacy@freebsd.org>
Thu, 10 Oct 2019 16:47:06 +0000 (09:47 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 10 Oct 2019 16:47:06 +0000 (09:47 -0700)
In the FreeBSD kernel the strdup signature is:

```
char *strdup(const char *__restrict, struct malloc_type *);
```

It's unfortunate that the developers have chosen to change
the signature of libc functions - but it's what I have to
deal with.

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9433

21 files changed:
cmd/ztest/ztest.c
include/os/linux/spl/sys/kmem.h
include/sys/zfs_context.h
module/icp/spi/kcf_spi.c
module/os/linux/spl/spl-kmem.c
module/os/linux/spl/spl-kstat.c
module/os/linux/spl/spl-taskq.c
module/os/linux/zfs/spa_stats.c
module/os/linux/zfs/vdev_disk.c
module/os/linux/zfs/zfs_ctldir.c
module/os/linux/zfs/zfs_vfsops.c
module/os/linux/zfs/zpl_xattr.c
module/zfs/dmu_objset.c
module/zfs/dsl_dataset.c
module/zfs/dsl_pool.c
module/zfs/dsl_prop.c
module/zfs/dsl_userhold.c
module/zfs/spa_history.c
module/zfs/zcp_get.c
module/zfs/zfs_ioctl.c
module/zfs/zvol.c

index 24ea49c10adc10ee741c0a6e9dc648cb8f24df21..1aa1d38600073838b081066e1a4635e264a74580 100644 (file)
@@ -2863,7 +2863,7 @@ ztest_spa_upgrade(ztest_ds_t *zd, uint64_t id)
            zpool_prop_to_name(ZPOOL_PROP_VERSION)));
        spa_close(spa, FTAG);
 
-       strfree(name);
+       kmem_strfree(name);
        mutex_exit(&ztest_vdev_lock);
 }
 
index 72d3a776530c600fbf6dfe17690b82f2c3cd0051..986c7d244974c10a2c230ea73f0489d5fb37e9ba 100644 (file)
@@ -32,8 +32,8 @@
 extern int kmem_debugging(void);
 extern char *kmem_vasprintf(const char *fmt, va_list ap);
 extern char *kmem_asprintf(const char *fmt, ...);
-extern char *strdup(const char *str);
-extern void strfree(char *str);
+extern char *kmem_strdup(const char *str);
+extern void kmem_strfree(char *str);
 
 /*
  * Memory allocation interfaces
index a55009f351e1ef01efb2e6b217973660fe610a60..455c4275d934209a593f13f5d2d02cd9fda25de7 100644 (file)
@@ -722,7 +722,8 @@ extern uint32_t zone_get_hostid(void *zonep);
 
 extern char *kmem_vasprintf(const char *fmt, va_list adx);
 extern char *kmem_asprintf(const char *fmt, ...);
-#define        strfree(str) kmem_free((str), strlen(str) + 1)
+#define        kmem_strfree(str) kmem_free((str), strlen(str) + 1)
+#define        kmem_strdup(s)  strdup(s)
 
 /*
  * Hostname information
index e438b58105b670d3f5bf10c795e792e5baad8a79..34b36b81c0ab5f7041801baaf88c2331660e099f 100644 (file)
@@ -261,7 +261,7 @@ crypto_register_provider(crypto_provider_info_t *info,
                        prov_desc->pd_kstat->ks_update = kcf_prov_kstat_update;
                        kstat_install(prov_desc->pd_kstat);
                }
-               strfree(ks_name);
+               kmem_strfree(ks_name);
        }
 
        if (prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER)
index 824b5e89f5072b2cdec359ebcee1e0f1c2462906..8a32929c8005aa75f963c777ab47eca63a62f032 100644 (file)
@@ -120,18 +120,18 @@ __strdup(const char *str, int flags)
 }
 
 char *
-strdup(const char *str)
+kmem_strdup(const char *str)
 {
        return (__strdup(str, KM_SLEEP));
 }
-EXPORT_SYMBOL(strdup);
+EXPORT_SYMBOL(kmem_strdup);
 
 void
-strfree(char *str)
+kmem_strfree(char *str)
 {
        kfree(str);
 }
-EXPORT_SYMBOL(strfree);
+EXPORT_SYMBOL(kmem_strfree);
 
 /*
  * General purpose unified implementation of kmem_alloc(). It is an
index 1f67bf157f06891be0a4a279215aa6169c4b6454..5cc21dca0ea11550c126274165bd4263668daf87 100644 (file)
@@ -631,7 +631,7 @@ kstat_detect_collision(kstat_proc_entry_t *kpep)
        parent = kmem_asprintf("%s", kpep->kpe_module);
 
        if ((cp = strrchr(parent, '/')) == NULL) {
-               strfree(parent);
+               kmem_strfree(parent);
                return (0);
        }
 
@@ -639,13 +639,13 @@ kstat_detect_collision(kstat_proc_entry_t *kpep)
        if ((module = kstat_find_module(parent)) != NULL) {
                list_for_each_entry(tmp, &module->ksm_kstat_list, kpe_list) {
                        if (strncmp(tmp->kpe_name, cp+1, KSTAT_STRLEN) == 0) {
-                               strfree(parent);
+                               kmem_strfree(parent);
                                return (EEXIST);
                        }
                }
        }
 
-       strfree(parent);
+       kmem_strfree(parent);
        return (0);
 }
 
index 90e1d0a4d4d045a1e57adfa0200c1eb0d058a410..2e6280084fd6b8fd55630cf31a8d000cabac379b 100644 (file)
@@ -1038,7 +1038,7 @@ taskq_create(const char *name, int nthreads, pri_t pri,
        spin_lock_init(&tq->tq_lock);
        INIT_LIST_HEAD(&tq->tq_thread_list);
        INIT_LIST_HEAD(&tq->tq_active_list);
-       tq->tq_name = strdup(name);
+       tq->tq_name = kmem_strdup(name);
        tq->tq_nactive = 0;
        tq->tq_nthreads = 0;
        tq->tq_nspawn = 0;
@@ -1178,7 +1178,7 @@ taskq_destroy(taskq_t *tq)
 
        spin_unlock_irqrestore(&tq->tq_lock, flags);
 
-       strfree(tq->tq_name);
+       kmem_strfree(tq->tq_name);
        kmem_free(tq, sizeof (taskq_t));
 }
 EXPORT_SYMBOL(taskq_destroy);
index 6895428f4faabb0b1465e536af15ffccbb925385..0d7f540d1f17153c90d20388f5598e780ec69e22 100644 (file)
@@ -138,7 +138,7 @@ spa_read_history_init(spa_t *spa)
            spa_read_history_clear,
            offsetof(spa_read_history_t, srh_node));
 
-       strfree(module);
+       kmem_strfree(module);
 }
 
 static void
@@ -309,7 +309,7 @@ spa_txg_history_init(spa_t *spa)
            spa_txg_history_clear,
            offsetof(spa_txg_history_t, sth_node));
 
-       strfree(module);
+       kmem_strfree(module);
 }
 
 static void
@@ -529,7 +529,7 @@ spa_tx_assign_init(spa_t *spa)
                ksp->ks_update = spa_tx_assign_update;
                kstat_install(ksp);
        }
-       strfree(name);
+       kmem_strfree(name);
 }
 
 static void
@@ -592,7 +592,7 @@ spa_io_history_init(spa_t *spa)
                ksp->ks_update = spa_io_history_update;
                kstat_install(ksp);
        }
-       strfree(name);
+       kmem_strfree(name);
 }
 
 static void
@@ -675,7 +675,7 @@ spa_mmp_history_truncate(spa_history_list_t *shl, unsigned int size)
        while (shl->size > size) {
                smh = list_remove_head(&shl->procfs_list.pl_list);
                if (smh->vdev_path)
-                       strfree(smh->vdev_path);
+                       kmem_strfree(smh->vdev_path);
                kmem_free(smh, sizeof (spa_mmp_history_t));
                shl->size--;
        }
@@ -715,7 +715,7 @@ spa_mmp_history_init(spa_t *spa)
            spa_mmp_history_clear,
            offsetof(spa_mmp_history_t, smh_node));
 
-       strfree(module);
+       kmem_strfree(module);
 }
 
 static void
@@ -814,7 +814,7 @@ spa_mmp_history_add(spa_t *spa, uint64_t txg, uint64_t timestamp,
        if (vd) {
                smh->vdev_guid = vd->vdev_guid;
                if (vd->vdev_path)
-                       smh->vdev_path = strdup(vd->vdev_path);
+                       smh->vdev_path = kmem_strdup(vd->vdev_path);
        }
        smh->vdev_label = label;
        smh->mmp_node_id = mmp_node_id;
@@ -876,7 +876,7 @@ spa_state_init(spa_t *spa)
                kstat_install(ksp);
        }
 
-       strfree(name);
+       kmem_strfree(name);
 }
 
 static void
@@ -973,7 +973,7 @@ spa_iostats_init(spa_t *spa)
                kstat_install(ksp);
        }
 
-       strfree(name);
+       kmem_strfree(name);
 }
 
 static void
index 8490f1db16f152b5cd7461a82b6da6f47d3fa471..6b4c035f00a483ddf7b2bd69fcbb41c3fcffb296 100644 (file)
@@ -220,7 +220,7 @@ vdev_elevator_switch(vdev_t *v, char *elevator)
 
        argv[2] = kmem_asprintf(SET_SCHEDULER_CMD, device, elevator);
        error = call_usermodehelper(argv[0], argv, envp, UMH_NO_WAIT);
-       strfree(argv[2]);
+       kmem_strfree(argv[2]);
 #endif /* HAVE_ELEVATOR_CHANGE */
        if (error) {
                zfs_dbgmsg("Unable to set \"%s\" scheduler for %s (%s): %d",
index 3b2a6eb8273f059553eef9be5fae8ed41345c5c5..3a53c75b1375fe49fbac95131b531c98b7edd8b7 100644 (file)
@@ -137,8 +137,8 @@ zfsctl_snapshot_alloc(char *full_name, char *full_path, spa_t *spa,
 
        se = kmem_zalloc(sizeof (zfs_snapentry_t), KM_SLEEP);
 
-       se->se_name = strdup(full_name);
-       se->se_path = strdup(full_path);
+       se->se_name = kmem_strdup(full_name);
+       se->se_path = kmem_strdup(full_path);
        se->se_spa = spa;
        se->se_objsetid = objsetid;
        se->se_root_dentry = root_dentry;
@@ -157,8 +157,8 @@ static void
 zfsctl_snapshot_free(zfs_snapentry_t *se)
 {
        zfs_refcount_destroy(&se->se_refcount);
-       strfree(se->se_name);
-       strfree(se->se_path);
+       kmem_strfree(se->se_name);
+       kmem_strfree(se->se_path);
 
        kmem_free(se, sizeof (zfs_snapentry_t));
 }
@@ -311,8 +311,8 @@ zfsctl_snapshot_rename(char *old_snapname, char *new_snapname)
                return (SET_ERROR(ENOENT));
 
        zfsctl_snapshot_remove(se);
-       strfree(se->se_name);
-       se->se_name = strdup(new_snapname);
+       kmem_strfree(se->se_name);
+       se->se_name = kmem_strdup(new_snapname);
        zfsctl_snapshot_add(se);
        zfsctl_snapshot_rele(se);
 
index c49ffc561f1f09a0551e5044eec3365c246ea3d4..c77a23759b763fbbe401836a7ab2dea5f4a90bc5 100644 (file)
@@ -111,7 +111,7 @@ zfsvfs_vfs_free(vfs_t *vfsp)
 {
        if (vfsp != NULL) {
                if (vfsp->vfs_mntpoint != NULL)
-                       strfree(vfsp->vfs_mntpoint);
+                       kmem_strfree(vfsp->vfs_mntpoint);
 
                kmem_free(vfsp, sizeof (vfs_t));
        }
@@ -222,7 +222,7 @@ zfsvfs_parse_options(char *mntopts, vfs_t **vfsp)
                char *tmp_mntopts, *p, *t;
                int token;
 
-               tmp_mntopts = t = strdup(mntopts);
+               tmp_mntopts = t = kmem_strdup(mntopts);
                if (tmp_mntopts == NULL)
                        return (SET_ERROR(ENOMEM));
 
@@ -234,13 +234,13 @@ zfsvfs_parse_options(char *mntopts, vfs_t **vfsp)
                        token = match_token(p, zpl_tokens, args);
                        error = zfsvfs_parse_option(p, token, args, tmp_vfsp);
                        if (error) {
-                               strfree(tmp_mntopts);
+                               kmem_strfree(tmp_mntopts);
                                zfsvfs_vfs_free(tmp_vfsp);
                                return (error);
                        }
                }
 
-               strfree(tmp_mntopts);
+               kmem_strfree(tmp_mntopts);
        }
 
        *vfsp = tmp_vfsp;
index 95523f28e3b4130e30f8f8ae86a9468f6d49997e..082287b00fcacd1795e4d9895b71ec1f05044273 100644 (file)
@@ -707,7 +707,7 @@ __zpl_xattr_user_get(struct inode *ip, const char *name,
 
        xattr_name = kmem_asprintf("%s%s", XATTR_USER_PREFIX, name);
        error = zpl_xattr_get(ip, xattr_name, value, size);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
@@ -729,7 +729,7 @@ __zpl_xattr_user_set(struct inode *ip, const char *name,
 
        xattr_name = kmem_asprintf("%s%s", XATTR_USER_PREFIX, name);
        error = zpl_xattr_set(ip, xattr_name, value, size, flags);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
@@ -776,7 +776,7 @@ __zpl_xattr_trusted_get(struct inode *ip, const char *name,
 #endif
        xattr_name = kmem_asprintf("%s%s", XATTR_TRUSTED_PREFIX, name);
        error = zpl_xattr_get(ip, xattr_name, value, size);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
@@ -798,7 +798,7 @@ __zpl_xattr_trusted_set(struct inode *ip, const char *name,
 #endif
        xattr_name = kmem_asprintf("%s%s", XATTR_TRUSTED_PREFIX, name);
        error = zpl_xattr_set(ip, xattr_name, value, size, flags);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
@@ -845,7 +845,7 @@ __zpl_xattr_security_get(struct inode *ip, const char *name,
 #endif
        xattr_name = kmem_asprintf("%s%s", XATTR_SECURITY_PREFIX, name);
        error = zpl_xattr_get(ip, xattr_name, value, size);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
@@ -864,7 +864,7 @@ __zpl_xattr_security_set(struct inode *ip, const char *name,
 #endif
        xattr_name = kmem_asprintf("%s%s", XATTR_SECURITY_PREFIX, name);
        error = zpl_xattr_set(ip, xattr_name, value, size, flags);
-       strfree(xattr_name);
+       kmem_strfree(xattr_name);
 
        return (error);
 }
index f7498854a8d17b6648b740d955ca84abf9b0a49c..2a9464e2a2c66b30fe9bd387ea0e52d975f34265 100644 (file)
@@ -1404,7 +1404,7 @@ dmu_objset_snapshot_one(const char *fsname, const char *snapname)
        nvlist_t *snaps = fnvlist_alloc();
 
        fnvlist_add_boolean(snaps, longsnap);
-       strfree(longsnap);
+       kmem_strfree(longsnap);
        err = dsl_dataset_snapshot(snaps, NULL, NULL);
        fnvlist_free(snaps);
        return (err);
@@ -2795,7 +2795,7 @@ dmu_objset_find_impl(spa_t *spa, const char *name,
                        err = dmu_objset_find_impl(spa, child,
                            func, arg, flags);
                        dsl_pool_config_enter(dp, FTAG);
-                       strfree(child);
+                       kmem_strfree(child);
                        if (err != 0)
                                break;
                }
@@ -2833,7 +2833,7 @@ dmu_objset_find_impl(spa_t *spa, const char *name,
                                dsl_pool_config_exit(dp, FTAG);
                                err = func(child, arg);
                                dsl_pool_config_enter(dp, FTAG);
-                               strfree(child);
+                               kmem_strfree(child);
                                if (err != 0)
                                        break;
                        }
index 8673c6d3105aa9a671e527a53c344a5052e66260..aa37214d0c8e83580c3d5218244f8581b4fe89bb 100644 (file)
@@ -2435,7 +2435,7 @@ get_receive_resume_stats_impl(dsl_dataset_t *ds)
                kmem_free(compressed, packed_size);
                return (propval);
        }
-       return (strdup(""));
+       return (kmem_strdup(""));
 }
 
 /*
@@ -2458,7 +2458,7 @@ get_child_receive_stats(dsl_dataset_t *ds)
                dsl_dataset_rele(recv_ds, FTAG);
                return (propval);
        }
-       return (strdup(""));
+       return (kmem_strdup(""));
 }
 
 static void
@@ -2474,9 +2474,9 @@ get_receive_resume_stats(dsl_dataset_t *ds, nvlist_t *nv)
                        dsl_prop_nvlist_add_string(nv,
                            ZFS_PROP_RECEIVE_RESUME_TOKEN, childval);
                }
-               strfree(childval);
+               kmem_strfree(childval);
        }
-       strfree(propval);
+       kmem_strfree(propval);
 }
 
 uint64_t
index 4fffe4cb5a342209aad380e955585b0f8f898f28..59104e6d104feb89b02d8bcc5153b5805c9ece53 100644 (file)
@@ -1200,7 +1200,7 @@ dsl_pool_user_hold_rele_impl(dsl_pool_t *dp, uint64_t dsobj,
                error = zap_add(mos, zapobj, name, 8, 1, &now, tx);
        else
                error = zap_remove(mos, zapobj, name, tx);
-       strfree(name);
+       kmem_strfree(name);
 
        return (error);
 }
index 9f892acdbf80c2f235f28c8550e217bdc25f0bf3..df199cf6af5a41f4482c32739b3fbec0b0d736ad 100644 (file)
@@ -150,8 +150,8 @@ dsl_prop_get_dd(dsl_dir_t *dd, const char *propname,
        if (err == ENOENT)
                err = dodefault(prop, intsz, numints, buf);
 
-       strfree(inheritstr);
-       strfree(recvdstr);
+       kmem_strfree(inheritstr);
+       kmem_strfree(recvdstr);
 
        return (err);
 }
@@ -190,7 +190,7 @@ dsl_prop_get_ds(dsl_dataset_t *ds, const char *propname,
                        char *inheritstr = kmem_asprintf("%s%s", propname,
                            ZPROP_INHERIT_SUFFIX);
                        err = zap_contains(mos, zapobj, inheritstr);
-                       strfree(inheritstr);
+                       kmem_strfree(inheritstr);
                        if (err != 0 && err != ENOENT)
                                return (err);
                }
@@ -201,7 +201,7 @@ dsl_prop_get_ds(dsl_dataset_t *ds, const char *propname,
                            ZPROP_RECVD_SUFFIX);
                        err = zap_lookup(mos, zapobj, recvdstr,
                            intsz, numints, buf);
-                       strfree(recvdstr);
+                       kmem_strfree(recvdstr);
                        if (err != ENOENT) {
                                if (setpoint != NULL && err == 0)
                                        (void) strcpy(setpoint,
@@ -424,7 +424,7 @@ dsl_prop_predict(dsl_dir_t *dd, const char *propname,
                panic("unexpected property source: %d", source);
        }
 
-       strfree(recvdstr);
+       kmem_strfree(recvdstr);
 
        if (err == ENOENT)
                return (0);
@@ -752,8 +752,8 @@ dsl_prop_set_sync_impl(dsl_dataset_t *ds, const char *propname,
                cmn_err(CE_PANIC, "unexpected property source: %d", source);
        }
 
-       strfree(inheritstr);
-       strfree(recvdstr);
+       kmem_strfree(inheritstr);
+       kmem_strfree(recvdstr);
 
        if (isint) {
                VERIFY0(dsl_prop_get_int_ds(ds, propname, &intval));
@@ -1020,7 +1020,7 @@ dsl_prop_get_all_impl(objset_t *mos, uint64_t propobj,
                                valstr = kmem_asprintf("%s%s", propname,
                                    ZPROP_INHERIT_SUFFIX);
                                err = zap_contains(mos, propobj, valstr);
-                               strfree(valstr);
+                               kmem_strfree(valstr);
                                if (err == 0)
                                        continue;
                                if (err != ENOENT)
index ba850c2f7198f607bf3df65080e468a761884118..181fc3946b46697ba7fba2e52fd96c5f958856a2 100644 (file)
@@ -406,7 +406,7 @@ dsl_dataset_user_release_check_one(dsl_dataset_user_release_arg_t *ddura,
                                    snapname, holdname);
                                fnvlist_add_int32(ddura->ddura_errlist, errtag,
                                    ENOENT);
-                               strfree(errtag);
+                               kmem_strfree(errtag);
                        }
                        continue;
                }
index d2839b97fc0def25fadcb5a145e7c1bd61ba36db..67847b6d182e99d67abc31830eddd245344ebb9c 100644 (file)
@@ -533,7 +533,7 @@ log_internal(nvlist_t *nvl, const char *operation, spa_t *spa,
 
        msg = kmem_vasprintf(fmt, adx);
        fnvlist_add_string(nvl, ZPOOL_HIST_INT_STR, msg);
-       strfree(msg);
+       kmem_strfree(msg);
 
        fnvlist_add_string(nvl, ZPOOL_HIST_INT_NAME, operation);
        fnvlist_add_uint64(nvl, ZPOOL_HIST_TXG, tx->tx_txg);
index 42c125d48cd0b909cf575d906f40997cc9fc98af..974d3328cce415fc64a66089125fb84b53f469b6 100644 (file)
@@ -431,9 +431,9 @@ get_special_prop(lua_State *state, dsl_dataset_t *ds, const char *dsname,
                        if (strcmp(strval, "") == 0)
                                error = ENOENT;
 
-                       strfree(childval);
+                       kmem_strfree(childval);
                }
-               strfree(token);
+               kmem_strfree(token);
                break;
        }
        case ZFS_PROP_VOLSIZE:
@@ -661,7 +661,7 @@ get_userquota_prop(const char *prop_name)
  * prop type as well as the numeric group/user ids based on the string
  * following the '@' in the property name. On success, returns 0. On failure,
  * returns a non-zero error.
- * 'domain' must be free'd by caller using strfree()
+ * 'domain' must be free'd by caller using kmem_strfree()
  */
 static int
 parse_userquota_prop(const char *prop_name, zfs_userquota_prop_t *type,
@@ -688,7 +688,7 @@ parse_userquota_prop(const char *prop_name, zfs_userquota_prop_t *type,
 
                (void) ddi_strtoll(cp, &end, 10, (longlong_t *)rid);
                if (*end != '\0') {
-                       strfree(domain_val);
+                       kmem_strfree(domain_val);
                        return (EINVAL);
                }
        } else {
@@ -736,7 +736,7 @@ zcp_get_userquota_prop(lua_State *state, dsl_pool_t *dp,
                        }
                }
                if (domain != NULL)
-                       strfree(domain);
+                       kmem_strfree(domain);
        }
        dsl_dataset_rele(ds, FTAG);
 
index dfd0b693e9b03acb4b0a3f4799a7e731e2fbcd66..90bc607e2a5bc2eccd750c765f77d3cfbf11beff 100644 (file)
@@ -3493,7 +3493,7 @@ zfs_ioc_log_history(const char *unused, nvlist_t *innvl, nvlist_t *outnvl)
                return (SET_ERROR(EINVAL));
        (void) tsd_set(zfs_allow_log_key, NULL);
        error = spa_open(poolname, &spa, FTAG);
-       strfree(poolname);
+       kmem_strfree(poolname);
        if (error != 0)
                return (error);
 
@@ -4152,7 +4152,7 @@ recursive_unmount(const char *fsname, void *arg)
 
        fullname = kmem_asprintf("%s@%s", fsname, snapname);
        zfs_unmount_snap(fullname);
-       strfree(fullname);
+       kmem_strfree(fullname);
 
        return (0);
 }
@@ -4688,7 +4688,7 @@ zfs_allow_log_destroy(void *arg)
        char *poolname = arg;
 
        if (poolname != NULL)
-               strfree(poolname);
+               kmem_strfree(poolname);
 }
 
 #ifdef DEBUG
@@ -5907,8 +5907,8 @@ zfs_ioc_tmp_snapshot(zfs_cmd_t *zc)
        if (error == 0)
                (void) strlcpy(zc->zc_value, snap_name,
                    sizeof (zc->zc_value));
-       strfree(snap_name);
-       strfree(hold_name);
+       kmem_strfree(snap_name);
+       kmem_strfree(hold_name);
        zfs_onexit_fd_rele(zc->zc_cleanup_fd);
        return (error);
 }
@@ -7335,7 +7335,7 @@ zfsdev_ioctl_common(uint_t vecnum, unsigned long arg)
                goto out;
 
        /* legacy ioctls can modify zc_name */
-       saved_poolname = strdup(zc->zc_name);
+       saved_poolname = kmem_strdup(zc->zc_name);
        if (saved_poolname == NULL) {
                error = SET_ERROR(ENOMEM);
                goto out;
@@ -7420,11 +7420,11 @@ out:
        if (error == 0 && vec->zvec_allow_log) {
                char *s = tsd_get(zfs_allow_log_key);
                if (s != NULL)
-                       strfree(s);
+                       kmem_strfree(s);
                (void) tsd_set(zfs_allow_log_key, saved_poolname);
        } else {
                if (saved_poolname != NULL)
-                       strfree(saved_poolname);
+                       kmem_strfree(saved_poolname);
        }
 
        kmem_free(zc, sizeof (zfs_cmd_t));
index ebd0fa70aafcac12ad78034d796095a8a57c50fe..19c20afe7bc59188e5bf67b698e46be96a2a97b4 100644 (file)
@@ -1009,7 +1009,7 @@ zvol_create_snap_minor_cb(const char *dsname, void *arg)
                    "%s is not a snapshot name\n", dsname);
        } else {
                minors_job_t *job;
-               char *n = strdup(dsname);
+               char *n = kmem_strdup(dsname);
                if (n == NULL)
                        return (0);
 
@@ -1051,7 +1051,7 @@ zvol_create_minors_cb(const char *dsname, void *arg)
         */
        if (strchr(dsname, '@') == 0) {
                minors_job_t *job;
-               char *n = strdup(dsname);
+               char *n = kmem_strdup(dsname);
                if (n == NULL)
                        return (0);
 
@@ -1152,7 +1152,7 @@ zvol_create_minors_impl(const char *name)
                list_remove(&minors_list, job);
                if (!job->error)
                        ops->zv_create_minor(job->name);
-               strfree(job->name);
+               kmem_strfree(job->name);
                kmem_free(job, sizeof (minors_job_t));
        }
 
@@ -1305,7 +1305,7 @@ zvol_rename_minors_impl(const char *oldname, const char *newname)
                            zv->zv_name[oldnamelen],
                            zv->zv_name + oldnamelen + 1);
                        ops->zv_rename_minor(zv, name);
-                       strfree(name);
+                       kmem_strfree(name);
                }
 
                mutex_exit(&zv->zv_state_lock);