summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Yao <[email protected]>2014-10-11 11:01:37 -0400
committerBrian Behlendorf <[email protected]>2015-01-21 15:30:24 -0800
commit841c9d43c725334a0a4b6174b6e1adea24f16cdd (patch)
treebbcb514ecd30a72dcd7984a4854e446824eb1323
parent3c832b8cc13bb4e570b317c30b146bb072e08f58 (diff)
Use kmem_vasprintf() in log_internal()
An attempt to debug zfsonlinux/zfs#2781 revealed that this code could be simplified by using kmem_asprintf(). It is not clear that switching to kmem_asprintf() addresses zfsonlinux/zfs#2781. However, switching to kmem_asprintf() is cleanup that simplifies debugging such that it would become clear that this is a bug in glibc should the issue persist. It also brings this function almost back in sync with Illumos. This was possible due to the recently reworked kmem code which allows us to use KM_SLEEP in the same fashion as Illumos. Signed-off-by: Richard Yao <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #2791 Issue #2781
-rw-r--r--module/zfs/spa_history.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/module/zfs/spa_history.c b/module/zfs/spa_history.c
index 950bf98e2..14e681e77 100644
--- a/module/zfs/spa_history.c
+++ b/module/zfs/spa_history.c
@@ -436,8 +436,6 @@ log_internal(nvlist_t *nvl, const char *operation, spa_t *spa,
dmu_tx_t *tx, const char *fmt, va_list adx)
{
char *msg;
- va_list adx1;
- int size;
/*
* If this is part of creating a pool, not everything is
@@ -449,15 +447,9 @@ log_internal(nvlist_t *nvl, const char *operation, spa_t *spa,
return;
}
- va_copy(adx1, adx);
- size = vsnprintf(NULL, 0, fmt, adx1) + 1;
- msg = kmem_alloc(size, KM_SLEEP);
- va_end(adx1);
- va_copy(adx1, adx);
- (void) vsprintf(msg, fmt, adx1);
- va_end(adx1);
+ msg = kmem_vasprintf(fmt, adx);
fnvlist_add_string(nvl, ZPOOL_HIST_INT_STR, msg);
- kmem_free(msg, size);
+ strfree(msg);
fnvlist_add_string(nvl, ZPOOL_HIST_INT_NAME, operation);
fnvlist_add_uint64(nvl, ZPOOL_HIST_TXG, tx->tx_txg);