X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fddt_zap.c;h=1733448a8ae0e5d42d733b478b1cb3a7574f869a;hb=9d81146b015e8f4f611357c4cef17fbfb2f4bd54;hp=d6a991c7c19ee040942a48a2550f216a14bbb4ab;hpb=428870ff734fdaccc342b33fc53cf94724409a46;p=zfs.git diff --git a/module/zfs/ddt_zap.c b/module/zfs/ddt_zap.c index d6a991c..1733448 100644 --- a/module/zfs/ddt_zap.c +++ b/module/zfs/ddt_zap.c @@ -58,26 +58,30 @@ ddt_zap_destroy(objset_t *os, uint64_t object, dmu_tx_t *tx) static int ddt_zap_lookup(objset_t *os, uint64_t object, ddt_entry_t *dde) { - uchar_t cbuf[sizeof (dde->dde_phys) + 1]; + uchar_t *cbuf; uint64_t one, csize; int error; + cbuf = kmem_alloc(sizeof (dde->dde_phys) + 1, KM_PUSHPAGE); + error = zap_length_uint64(os, object, (uint64_t *)&dde->dde_key, DDT_KEY_WORDS, &one, &csize); if (error) - return (error); + goto out; ASSERT(one == 1); - ASSERT(csize <= sizeof (cbuf)); + ASSERT(csize <= (sizeof (dde->dde_phys) + 1)); error = zap_lookup_uint64(os, object, (uint64_t *)&dde->dde_key, DDT_KEY_WORDS, 1, csize, cbuf); if (error) - return (error); + goto out; ddt_decompress(cbuf, dde->dde_phys, csize, sizeof (dde->dde_phys)); +out: + kmem_free(cbuf, sizeof (dde->dde_phys) + 1); - return (0); + return (error); } static void