return 0;
}
-void __md_update_sb(mddev_t * mddev)
+static void md_update_sb(mddev_t * mddev)
{
int err, count = 100;
struct list_head *tmp;
}
}
-void md_update_sb(mddev_t *mddev)
-{
- if (mddev_lock(mddev))
- return;
- if (mddev->sb_dirty)
- __md_update_sb(mddev);
- mddev_unlock(mddev);
-}
-
-
/*
* Import a device. If 'on_disk', then sanity check the superblock
*
*/
if (mddev->pers->sync_request)
mddev->sb->state &= ~(1 << MD_SB_CLEAN);
- __md_update_sb(mddev);
+ md_update_sb(mddev);
md_recover_arrays();
/*
printk(KERN_INFO "md: marking sb clean...\n");
mddev->sb->state |= 1 << MD_SB_CLEAN;
}
- __md_update_sb(mddev);
+ md_update_sb(mddev);
}
if (ro)
set_device_ro(dev, 1);
remove_descriptor(disk, mddev->sb);
kick_rdev_from_array(rdev);
- __md_update_sb(mddev);
+ md_update_sb(mddev);
return 0;
busy:
mddev->sb->spare_disks++;
mddev->sb->working_disks++;
- __md_update_sb(mddev);
+ md_update_sb(mddev);
/*
* Kick recovery, maybe this spare has to be added to the
sb = mddev->sb;
if (!sb || !mddev->pers || mddev->ro)
goto unlock;
+ if (mddev->sb_dirty)
+ md_update_sb(mddev);
if (mddev->recovery_running > 0)
/* resync/recovery still happening */
goto unlock;
mddev->spare = NULL;
}
}
- __md_update_sb(mddev);
+ md_update_sb(mddev);
mddev->recovery_running = 0;
wake_up(&resync_wait);
goto unlock;
EXPORT_SYMBOL(md_done_sync);
EXPORT_SYMBOL(md_register_thread);
EXPORT_SYMBOL(md_unregister_thread);
-EXPORT_SYMBOL(md_update_sb);
EXPORT_SYMBOL(md_wakeup_thread);
EXPORT_SYMBOL(md_print_devices);
EXPORT_SYMBOL(find_rdev_nr);
sb->working_disks--;
sb->failed_disks++;
mddev->sb_dirty = 1;
- md_wakeup_thread(conf->thread);
conf->working_disks--;
printk (DISK_FAILED, bdev_partition_name (multipath->bdev),
conf->working_disks);
spin_unlock_irqrestore(&retry_list_lock, flags);
mddev = mp_bh->mddev;
- if (mddev->sb_dirty) {
- printk(KERN_INFO "dirty sb detected, updating.\n");
- md_update_sb(mddev);
- }
bio = &mp_bh->bio;
bio->bi_sector = mp_bh->master_bio->bi_sector;
bdev = bio->bi_bdev;
sb->working_disks--;
sb->failed_disks++;
mddev->sb_dirty = 1;
- md_wakeup_thread(conf->thread);
if (!mirror->write_only)
conf->working_disks--;
printk(DISK_FAILED, bdev_partition_name(mirror->bdev), conf->working_disks);
mddev = r1_bio->mddev;
conf = mddev_to_conf(mddev);
- if (mddev->sb_dirty) {
- printk(KERN_INFO "raid1: dirty sb detected, updating.\n");
- md_update_sb(mddev);
- }
bio = r1_bio->master_bio;
switch(r1_bio->cmd) {
case SPECIAL:
mddev->sb_dirty = 1;
conf->working_disks--;
conf->failed_disks++;
- md_wakeup_thread(conf->thread);
printk (KERN_ALERT
"raid5: Disk failure on %s, disabling device."
" Operation continuing on %d devices\n",
sb->failed_disks++;
mddev->sb_dirty = 1;
- md_wakeup_thread(conf->thread);
return 0;
}
PRINTK("+++ raid5d active\n");
handled = 0;
-
- if (mddev->sb_dirty)
- md_update_sb(mddev);
spin_lock_irq(&conf->device_lock);
while (1) {
struct list_head *first;
extern void md_unregister_thread (mdk_thread_t *thread);
extern void md_wakeup_thread(mdk_thread_t *thread);
extern void md_interrupt_thread (mdk_thread_t *thread);
-extern void md_update_sb (mddev_t *mddev);
extern void md_done_sync(mddev_t *mddev, int blocks, int ok);
extern void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors);
extern int md_error (mddev_t *mddev, struct block_device *bdev);