diff options
author | Shaohua Li <shli@fb.com> | 2016-01-06 17:37:13 -0500 |
---|---|---|
committer | NeilBrown <neilb@suse.com> | 2016-01-13 19:49:43 -0500 |
commit | a62ab49eb502a07814f9942770893118c6281223 (patch) | |
tree | f83e3f553bcf0e9bcbe7cd18882da8f8a984eeb8 | |
parent | 274d8cbde1bc3bdfb31c5d6a58113dff5cee4f87 (diff) |
md: set MD_HAS_JOURNAL in correct places
Set MD_HAS_JOURNAL when a array is loaded or journal is initialized.
This is to avoid the flags set too early in journal disk hotadd.
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: NeilBrown <neilb@suse.com>
-rw-r--r-- | drivers/md/md.c | 9 | ||||
-rw-r--r-- | drivers/md/raid5-cache.c | 1 |
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 0d1d822eeda5..29a4bbf62be5 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -1597,6 +1597,11 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
1597 | mddev->new_chunk_sectors = mddev->chunk_sectors; | 1597 | mddev->new_chunk_sectors = mddev->chunk_sectors; |
1598 | } | 1598 | } |
1599 | 1599 | ||
1600 | if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL) { | ||
1601 | set_bit(MD_HAS_JOURNAL, &mddev->flags); | ||
1602 | if (mddev->recovery_cp == MaxSector) | ||
1603 | set_bit(MD_JOURNAL_CLEAN, &mddev->flags); | ||
1604 | } | ||
1600 | } else if (mddev->pers == NULL) { | 1605 | } else if (mddev->pers == NULL) { |
1601 | /* Insist of good event counter while assembling, except for | 1606 | /* Insist of good event counter while assembling, except for |
1602 | * spares (which don't need an event count) */ | 1607 | * spares (which don't need an event count) */ |
@@ -1643,8 +1648,6 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
1643 | } | 1648 | } |
1644 | set_bit(Journal, &rdev->flags); | 1649 | set_bit(Journal, &rdev->flags); |
1645 | rdev->journal_tail = le64_to_cpu(sb->journal_tail); | 1650 | rdev->journal_tail = le64_to_cpu(sb->journal_tail); |
1646 | if (mddev->recovery_cp == MaxSector) | ||
1647 | set_bit(MD_JOURNAL_CLEAN, &mddev->flags); | ||
1648 | rdev->raid_disk = 0; | 1651 | rdev->raid_disk = 0; |
1649 | break; | 1652 | break; |
1650 | default: | 1653 | default: |
@@ -1664,8 +1667,6 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
1664 | set_bit(WriteMostly, &rdev->flags); | 1667 | set_bit(WriteMostly, &rdev->flags); |
1665 | if (le32_to_cpu(sb->feature_map) & MD_FEATURE_REPLACEMENT) | 1668 | if (le32_to_cpu(sb->feature_map) & MD_FEATURE_REPLACEMENT) |
1666 | set_bit(Replacement, &rdev->flags); | 1669 | set_bit(Replacement, &rdev->flags); |
1667 | if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL) | ||
1668 | set_bit(MD_HAS_JOURNAL, &mddev->flags); | ||
1669 | } else /* MULTIPATH are always insync */ | 1670 | } else /* MULTIPATH are always insync */ |
1670 | set_bit(In_sync, &rdev->flags); | 1671 | set_bit(In_sync, &rdev->flags); |
1671 | 1672 | ||
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index 6d2b4789a928..7ac035a73281 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c | |||
@@ -1235,6 +1235,7 @@ int r5l_init_log(struct r5conf *conf, struct md_rdev *rdev) | |||
1235 | goto error; | 1235 | goto error; |
1236 | 1236 | ||
1237 | rcu_assign_pointer(conf->log, log); | 1237 | rcu_assign_pointer(conf->log, log); |
1238 | set_bit(MD_HAS_JOURNAL, &conf->mddev->flags); | ||
1238 | return 0; | 1239 | return 0; |
1239 | 1240 | ||
1240 | error: | 1241 | error: |