mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
md: export various start/stop interfaces
export entry points for starting and stopping md arrays. This will be used by a module to make md/raid5 work under dm. Also stop calling md_stop_writes from md_stop, as that won't work well with dm - it will want to call the two separately. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
e8bb9a839a
commit
390ee602a1
2 changed files with 20 additions and 8 deletions
|
@ -261,7 +261,7 @@ static int md_make_request(struct request_queue *q, struct bio *bio)
|
||||||
* Once ->stop is called and completes, the module will be completely
|
* Once ->stop is called and completes, the module will be completely
|
||||||
* unused.
|
* unused.
|
||||||
*/
|
*/
|
||||||
static void mddev_suspend(mddev_t *mddev)
|
void mddev_suspend(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
BUG_ON(mddev->suspended);
|
BUG_ON(mddev->suspended);
|
||||||
mddev->suspended = 1;
|
mddev->suspended = 1;
|
||||||
|
@ -269,13 +269,15 @@ static void mddev_suspend(mddev_t *mddev)
|
||||||
wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0);
|
wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0);
|
||||||
mddev->pers->quiesce(mddev, 1);
|
mddev->pers->quiesce(mddev, 1);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mddev_suspend);
|
||||||
|
|
||||||
static void mddev_resume(mddev_t *mddev)
|
void mddev_resume(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
mddev->suspended = 0;
|
mddev->suspended = 0;
|
||||||
wake_up(&mddev->sb_wait);
|
wake_up(&mddev->sb_wait);
|
||||||
mddev->pers->quiesce(mddev, 0);
|
mddev->pers->quiesce(mddev, 0);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mddev_resume);
|
||||||
|
|
||||||
int mddev_congested(mddev_t *mddev, int bits)
|
int mddev_congested(mddev_t *mddev, int bits)
|
||||||
{
|
{
|
||||||
|
@ -416,7 +418,7 @@ static void mddev_put(mddev_t *mddev)
|
||||||
spin_unlock(&all_mddevs_lock);
|
spin_unlock(&all_mddevs_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mddev_init(mddev_t *mddev)
|
void mddev_init(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
mutex_init(&mddev->open_mutex);
|
mutex_init(&mddev->open_mutex);
|
||||||
mutex_init(&mddev->reconfig_mutex);
|
mutex_init(&mddev->reconfig_mutex);
|
||||||
|
@ -436,6 +438,7 @@ static void mddev_init(mddev_t *mddev)
|
||||||
mddev->resync_max = MaxSector;
|
mddev->resync_max = MaxSector;
|
||||||
mddev->level = LEVEL_NONE;
|
mddev->level = LEVEL_NONE;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(mddev_init);
|
||||||
|
|
||||||
static mddev_t * mddev_find(dev_t unit)
|
static mddev_t * mddev_find(dev_t unit)
|
||||||
{
|
{
|
||||||
|
@ -4333,7 +4336,7 @@ static void md_safemode_timeout(unsigned long data)
|
||||||
|
|
||||||
static int start_dirty_degraded;
|
static int start_dirty_degraded;
|
||||||
|
|
||||||
static int md_run(mddev_t *mddev)
|
int md_run(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
mdk_rdev_t *rdev;
|
mdk_rdev_t *rdev;
|
||||||
|
@ -4537,6 +4540,7 @@ static int md_run(mddev_t *mddev)
|
||||||
sysfs_notify(&mddev->kobj, NULL, "degraded");
|
sysfs_notify(&mddev->kobj, NULL, "degraded");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(md_run);
|
||||||
|
|
||||||
static int do_md_run(mddev_t *mddev)
|
static int do_md_run(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
|
@ -4646,7 +4650,7 @@ static void md_clean(mddev_t *mddev)
|
||||||
mddev->bitmap_info.max_write_behind = 0;
|
mddev->bitmap_info.max_write_behind = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void md_stop_writes(mddev_t *mddev)
|
void md_stop_writes(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
if (mddev->sync_thread) {
|
if (mddev->sync_thread) {
|
||||||
set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
||||||
|
@ -4666,11 +4670,10 @@ static void md_stop_writes(mddev_t *mddev)
|
||||||
md_update_sb(mddev, 1);
|
md_update_sb(mddev, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(md_stop_writes);
|
||||||
|
|
||||||
static void md_stop(mddev_t *mddev)
|
void md_stop(mddev_t *mddev)
|
||||||
{
|
{
|
||||||
md_stop_writes(mddev);
|
|
||||||
|
|
||||||
mddev->pers->stop(mddev);
|
mddev->pers->stop(mddev);
|
||||||
if (mddev->pers->sync_request && mddev->to_remove == NULL)
|
if (mddev->pers->sync_request && mddev->to_remove == NULL)
|
||||||
mddev->to_remove = &md_redundancy_group;
|
mddev->to_remove = &md_redundancy_group;
|
||||||
|
@ -4678,6 +4681,7 @@ static void md_stop(mddev_t *mddev)
|
||||||
mddev->pers = NULL;
|
mddev->pers = NULL;
|
||||||
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(md_stop);
|
||||||
|
|
||||||
static int md_set_readonly(mddev_t *mddev, int is_open)
|
static int md_set_readonly(mddev_t *mddev, int is_open)
|
||||||
{
|
{
|
||||||
|
@ -4724,6 +4728,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
|
||||||
if (mddev->ro)
|
if (mddev->ro)
|
||||||
set_disk_ro(disk, 0);
|
set_disk_ro(disk, 0);
|
||||||
|
|
||||||
|
md_stop_writes(mddev);
|
||||||
md_stop(mddev);
|
md_stop(mddev);
|
||||||
mddev->queue->merge_bvec_fn = NULL;
|
mddev->queue->merge_bvec_fn = NULL;
|
||||||
mddev->queue->unplug_fn = NULL;
|
mddev->queue->unplug_fn = NULL;
|
||||||
|
|
|
@ -487,5 +487,12 @@ extern void md_integrity_add_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
|
||||||
extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
|
extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
|
||||||
extern void restore_bitmap_write_access(struct file *file);
|
extern void restore_bitmap_write_access(struct file *file);
|
||||||
|
|
||||||
|
extern void mddev_init(mddev_t *mddev);
|
||||||
|
extern int md_run(mddev_t *mddev);
|
||||||
|
extern void md_stop(mddev_t *mddev);
|
||||||
|
extern void md_stop_writes(mddev_t *mddev);
|
||||||
extern void md_rdev_init(mdk_rdev_t *rdev);
|
extern void md_rdev_init(mdk_rdev_t *rdev);
|
||||||
|
|
||||||
|
extern void mddev_suspend(mddev_t *mddev);
|
||||||
|
extern void mddev_resume(mddev_t *mddev);
|
||||||
#endif /* _MD_MD_H */
|
#endif /* _MD_MD_H */
|
||||||
|
|
Loading…
Reference in a new issue