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/3.13-fixes' of git://neil.brown.name/md

Pull md fixes from Neil Brown:
"Three bug fixes for md in 3.13-rc

All recent regressions, one in 3.12 so marked for -stable"

* tag 'md/3.13-fixes' of git://neil.brown.name/md:
md/raid5: fix newly-broken locking in get_active_stripe.
md: test mddev->flags more safely in md_check_recovery.
md/raid5: fix new memory-reference bug in alloc_thread_groups.

+6 -9
+1 -1
drivers/md/md.c
··· 7777 7777 if (mddev->ro && !test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) 7778 7778 return; 7779 7779 if ( ! ( 7780 - (mddev->flags & ~ (1<<MD_CHANGE_PENDING)) || 7780 + (mddev->flags & MD_UPDATE_SB_FLAGS & ~ (1<<MD_CHANGE_PENDING)) || 7781 7781 test_bit(MD_RECOVERY_NEEDED, &mddev->recovery) || 7782 7782 test_bit(MD_RECOVERY_DONE, &mddev->recovery) || 7783 7783 (mddev->external == 0 && mddev->safemode == 1) ||
+5 -8
drivers/md/raid5.c
··· 678 678 } else 679 679 init_stripe(sh, sector, previous); 680 680 } else { 681 + spin_lock(&conf->device_lock); 681 682 if (atomic_read(&sh->count)) { 682 683 BUG_ON(!list_empty(&sh->lru) 683 684 && !test_bit(STRIPE_EXPANDING, &sh->state) 684 685 && !test_bit(STRIPE_ON_UNPLUG_LIST, &sh->state) 685 - && !test_bit(STRIPE_ON_RELEASE_LIST, &sh->state)); 686 + ); 686 687 } else { 687 - spin_lock(&conf->device_lock); 688 688 if (!test_bit(STRIPE_HANDLE, &sh->state)) 689 689 atomic_inc(&conf->active_stripes); 690 - if (list_empty(&sh->lru) && 691 - !test_bit(STRIPE_ON_RELEASE_LIST, &sh->state) && 692 - !test_bit(STRIPE_EXPANDING, &sh->state)) 693 - BUG(); 690 + BUG_ON(list_empty(&sh->lru)); 694 691 list_del_init(&sh->lru); 695 692 if (sh->group) { 696 693 sh->group->stripes_cnt--; 697 694 sh->group = NULL; 698 695 } 699 - spin_unlock(&conf->device_lock); 700 696 } 697 + spin_unlock(&conf->device_lock); 701 698 } 702 699 } while (sh == NULL); 703 700 ··· 5468 5471 for (i = 0; i < *group_cnt; i++) { 5469 5472 struct r5worker_group *group; 5470 5473 5471 - group = worker_groups[i]; 5474 + group = &(*worker_groups)[i]; 5472 5475 INIT_LIST_HEAD(&group->handle_list); 5473 5476 group->conf = conf; 5474 5477 group->workers = workers + i * cnt;