When the 'blocked' flag on a device is cleared while there are unacknowledged bad blocks we must fail the device. This is needed for backwards compatability of the interface. The code currently uses the wrong test for "unacknowledged bad blocks exist". Change it to the right test.
Unified · Split
| @@ -2592,7 +2592,7 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len) · 2591 unmodified lines | |||
| 2592 | err = 0; | 2592 | err = 0; |
| 2593 | } else if (cmd_match(buf, "-blocked")) { | 2593 | } else if (cmd_match(buf, "-blocked")) { |
| 2594 | if (!test_bit(Faulty, &rdev->flags) && | 2594 | if (!test_bit(Faulty, &rdev->flags) && |
| 2595 | test_bit(BlockedBadBlocks, &rdev->flags)) { | 2595 | rdev->badblocks.unacked_exist) { |
| 2596 | /* metadata handler doesn't understand badblocks, | 2596 | /* metadata handler doesn't understand badblocks, |
| 2597 | * so we need to fail the device | 2597 | * so we need to fail the device |
| 2598 | */ | 2598 | */ |