diff options
Diffstat (limited to 'xlators/features/bit-rot/src/bitd/bit-rot-scrub.c')
-rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-scrub.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c index 7012f2f0a4a..ee996525f76 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c +++ b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.c @@ -1625,11 +1625,12 @@ br_read_bad_object_dir (xlator_t *this, br_child_t *child, fd_t *fd, off_t offset = 0; int32_t count = 0; char key[PATH_MAX] = {0, }; + dict_t *out_dict = NULL; INIT_LIST_HEAD (&entries.list); while ((ret = syncop_readdir (child->xl, fd, 131072, offset, &entries, - NULL, NULL))) { + NULL, &out_dict))) { if (ret < 0) goto out; @@ -1647,6 +1648,12 @@ br_read_bad_object_dir (xlator_t *this, br_child_t *child, fd_t *fd, entry->d_name); if (!ret) count++; + + if (out_dict) { + dict_copy (out_dict, dict); + dict_unref (out_dict); + out_dict = NULL; + } } gf_dirent_free (&entries); @@ -1742,6 +1749,7 @@ br_collect_bad_objects_of_child (xlator_t *this, br_child_t *child, int32_t tmp_count = 0; char *entry = NULL; char tmp[PATH_MAX] = {0, }; + char *path = NULL; ret = dict_get_int32 (child_dict, "count", &count); if (ret) @@ -1755,14 +1763,16 @@ br_collect_bad_objects_of_child (xlator_t *this, br_child_t *child, if (ret) continue; - snprintf (tmp, PATH_MAX, "%s ==> BRICK: %s", - entry, child->brick_path); + ret = dict_get_str (child_dict, entry, &path); + snprintf (tmp, PATH_MAX, "%s ==> BRICK: %s\n path: %s", + entry, child->brick_path, path); snprintf (main_key, PATH_MAX, "quarantine-%d", tmp_count); ret = dict_set_dynstr_with_alloc (dict, main_key, tmp); - if (!ret) - tmp_count++; + if (!ret) + tmp_count++; + path = NULL; } ret = tmp_count; |