Merge branch 'for-linus' of git://neil.brown.name/md

* 'for-linus' of git://neil.brown.name/md:
md: resolve confusion of MD_CHANGE_CLEAN
md: don't clear MD_CHANGE_CLEAN in md_update_sb() for external arrays
Move .gitignore from drivers/md to lib/raid6

+16 -22
-4
drivers/md/.gitignore
··· 1 - mktables 2 - raid6altivec*.c 3 - raid6int*.c 4 - raid6tables.c
+1 -2
drivers/md/bitmap.c
··· 1542 1542 atomic_read(&bitmap->mddev->recovery_active) == 0); 1543 1543 1544 1544 bitmap->mddev->curr_resync_completed = bitmap->mddev->curr_resync; 1545 - if (bitmap->mddev->persistent) 1546 - set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags); 1545 + set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags); 1547 1546 sector &= ~((1ULL << CHUNK_BLOCK_SHIFT(bitmap)) - 1); 1548 1547 s = 0; 1549 1548 while (s < sector && s < bitmap->mddev->resync_max_sectors) {
+10 -15
drivers/md/md.c
··· 2167 2167 rdev->recovery_offset = mddev->curr_resync_completed; 2168 2168 2169 2169 } 2170 - if (mddev->external || !mddev->persistent) { 2171 - clear_bit(MD_CHANGE_DEVS, &mddev->flags); 2170 + if (!mddev->persistent) { 2172 2171 clear_bit(MD_CHANGE_CLEAN, &mddev->flags); 2172 + clear_bit(MD_CHANGE_DEVS, &mddev->flags); 2173 2173 wake_up(&mddev->sb_wait); 2174 2174 return; 2175 2175 } ··· 2178 2178 2179 2179 mddev->utime = get_seconds(); 2180 2180 2181 - set_bit(MD_CHANGE_PENDING, &mddev->flags); 2182 2181 if (test_and_clear_bit(MD_CHANGE_DEVS, &mddev->flags)) 2183 2182 force_change = 1; 2184 2183 if (test_and_clear_bit(MD_CHANGE_CLEAN, &mddev->flags)) ··· 3370 3371 case 0: 3371 3372 if (mddev->in_sync) 3372 3373 st = clean; 3373 - else if (test_bit(MD_CHANGE_CLEAN, &mddev->flags)) 3374 + else if (test_bit(MD_CHANGE_PENDING, &mddev->flags)) 3374 3375 st = write_pending; 3375 3376 else if (mddev->safemode) 3376 3377 st = active_idle; ··· 3451 3452 mddev->in_sync = 1; 3452 3453 if (mddev->safemode == 1) 3453 3454 mddev->safemode = 0; 3454 - if (mddev->persistent) 3455 - set_bit(MD_CHANGE_CLEAN, 3456 - &mddev->flags); 3455 + set_bit(MD_CHANGE_CLEAN, &mddev->flags); 3457 3456 } 3458 3457 err = 0; 3459 3458 } else ··· 3463 3466 case active: 3464 3467 if (mddev->pers) { 3465 3468 restart_array(mddev); 3466 - if (mddev->external) 3467 - clear_bit(MD_CHANGE_CLEAN, &mddev->flags); 3469 + clear_bit(MD_CHANGE_PENDING, &mddev->flags); 3468 3470 wake_up(&mddev->sb_wait); 3469 3471 err = 0; 3470 3472 } else { ··· 6568 6572 if (mddev->in_sync) { 6569 6573 mddev->in_sync = 0; 6570 6574 set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6575 + set_bit(MD_CHANGE_PENDING, &mddev->flags); 6571 6576 md_wakeup_thread(mddev->thread); 6572 6577 did_change = 1; 6573 6578 } ··· 6577 6580 if (did_change) 6578 6581 sysfs_notify_dirent_safe(mddev->sysfs_state); 6579 6582 wait_event(mddev->sb_wait, 6580 - !test_bit(MD_CHANGE_CLEAN, &mddev->flags) && 6581 6583 !test_bit(MD_CHANGE_PENDING, &mddev->flags)); 6582 6584 } 6583 6585 ··· 6612 6616 if (mddev->in_sync) { 6613 6617 mddev->in_sync = 0; 6614 6618 set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6619 + set_bit(MD_CHANGE_PENDING, &mddev->flags); 6615 6620 if (mddev->safemode_delay && 6616 6621 mddev->safemode == 0) 6617 6622 mddev->safemode = 1; ··· 6622 6625 } else 6623 6626 spin_unlock_irq(&mddev->write_lock); 6624 6627 6625 - if (test_bit(MD_CHANGE_CLEAN, &mddev->flags)) 6628 + if (test_bit(MD_CHANGE_PENDING, &mddev->flags)) 6626 6629 return -EAGAIN; 6627 6630 else 6628 6631 return 0; ··· 6820 6823 atomic_read(&mddev->recovery_active) == 0); 6821 6824 mddev->curr_resync_completed = 6822 6825 mddev->curr_resync; 6823 - if (mddev->persistent) 6824 - set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6826 + set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6825 6827 sysfs_notify(&mddev->kobj, NULL, "sync_completed"); 6826 6828 } 6827 6829 ··· 7099 7103 mddev->recovery_cp == MaxSector) { 7100 7104 mddev->in_sync = 1; 7101 7105 did_change = 1; 7102 - if (mddev->persistent) 7103 - set_bit(MD_CHANGE_CLEAN, &mddev->flags); 7106 + set_bit(MD_CHANGE_CLEAN, &mddev->flags); 7104 7107 } 7105 7108 if (mddev->safemode == 1) 7106 7109 mddev->safemode = 0;
+1 -1
drivers/md/md.h
··· 140 140 unsigned long flags; 141 141 #define MD_CHANGE_DEVS 0 /* Some device status has changed */ 142 142 #define MD_CHANGE_CLEAN 1 /* transition to or from 'clean' */ 143 - #define MD_CHANGE_PENDING 2 /* superblock update in progress */ 143 + #define MD_CHANGE_PENDING 2 /* switch from 'clean' to 'active' in progress */ 144 144 145 145 int suspended; 146 146 atomic_t active_io;
+4
lib/raid6/.gitignore
··· 1 + mktables 2 + altivec*.c 3 + int*.c 4 + tables.c