--- zzzz-none-000/linux-2.6.19.2/drivers/md/md.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/drivers/md/md.c 2007-01-11 07:38:19.000000000 +0000 @@ -2003,7 +2003,6 @@ kobject_init(&rdev->kobj); rdev->desc_nr = -1; - rdev->saved_raid_disk = -1; rdev->flags = 0; rdev->data_offset = 0; rdev->sb_events = 0; @@ -3200,7 +3199,6 @@ mddev->changed = 1; md_new_event(mddev); - kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE); return 0; } @@ -4046,8 +4044,11 @@ return -EBUSY; ITERATE_RDEV(mddev,rdev,tmp) { sector_t avail; - avail = rdev->size * 2; - + if (rdev->sb_offset > rdev->data_offset) + avail = (rdev->sb_offset*2) - rdev->data_offset; + else + avail = get_capacity(rdev->bdev->bd_disk) + - rdev->data_offset; if (fit && (size == 0 || size > avail/2)) size = avail/2; if (avail < ((sector_t)size << 1)) @@ -4486,7 +4487,6 @@ * many dirty RAID5 blocks. */ - current->flags |= PF_NOFREEZE; allow_signal(SIGKILL); while (!kthread_should_stop()) { @@ -4503,6 +4503,7 @@ test_bit(THREAD_WAKEUP, &thread->flags) || kthread_should_stop(), thread->timeout); + try_to_freeze(); clear_bit(THREAD_WAKEUP, &thread->flags);