static int test_disks(int i, int j) { int erra, errb; memset(recovi, 0xf0, PAGE_SIZE); memset(recovj, 0xba, PAGE_SIZE); dataptrs[i] = recovi; dataptrs[j] = recovj; raid6_dual_recov(NDISKS, PAGE_SIZE, i, j, (void **)&dataptrs); erra = memcmp(data[i], recovi, PAGE_SIZE); errb = memcmp(data[j], recovj, PAGE_SIZE); if (i < NDISKS-2 && j == NDISKS-1) { /* We don't implement the DQ failure scenario, since it's equivalent to a RAID-5 failure (XOR, then recompute Q) */ erra = errb = 0; } else { printf("algo=%-8s faila=%3d(%c) failb=%3d(%c) %s\n", raid6_call.name, i, disk_type(i), j, disk_type(j), (!erra && !errb) ? "OK" : !erra ? "ERRB" : !errb ? "ERRA" : "ERRAB"); } dataptrs[i] = data[i]; dataptrs[j] = data[j]; return erra || errb; }
static int test_disks(int i, int j) { int erra, errb; memset(recovi, 0xf0, PAGE_SIZE); memset(recovj, 0xba, PAGE_SIZE); dataptrs[i] = recovi; dataptrs[j] = recovj; raid6_dual_recov(NDISKS, PAGE_SIZE, i, j, (void **)&dataptrs); erra = memcmp(data[i], recovi, PAGE_SIZE); errb = memcmp(data[j], recovj, PAGE_SIZE); if (i < NDISKS-2 && j == NDISKS-1) { /* */ erra = errb = 0; } else { printf("algo=%-8s faila=%3d(%c) failb=%3d(%c) %s\n", raid6_call.name, i, disk_type(i), j, disk_type(j), (!erra && !errb) ? "OK" : !erra ? "ERRB" : !errb ? "ERRA" : "ERRAB"); } dataptrs[i] = data[i]; dataptrs[j] = data[j]; return erra || errb; }
/* * disk_policy() gathers policy information for the * disk described in the given mdinfo (disk.{major,minor}). */ struct dev_policy *disk_policy(struct mdinfo *disk) { char *path = NULL; char *type = disk_type(disk); struct dev_policy *pol = NULL; if (config_rules_has_path) path = disk_path(disk); pol = path_policy(path, type); free(path); return pol; }
static int test_disks(int i, int j, int disks) { int erra, errb; memset(page_address(recovi), 0xf0, PAGE_SIZE); memset(page_address(recovj), 0xba, PAGE_SIZE); dataptrs[i] = recovi; dataptrs[j] = recovj; raid6_dual_recov(disks, PAGE_SIZE, i, j, dataptrs); erra = memcmp(page_address(data[i]), page_address(recovi), PAGE_SIZE); errb = memcmp(page_address(data[j]), page_address(recovj), PAGE_SIZE); pr("%s(%d, %d): faila=%3d(%c) failb=%3d(%c) %s\n", __func__, i, j, i, disk_type(i, disks), j, disk_type(j, disks), (!erra && !errb) ? "OK" : !erra ? "ERRB" : !errb ? "ERRA" : "ERRAB"); dataptrs[i] = data[i]; dataptrs[j] = data[j]; return erra || errb; }