| 126 | } |
| 127 | |
| 128 | void |
| 129 | abd_verify(abd_t *abd) |
| 130 | { |
| 131 | ASSERT3U(abd->abd_size, >, 0); |
| 132 | ASSERT3U(abd->abd_size, <=, SPA_MAXBLOCKSIZE); |
| 133 | ASSERT3U(abd->abd_flags, ==, abd->abd_flags & (ABD_FLAG_LINEAR | |
| 134 | ABD_FLAG_OWNER | ABD_FLAG_META | ABD_FLAG_MULTI_ZONE | |
| 135 | ABD_FLAG_MULTI_CHUNK | ABD_FLAG_LINEAR_PAGE | ABD_FLAG_GANG | |
| 136 | ABD_FLAG_GANG_FREE | ABD_FLAG_ZEROS)); |
| 137 | IMPLY(abd->abd_parent != NULL, !(abd->abd_flags & ABD_FLAG_OWNER)); |
| 138 | IMPLY(abd->abd_flags & ABD_FLAG_META, abd->abd_flags & ABD_FLAG_OWNER); |
| 139 | if (abd_is_linear(abd)) { |
| 140 | ASSERT3P(ABD_LINEAR_BUF(abd), !=, NULL); |
| 141 | } else if (abd_is_gang(abd)) { |
| 142 | uint_t child_sizes = 0; |
| 143 | for (abd_t *cabd = list_head(&ABD_GANG(abd).abd_gang_chain); |
| 144 | cabd != NULL; |
| 145 | cabd = list_next(&ABD_GANG(abd).abd_gang_chain, cabd)) { |
| 146 | ASSERT(list_link_active(&cabd->abd_gang_link)); |
| 147 | child_sizes += cabd->abd_size; |
| 148 | abd_verify(cabd); |
| 149 | } |
| 150 | ASSERT3U(abd->abd_size, ==, child_sizes); |
| 151 | } else { |
| 152 | abd_verify_scatter(abd); |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | uint_t |
| 157 | abd_get_size(abd_t *abd) |
no test coverage detected