The abd child/parent relationship does not need to be tracked

ABD's currently track their parent/child relationship.  This applies to
`abd_get_offset()` and `abd_borrow_buf()`.  However, nothing depends on
knowing this relationship, it's only used for consistency checks to
verify that we are not destroying an ABD that's still in use.  When we
are creating/destroying ABD's frequently, the performance impact of
maintaining these data structures (in particular the atomic
increment/decrement operations) can be measurable.

This commit removes this verification code on production builds, but
keeps it when ZFS_DEBUG is set.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #11535
This commit is contained in:
Matthew Ahrens
2021-01-30 10:04:42 -08:00
committed by GitHub
parent cf0a6dd3ed
commit 2d4bbd14fc
2 changed files with 19 additions and 1 deletions
+2
View File
@@ -52,8 +52,10 @@ typedef struct abd {
abd_flags_t abd_flags;
uint_t abd_size; /* excludes scattered abd_offset */
list_node_t abd_gang_link;
#ifdef ZFS_DEBUG
struct abd *abd_parent;
zfs_refcount_t abd_children;
#endif
kmutex_t abd_mtx;
union {
struct abd_scatter {