diff options
author | Richard Yao <[email protected]> | 2014-10-11 11:01:37 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-01-21 15:30:24 -0800 |
commit | 841c9d43c725334a0a4b6174b6e1adea24f16cdd (patch) | |
tree | bbcb514ecd30a72dcd7984a4854e446824eb1323 | |
parent | 3c832b8cc13bb4e570b317c30b146bb072e08f58 (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.c | 12 |
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); |