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

Commit 692d0eb9 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Alasdair G Kergon
Browse files

dm: remove limited barrier support



Prepare for full barrier implementation: first remove the restricted support.

Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 9c47008d
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -142,7 +142,6 @@ static struct target_type linear_target = {
	.status = linear_status,
	.status = linear_status,
	.ioctl  = linear_ioctl,
	.ioctl  = linear_ioctl,
	.merge  = linear_merge,
	.merge  = linear_merge,
	.features = DM_TARGET_SUPPORTS_BARRIERS,
};
};


int __init dm_linear_init(void)
int __init dm_linear_init(void)
+0 −19
Original line number Original line Diff line number Diff line
@@ -52,8 +52,6 @@ struct dm_table {
	sector_t *highs;
	sector_t *highs;
	struct dm_target *targets;
	struct dm_target *targets;


	unsigned barriers_supported:1;

	/*
	/*
	 * Indicates the rw permissions for the new logical
	 * Indicates the rw permissions for the new logical
	 * device.  This should be a combination of FMODE_READ
	 * device.  This should be a combination of FMODE_READ
@@ -243,7 +241,6 @@ int dm_table_create(struct dm_table **result, fmode_t mode,


	INIT_LIST_HEAD(&t->devices);
	INIT_LIST_HEAD(&t->devices);
	atomic_set(&t->holders, 0);
	atomic_set(&t->holders, 0);
	t->barriers_supported = 1;


	if (!num_targets)
	if (!num_targets)
		num_targets = KEYS_PER_NODE;
		num_targets = KEYS_PER_NODE;
@@ -751,10 +748,6 @@ int dm_table_add_target(struct dm_table *t, const char *type,
	/* FIXME: the plan is to combine high here and then have
	/* FIXME: the plan is to combine high here and then have
	 * the merge fn apply the target level restrictions. */
	 * the merge fn apply the target level restrictions. */
	combine_restrictions_low(&t->limits, &tgt->limits);
	combine_restrictions_low(&t->limits, &tgt->limits);

	if (!(tgt->type->features & DM_TARGET_SUPPORTS_BARRIERS))
		t->barriers_supported = 0;

	return 0;
	return 0;


 bad:
 bad:
@@ -799,12 +792,6 @@ int dm_table_complete(struct dm_table *t)


	check_for_valid_limits(&t->limits);
	check_for_valid_limits(&t->limits);


	/*
	 * We only support barriers if there is exactly one underlying device.
	 */
	if (!list_is_singular(&t->devices))
		t->barriers_supported = 0;

	/* how many indexes will the btree have ? */
	/* how many indexes will the btree have ? */
	leaf_nodes = dm_div_up(t->num_targets, KEYS_PER_NODE);
	leaf_nodes = dm_div_up(t->num_targets, KEYS_PER_NODE);
	t->depth = 1 + int_log(leaf_nodes, CHILDREN_PER_NODE);
	t->depth = 1 + int_log(leaf_nodes, CHILDREN_PER_NODE);
@@ -1059,12 +1046,6 @@ struct mapped_device *dm_table_get_md(struct dm_table *t)
	return t->md;
	return t->md;
}
}


int dm_table_barrier_ok(struct dm_table *t)
{
	return t->barriers_supported;
}
EXPORT_SYMBOL(dm_table_barrier_ok);

EXPORT_SYMBOL(dm_vcalloc);
EXPORT_SYMBOL(dm_vcalloc);
EXPORT_SYMBOL(dm_get_device);
EXPORT_SYMBOL(dm_get_device);
EXPORT_SYMBOL(dm_put_device);
EXPORT_SYMBOL(dm_put_device);
+10 −5
Original line number Original line Diff line number Diff line
@@ -851,11 +851,7 @@ static void __split_and_process_bio(struct mapped_device *md, struct bio *bio)
		bio_io_error(bio);
		bio_io_error(bio);
		return;
		return;
	}
	}
	if (unlikely(bio_barrier(bio) && !dm_table_barrier_ok(ci.map))) {

		dm_table_put(ci.map);
		bio_endio(bio, -EOPNOTSUPP);
		return;
	}
	ci.md = md;
	ci.md = md;
	ci.bio = bio;
	ci.bio = bio;
	ci.io = alloc_io(md);
	ci.io = alloc_io(md);
@@ -937,6 +933,15 @@ static int dm_request(struct request_queue *q, struct bio *bio)
	struct mapped_device *md = q->queuedata;
	struct mapped_device *md = q->queuedata;
	int cpu;
	int cpu;


	/*
	 * There is no use in forwarding any barrier request since we can't
	 * guarantee it is (or can be) handled by the targets correctly.
	 */
	if (unlikely(bio_barrier(bio))) {
		bio_endio(bio, -EOPNOTSUPP);
		return 0;
	}

	down_read(&md->io_lock);
	down_read(&md->io_lock);


	cpu = part_stat_lock();
	cpu = part_stat_lock();
+0 −1
Original line number Original line Diff line number Diff line
@@ -52,7 +52,6 @@ int dm_table_any_congested(struct dm_table *t, int bdi_bits);
 * To check the return value from dm_table_find_target().
 * To check the return value from dm_table_find_target().
 */
 */
#define dm_target_is_valid(t) ((t)->table)
#define dm_target_is_valid(t) ((t)->table)
int dm_table_barrier_ok(struct dm_table *t);


/*-----------------------------------------------------------------
/*-----------------------------------------------------------------
 * A registry of target types.
 * A registry of target types.
+0 −1
Original line number Original line Diff line number Diff line
@@ -116,7 +116,6 @@ void dm_put_device(struct dm_target *ti, struct dm_dev *d);
/*
/*
 * Target features
 * Target features
 */
 */
#define DM_TARGET_SUPPORTS_BARRIERS 0x00000001


struct target_type {
struct target_type {
	uint64_t features;
	uint64_t features;