Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull three more md fixes from Neil Brown:
"Hasn't been a good cycle for md has it :-(

The main issue fixed here is a rare race which can result in two
reshape threads running at once, which doesn't end well.

Also a minor issue with a write to a sysfs file returning the wrong
value. Backports to 4.0-stable are indicated"

* tag 'md/4.1-rc7-fixes' of git://neil.brown.name/md:
md: make sure MD_RECOVERY_DONE is clear before starting recovery/resync
md: Close race when setting 'action' to 'idle'.
md: don't return 0 from array_state_store

+10 -6
+8 -6
drivers/md/md.c
··· 3834 3834 err = -EBUSY; 3835 3835 } 3836 3836 spin_unlock(&mddev->lock); 3837 - return err; 3837 + return err ?: len; 3838 3838 } 3839 3839 err = mddev_lock(mddev); 3840 3840 if (err) ··· 4217 4217 set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); 4218 4218 else 4219 4219 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); 4220 - flush_workqueue(md_misc_wq); 4221 - if (mddev->sync_thread) { 4222 - set_bit(MD_RECOVERY_INTR, &mddev->recovery); 4223 - if (mddev_lock(mddev) == 0) { 4220 + if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) && 4221 + mddev_lock(mddev) == 0) { 4222 + flush_workqueue(md_misc_wq); 4223 + if (mddev->sync_thread) { 4224 + set_bit(MD_RECOVERY_INTR, &mddev->recovery); 4224 4225 md_reap_sync_thread(mddev); 4225 - mddev_unlock(mddev); 4226 4226 } 4227 + mddev_unlock(mddev); 4227 4228 } 4228 4229 } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || 4229 4230 test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) ··· 8262 8261 if (mddev_is_clustered(mddev)) 8263 8262 md_cluster_ops->metadata_update_finish(mddev); 8264 8263 clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery); 8264 + clear_bit(MD_RECOVERY_DONE, &mddev->recovery); 8265 8265 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); 8266 8266 clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); 8267 8267 clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
+1
drivers/md/raid10.c
··· 4156 4156 4157 4157 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); 4158 4158 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); 4159 + clear_bit(MD_RECOVERY_DONE, &mddev->recovery); 4159 4160 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); 4160 4161 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); 4161 4162
+1
drivers/md/raid5.c
··· 7354 7354 7355 7355 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); 7356 7356 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); 7357 + clear_bit(MD_RECOVERY_DONE, &mddev->recovery); 7357 7358 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); 7358 7359 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); 7359 7360 mddev->sync_thread = md_register_thread(md_do_sync, mddev,