Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 500af87a authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds
Browse files

[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: default avatarNeil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9ba00538
Loading
Loading
Loading
Loading
+27 −46
Original line number Diff line number Diff line
@@ -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)
@@ -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);

@@ -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
@@ -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)
{
	/* 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;

		spin_lock_irqsave(&bitmap->lock, flags);
	daemon = *ptr;
	*ptr = NULL;
		daemon = bitmap->writeback_daemon;
		bitmap->writeback_daemon = NULL;
		spin_unlock_irqrestore(&bitmap->lock, flags);
	if (daemon)
		if (daemon && ! IS_ERR(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,
@@ -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:
+1 −1
Original line number Diff line number Diff line
@@ -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);