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

Commit 51acbcec authored by NeilBrown's avatar NeilBrown
Browse files

md: remove CONFIG_MULTICORE_RAID456



This doesn't seem to actually help and we have an alternate
multi-threading approach waiting in the wings, so just get
rid of this config option and associated code.

As a bonus, we remove one use of CONFIG_EXPERIMENTAL

Cc: Dan Williams <djbw@fb.com>
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent ee0b0244
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -154,17 +154,6 @@ config MD_RAID456

	  If unsure, say Y.

config MULTICORE_RAID456
	bool "RAID-4/RAID-5/RAID-6 Multicore processing (EXPERIMENTAL)"
	depends on MD_RAID456
	depends on SMP
	depends on EXPERIMENTAL
	---help---
	  Enable the raid456 module to dispatch per-stripe raid operations to a
	  thread pool.

	  If unsure, say N.

config MD_MULTIPATH
	tristate "Multipath I/O support"
	depends on BLK_DEV_MD
+1 −37
Original line number Diff line number Diff line
@@ -1406,7 +1406,7 @@ static void ops_run_check_pq(struct stripe_head *sh, struct raid5_percpu *percpu
			   &sh->ops.zero_sum_result, percpu->spare_page, &submit);
}

static void __raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
{
	int overlap_clear = 0, i, disks = sh->disks;
	struct dma_async_tx_descriptor *tx = NULL;
@@ -1471,36 +1471,6 @@ static void __raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
	put_cpu();
}

#ifdef CONFIG_MULTICORE_RAID456
static void async_run_ops(void *param, async_cookie_t cookie)
{
	struct stripe_head *sh = param;
	unsigned long ops_request = sh->ops.request;

	clear_bit_unlock(STRIPE_OPS_REQ_PENDING, &sh->state);
	wake_up(&sh->ops.wait_for_ops);

	__raid_run_ops(sh, ops_request);
	release_stripe(sh);
}

static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request)
{
	/* since handle_stripe can be called outside of raid5d context
	 * we need to ensure sh->ops.request is de-staged before another
	 * request arrives
	 */
	wait_event(sh->ops.wait_for_ops,
		   !test_and_set_bit_lock(STRIPE_OPS_REQ_PENDING, &sh->state));
	sh->ops.request = ops_request;

	atomic_inc(&sh->count);
	async_schedule(async_run_ops, sh);
}
#else
#define raid_run_ops __raid_run_ops
#endif

static int grow_one_stripe(struct r5conf *conf)
{
	struct stripe_head *sh;
@@ -1509,9 +1479,6 @@ static int grow_one_stripe(struct r5conf *conf)
		return 0;

	sh->raid_conf = conf;
	#ifdef CONFIG_MULTICORE_RAID456
	init_waitqueue_head(&sh->ops.wait_for_ops);
	#endif

	spin_lock_init(&sh->stripe_lock);

@@ -1630,9 +1597,6 @@ static int resize_stripes(struct r5conf *conf, int newsize)
			break;

		nsh->raid_conf = conf;
		#ifdef CONFIG_MULTICORE_RAID456
		init_waitqueue_head(&nsh->ops.wait_for_ops);
		#endif
		spin_lock_init(&nsh->stripe_lock);

		list_add(&nsh->lru, &newstripes);