Commit 4d39aa1b authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'md-3.3-fixes' of git://neil.brown.name/md

Some simple md-related fixes.

1/ two small fixes to ensure we handle an interrupted resync properly.
2/ avoid loading the bitmap multiple times in dm-raid

* tag 'md-3.3-fixes' of git://neil.brown.name/md:
  md: two small fixes to handling interrupt resync.
  Prevent DM RAID from loading bitmap twice.
parents 4a68d54c db91ff55
...@@ -56,7 +56,8 @@ struct raid_dev { ...@@ -56,7 +56,8 @@ struct raid_dev {
struct raid_set { struct raid_set {
struct dm_target *ti; struct dm_target *ti;
uint64_t print_flags; uint32_t bitmap_loaded;
uint32_t print_flags;
struct mddev md; struct mddev md;
struct raid_type *raid_type; struct raid_type *raid_type;
...@@ -1085,7 +1086,7 @@ static int raid_status(struct dm_target *ti, status_type_t type, ...@@ -1085,7 +1086,7 @@ static int raid_status(struct dm_target *ti, status_type_t type,
raid_param_cnt += 2; raid_param_cnt += 2;
} }
raid_param_cnt += (hweight64(rs->print_flags & ~DMPF_REBUILD) * 2); raid_param_cnt += (hweight32(rs->print_flags & ~DMPF_REBUILD) * 2);
if (rs->print_flags & (DMPF_SYNC | DMPF_NOSYNC)) if (rs->print_flags & (DMPF_SYNC | DMPF_NOSYNC))
raid_param_cnt--; raid_param_cnt--;
...@@ -1197,7 +1198,12 @@ static void raid_resume(struct dm_target *ti) ...@@ -1197,7 +1198,12 @@ static void raid_resume(struct dm_target *ti)
{ {
struct raid_set *rs = ti->private; struct raid_set *rs = ti->private;
if (!rs->bitmap_loaded) {
bitmap_load(&rs->md); bitmap_load(&rs->md);
rs->bitmap_loaded = 1;
} else
md_wakeup_thread(rs->md.thread);
mddev_resume(&rs->md); mddev_resume(&rs->md);
} }
......
...@@ -7333,7 +7333,8 @@ void md_do_sync(struct mddev *mddev) ...@@ -7333,7 +7333,8 @@ void md_do_sync(struct mddev *mddev)
printk(KERN_INFO printk(KERN_INFO
"md: checkpointing %s of %s.\n", "md: checkpointing %s of %s.\n",
desc, mdname(mddev)); desc, mdname(mddev));
mddev->recovery_cp = mddev->curr_resync; mddev->recovery_cp =
mddev->curr_resync_completed;
} }
} else } else
mddev->recovery_cp = MaxSector; mddev->recovery_cp = MaxSector;
...@@ -7351,9 +7352,9 @@ void md_do_sync(struct mddev *mddev) ...@@ -7351,9 +7352,9 @@ void md_do_sync(struct mddev *mddev)
rcu_read_unlock(); rcu_read_unlock();
} }
} }
skip:
set_bit(MD_CHANGE_DEVS, &mddev->flags); set_bit(MD_CHANGE_DEVS, &mddev->flags);
skip:
if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
/* We completed so min/max setting can be forgotten if used. */ /* We completed so min/max setting can be forgotten if used. */
if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment