From 84c07adadb2486e4049032e43e1f38650ca75289 Mon Sep 17 00:00:00 2001 From: Gvozden Neskovic Date: Thu, 5 Jan 2017 14:10:07 -0500 Subject: Remove dependency on linear ABD Wherever possible it's best to avoid depending on a linear ABD. Update the code accordingly in the following areas. - vdev_raidz - zio, zio_checksum - zfs_fm - change abd_alloc_for_io() to use abd_alloc() Reviewed-by: David Quigley Reviewed-by: Brian Behlendorf Signed-off-by: Gvozden Neskovic Closes #5668 --- cmd/zdb/zdb.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cmd/zdb/zdb.c') diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index 82c2b5733..d5b8a7745 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -3736,6 +3736,7 @@ zdb_read_block(char *thing, spa_t *spa) void *lbuf, *buf; char *s, *p, *dup, *vdev, *flagstr; int i, error; + boolean_t borrowed = B_FALSE; dup = strdup(thing); s = strtok(dup, ":"); @@ -3806,7 +3807,7 @@ zdb_read_block(char *thing, spa_t *spa) psize = size; lsize = size; - pabd = abd_alloc_linear(SPA_MAXBLOCKSIZE, B_FALSE); + pabd = abd_alloc_for_io(SPA_MAXBLOCKSIZE, B_FALSE); lbuf = umem_alloc(SPA_MAXBLOCKSIZE, UMEM_NOFAIL); BP_ZERO(bp); @@ -3907,8 +3908,9 @@ zdb_read_block(char *thing, spa_t *spa) buf = lbuf; size = lsize; } else { - buf = abd_to_buf(pabd); size = psize; + buf = abd_borrow_buf_copy(pabd, size); + borrowed = B_TRUE; } if (flags & ZDB_FLAG_PRINT_BLKPTR) @@ -3924,6 +3926,9 @@ zdb_read_block(char *thing, spa_t *spa) else zdb_dump_block(thing, buf, size, flags); + if (borrowed) + abd_return_buf_copy(pabd, buf, size); + out: abd_free(pabd); umem_free(lbuf, SPA_MAXBLOCKSIZE); -- cgit v1.2.3