DDT: Make ddt_zap_walk() use cursor _by_dnode functions

ddt_zap_walk() already receives dnode as an argument.  We can save
one dnode_hold() per entry by using _by_dnode cursor functions.
zap_cursor_init_noprefetch_by_dnode() is added in the process.

Signed-off-by: Alexander Motin <[email protected]>
Reviewed-by: Rob Norris <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Closes #18888
This commit is contained in:
Alexander Motin authored and GitHub committed 2026-08-04 15:30:33 -04:00
1 parent 845cd967ee
commit 674b1ae5cd
3 files changed
+9 -3

No files matched your search

+1
View File
@@ -474,6 +474,7 @@ void zap_cursor_fini(zap_cursor_t *zc);
*/
int zap_cursor_init_noprefetch(zap_cursor_t *zc, objset_t *os,
uint64_t zapobj);
int zap_cursor_init_noprefetch_by_dnode(zap_cursor_t *zc, dnode_t *dn);
/*
* Initialize a zap cursor pointing to the position recorded by
+2 -3
View File
@@ -204,10 +204,9 @@ ddt_zap_walk(dnode_t *dn, uint64_t *walk, ddt_key_t *ddk,
* scrub I/Os for each ZAP block that we read in, so
* reading the ZAP is unlikely to be the bottleneck.
*/
zap_cursor_init_noprefetch(&zc, dn->dn_objset, dn->dn_object);
zap_cursor_init_noprefetch_by_dnode(&zc, dn);
} else {
zap_cursor_init_serialized(&zc, dn->dn_objset, dn->dn_object,
*walk);
zap_cursor_init_serialized_by_dnode(&zc, dn, *walk);
}
if ((error = zap_cursor_retrieve(&zc, za)) == 0) {
uint64_t csize = za->za_num_integers;
+6
View File
@@ -1108,6 +1108,12 @@ zap_cursor_init_noprefetch(zap_cursor_t *zc, objset_t *os, uint64_t zapobj)
return (zap_cursor_init_impl(zc, os, zapobj, 0, B_FALSE));
}
int
zap_cursor_init_noprefetch_by_dnode(zap_cursor_t *zc, dnode_t *dn)
{
return (zap_cursor_init_by_dnode_impl(zc, dn, 0, B_FALSE));
}
int
zap_cursor_init_serialized(zap_cursor_t *zc, objset_t *os, uint64_t zapobj,
uint64_t serialized)