aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 7daa7b1e145f..8cbf9c9df1c3 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2003,6 +2003,7 @@ static mdk_rdev_t *md_import_device(dev_t newdev, int super_format, int super_mi
2003 kobject_init(&rdev->kobj); 2003 kobject_init(&rdev->kobj);
2004 2004
2005 rdev->desc_nr = -1; 2005 rdev->desc_nr = -1;
2006 rdev->saved_raid_disk = -1;
2006 rdev->flags = 0; 2007 rdev->flags = 0;
2007 rdev->data_offset = 0; 2008 rdev->data_offset = 0;
2008 rdev->sb_events = 0; 2009 rdev->sb_events = 0;
@@ -3199,6 +3200,7 @@ static int do_md_run(mddev_t * mddev)
3199 3200
3200 mddev->changed = 1; 3201 mddev->changed = 1;
3201 md_new_event(mddev); 3202 md_new_event(mddev);
3203 kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE);
3202 return 0; 3204 return 0;
3203} 3205}
3204 3206
@@ -4044,11 +4046,8 @@ static int update_size(mddev_t *mddev, unsigned long size)
4044 return -EBUSY; 4046 return -EBUSY;
4045 ITERATE_RDEV(mddev,rdev,tmp) { 4047 ITERATE_RDEV(mddev,rdev,tmp) {
4046 sector_t avail; 4048 sector_t avail;
4047 if (rdev->sb_offset > rdev->data_offset) 4049 avail = rdev->size * 2;
4048 avail = (rdev->sb_offset*2) - rdev->data_offset; 4050
4049 else
4050 avail = get_capacity(rdev->bdev->bd_disk)
4051 - rdev->data_offset;
4052 if (fit && (size == 0 || size > avail/2)) 4051 if (fit && (size == 0 || size > avail/2))
4053 size = avail/2; 4052 size = avail/2;
4054 if (avail < ((sector_t)size << 1)) 4053 if (avail < ((sector_t)size << 1))
@@ -4487,6 +4486,7 @@ static int md_thread(void * arg)
4487 * many dirty RAID5 blocks. 4486 * many dirty RAID5 blocks.
4488 */ 4487 */
4489 4488
4489 current->flags |= PF_NOFREEZE;
4490 allow_signal(SIGKILL); 4490 allow_signal(SIGKILL);
4491 while (!kthread_should_stop()) { 4491 while (!kthread_should_stop()) {
4492 4492
@@ -4503,7 +4503,6 @@ static int md_thread(void * arg)
4503 test_bit(THREAD_WAKEUP, &thread->flags) 4503 test_bit(THREAD_WAKEUP, &thread->flags)
4504 || kthread_should_stop(), 4504 || kthread_should_stop(),
4505 thread->timeout); 4505 thread->timeout);
4506 try_to_freeze();
4507 4506
4508 clear_bit(THREAD_WAKEUP, &thread->flags); 4507 clear_bit(THREAD_WAKEUP, &thread->flags);
4509 4508