behlendorf commented on this pull request.


>       for (indirect_split_t *is = list_head(&iv->iv_splits);
-           is != NULL; is = list_next(&iv->iv_splits, is))
-               segments++;
+           is != NULL; is = list_next(&iv->iv_splits, is)) {
+               uint64_t is_copies = 0;
+
+               for (int i = 0; i < is->is_children; i++) {

@sdimitro thanks for taking the time to review this.

> "accurate combinations" is not exactly accurate as the combinations 
> themselves are not unique.

Good catch.  This appears to be a issue which snuck in when the patch was 
reworked.  The intent was to calculate unique copies and the original patch did 
this by immediately freeing any dulicate `is->is_child[i].ic_data` copies and 
setting ` is->is_child[i].ic_data = NULL`.

Subsequently the mechanism was reworked and `is->is_child[j].ic_duplicate` was 
added instead because `vdev_indirect_repair()` relied on having non-NULL 
`abd_t`'s for repair.  In the process it looks like the loop logic wasn't 
entirely updated.

What you're proposing sounds like a reasonable way to fix this.  I'll see about 
implementing the proposed changes in ZoL for @ahrens to add to this PR for 
review.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/625#discussion_r182826254
------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/discussions/Tf29308eb1ca3d052-M17f065e447a2319f8e495cbd
Delivery options: https://openzfs.topicbox.com/groups

Reply via email to