Skip to content

Commit

Permalink
[PATCH] md: tidy up daemon stop/start code in md/bitmap.c
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Sep 9, 2005
1 parent 9ba0053 commit 500af87
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 47 deletions.
73 changes: 27 additions & 46 deletions drivers/md/bitmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ static void bitmap_file_unmap(struct bitmap *bitmap)
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 */
static struct page_list *dequeue_page(struct bitmap *bitmap)
Expand Down Expand Up @@ -668,7 +668,7 @@ static void bitmap_file_put(struct bitmap *bitmap)
bitmap->file = NULL;
spin_unlock_irqrestore(&bitmap->lock, flags);

bitmap_stop_daemons(bitmap);
bitmap_stop_daemon(bitmap);

drain_write_queues(bitmap);

Expand Down Expand Up @@ -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)
{
mdk_thread_t *daemon;
unsigned long flags;
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
daemon = NULL;
#else
Expand All @@ -1212,47 +1203,32 @@ static int bitmap_start_daemon(struct bitmap *bitmap, mdk_thread_t **ptr,
if (!daemon) {
printk(KERN_ERR "%s: failed to start bitmap daemon\n",
bmname(bitmap));
return -ECHILD;
return ERR_PTR(-ECHILD);
}

spin_lock_irqsave(&bitmap->lock, flags);
*ptr = daemon;

md_wakeup_thread(daemon); /* start it running */

PRINTK("%s: %s daemon (pid %d) started...\n",
bmname(bitmap), name, daemon->tsk->pid);
out_unlock:
spin_unlock_irqrestore(&bitmap->lock, flags);
return 0;
}

static int bitmap_start_daemons(struct bitmap *bitmap)
{
int err = bitmap_start_daemon(bitmap, &bitmap->writeback_daemon,
bitmap_writeback_daemon, "bitmap_wb");
return err;
return daemon;
}

static void bitmap_stop_daemon(struct bitmap *bitmap, mdk_thread_t **ptr)
static void bitmap_stop_daemon(struct bitmap *bitmap)
{
mdk_thread_t *daemon;
unsigned long flags;

spin_lock_irqsave(&bitmap->lock, flags);
daemon = *ptr;
*ptr = NULL;
spin_unlock_irqrestore(&bitmap->lock, flags);
if (daemon)
md_unregister_thread(daemon); /* destroy the thread */
}
/* the daemon can't stop itself... it'll just exit instead... */
if (bitmap->writeback_daemon && ! IS_ERR(bitmap->writeback_daemon) &&
current->pid != bitmap->writeback_daemon->tsk->pid) {
mdk_thread_t *daemon;
unsigned long flags;

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);
spin_lock_irqsave(&bitmap->lock, flags);
daemon = bitmap->writeback_daemon;
bitmap->writeback_daemon = NULL;
spin_unlock_irqrestore(&bitmap->lock, flags);
if (daemon && ! IS_ERR(daemon))
md_unregister_thread(daemon); /* destroy the thread */
}
}

static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
Expand Down Expand Up @@ -1637,10 +1613,15 @@ int bitmap_create(mddev_t *mddev)

mddev->bitmap = bitmap;

/* kick off the bitmap daemons */
err = bitmap_start_daemons(bitmap);
if (err)
return err;
if (file)
/* kick off the bitmap writeback daemon */
bitmap->writeback_daemon =
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);

error:
Expand Down
2 changes: 1 addition & 1 deletion drivers/md/raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -1703,7 +1703,7 @@ static int raid1_reshape(mddev_t *mddev, int raid_disks)
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);

Expand Down

0 comments on commit 500af87

Please sign in to comment.