Explorar o código

raid5-ppl: check recovery_offset when performing ppl recovery

If starting an array that is undergoing rebuild, make ppl recovery honor
the recovery_offset of a member disk and don't read data that is not yet
in-sync.

Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Artur Paszkiewicz %!s(int64=8) %!d(string=hai) anos
pai
achega
07719ff767
Modificáronse 1 ficheiros con 2 adicións e 1 borrados
  1. 2 1
      drivers/md/raid5-ppl.c

+ 2 - 1
drivers/md/raid5-ppl.c

@@ -758,7 +758,8 @@ static int ppl_recover_entry(struct ppl_log *log, struct ppl_header_entry *e,
 				 (unsigned long long)sector);
 				 (unsigned long long)sector);
 
 
 			rdev = conf->disks[dd_idx].rdev;
 			rdev = conf->disks[dd_idx].rdev;
-			if (!rdev) {
+			if (!rdev || (!test_bit(In_sync, &rdev->flags) &&
+				      sector >= rdev->recovery_offset)) {
 				pr_debug("%s:%*s data member disk %d missing\n",
 				pr_debug("%s:%*s data member disk %d missing\n",
 					 __func__, indent, "", dd_idx);
 					 __func__, indent, "", dd_idx);
 				update_parity = false;
 				update_parity = false;