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