mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] md: tidy up daemon stop/start code in md/bitmap.c
The bitmap code used to have two daemons, so there is some 'common' start/stop code. But now there is only one, so the common code is just noise. This patch tidies this up somewhat. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9ba00538ad
commit
500af87abb
2 changed files with 29 additions and 48 deletions
|
@ -626,7 +626,7 @@ static void bitmap_file_unmap(struct bitmap *bitmap)
|
||||||
page_cache_release(sb_page);
|
page_cache_release(sb_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bitmap_stop_daemons(struct bitmap *bitmap);
|
static void bitmap_stop_daemon(struct bitmap *bitmap);
|
||||||
|
|
||||||
/* dequeue the next item in a page list -- don't call from irq context */
|
/* dequeue the next item in a page list -- don't call from irq context */
|
||||||
static struct page_list *dequeue_page(struct bitmap *bitmap)
|
static struct page_list *dequeue_page(struct bitmap *bitmap)
|
||||||
|
@ -668,7 +668,7 @@ static void bitmap_file_put(struct bitmap *bitmap)
|
||||||
bitmap->file = NULL;
|
bitmap->file = NULL;
|
||||||
spin_unlock_irqrestore(&bitmap->lock, flags);
|
spin_unlock_irqrestore(&bitmap->lock, flags);
|
||||||
|
|
||||||
bitmap_stop_daemons(bitmap);
|
bitmap_stop_daemon(bitmap);
|
||||||
|
|
||||||
drain_write_queues(bitmap);
|
drain_write_queues(bitmap);
|
||||||
|
|
||||||
|
@ -1188,21 +1188,12 @@ static void bitmap_writeback_daemon(mddev_t *mddev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bitmap_start_daemon(struct bitmap *bitmap, mdk_thread_t **ptr,
|
static mdk_thread_t *bitmap_start_daemon(struct bitmap *bitmap,
|
||||||
void (*func)(mddev_t *), char *name)
|
void (*func)(mddev_t *), char *name)
|
||||||
{
|
{
|
||||||
mdk_thread_t *daemon;
|
mdk_thread_t *daemon;
|
||||||
unsigned long flags;
|
|
||||||
char namebuf[32];
|
char namebuf[32];
|
||||||
|
|
||||||
spin_lock_irqsave(&bitmap->lock, flags);
|
|
||||||
*ptr = NULL;
|
|
||||||
|
|
||||||
if (!bitmap->file) /* no need for daemon if there's no backing file */
|
|
||||||
goto out_unlock;
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&bitmap->lock, flags);
|
|
||||||
|
|
||||||
#ifdef INJECT_FATAL_FAULT_2
|
#ifdef INJECT_FATAL_FAULT_2
|
||||||
daemon = NULL;
|
daemon = NULL;
|
||||||
#else
|
#else
|
||||||
|
@ -1212,47 +1203,32 @@ static int bitmap_start_daemon(struct bitmap *bitmap, mdk_thread_t **ptr,
|
||||||
if (!daemon) {
|
if (!daemon) {
|
||||||
printk(KERN_ERR "%s: failed to start bitmap daemon\n",
|
printk(KERN_ERR "%s: failed to start bitmap daemon\n",
|
||||||
bmname(bitmap));
|
bmname(bitmap));
|
||||||
return -ECHILD;
|
return ERR_PTR(-ECHILD);
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&bitmap->lock, flags);
|
|
||||||
*ptr = daemon;
|
|
||||||
|
|
||||||
md_wakeup_thread(daemon); /* start it running */
|
md_wakeup_thread(daemon); /* start it running */
|
||||||
|
|
||||||
PRINTK("%s: %s daemon (pid %d) started...\n",
|
PRINTK("%s: %s daemon (pid %d) started...\n",
|
||||||
bmname(bitmap), name, daemon->tsk->pid);
|
bmname(bitmap), name, daemon->tsk->pid);
|
||||||
out_unlock:
|
|
||||||
spin_unlock_irqrestore(&bitmap->lock, flags);
|
return daemon;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bitmap_start_daemons(struct bitmap *bitmap)
|
static void bitmap_stop_daemon(struct bitmap *bitmap)
|
||||||
{
|
{
|
||||||
int err = bitmap_start_daemon(bitmap, &bitmap->writeback_daemon,
|
/* the daemon can't stop itself... it'll just exit instead... */
|
||||||
bitmap_writeback_daemon, "bitmap_wb");
|
if (bitmap->writeback_daemon && ! IS_ERR(bitmap->writeback_daemon) &&
|
||||||
return err;
|
current->pid != bitmap->writeback_daemon->tsk->pid) {
|
||||||
}
|
mdk_thread_t *daemon;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
static void bitmap_stop_daemon(struct bitmap *bitmap, mdk_thread_t **ptr)
|
spin_lock_irqsave(&bitmap->lock, flags);
|
||||||
{
|
daemon = bitmap->writeback_daemon;
|
||||||
mdk_thread_t *daemon;
|
bitmap->writeback_daemon = NULL;
|
||||||
unsigned long flags;
|
spin_unlock_irqrestore(&bitmap->lock, flags);
|
||||||
|
if (daemon && ! IS_ERR(daemon))
|
||||||
spin_lock_irqsave(&bitmap->lock, flags);
|
md_unregister_thread(daemon); /* destroy the thread */
|
||||||
daemon = *ptr;
|
}
|
||||||
*ptr = NULL;
|
|
||||||
spin_unlock_irqrestore(&bitmap->lock, flags);
|
|
||||||
if (daemon)
|
|
||||||
md_unregister_thread(daemon); /* destroy the thread */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bitmap_stop_daemons(struct bitmap *bitmap)
|
|
||||||
{
|
|
||||||
/* the daemons can't stop themselves... they'll just exit instead... */
|
|
||||||
if (bitmap->writeback_daemon &&
|
|
||||||
current->pid != bitmap->writeback_daemon->tsk->pid)
|
|
||||||
bitmap_stop_daemon(bitmap, &bitmap->writeback_daemon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
|
static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
|
||||||
|
@ -1637,10 +1613,15 @@ int bitmap_create(mddev_t *mddev)
|
||||||
|
|
||||||
mddev->bitmap = bitmap;
|
mddev->bitmap = bitmap;
|
||||||
|
|
||||||
/* kick off the bitmap daemons */
|
if (file)
|
||||||
err = bitmap_start_daemons(bitmap);
|
/* kick off the bitmap writeback daemon */
|
||||||
if (err)
|
bitmap->writeback_daemon =
|
||||||
return err;
|
bitmap_start_daemon(bitmap,
|
||||||
|
bitmap_writeback_daemon,
|
||||||
|
"bitmap_wb");
|
||||||
|
|
||||||
|
if (IS_ERR(bitmap->writeback_daemon))
|
||||||
|
return PTR_ERR(bitmap->writeback_daemon);
|
||||||
return bitmap_update_sb(bitmap);
|
return bitmap_update_sb(bitmap);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
|
|
@ -1703,7 +1703,7 @@ static int raid1_reshape(mddev_t *mddev, int raid_disks)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void raid1_quiesce(mddev_t *mddev, int state)
|
static void raid1_quiesce(mddev_t *mddev, int state)
|
||||||
{
|
{
|
||||||
conf_t *conf = mddev_to_conf(mddev);
|
conf_t *conf = mddev_to_conf(mddev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue