aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2016-01-06 17:37:13 -0500
committerNeilBrown <neilb@suse.com>2016-01-13 19:49:43 -0500
commita62ab49eb502a07814f9942770893118c6281223 (patch)
treef83e3f553bcf0e9bcbe7cd18882da8f8a984eeb8
parent274d8cbde1bc3bdfb31c5d6a58113dff5cee4f87 (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.c9
-rw-r--r--drivers/md/raid5-cache.c1
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
1240error: 1241error: