mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 06:10:56 +00:00
dm: remove limited barrier support
Prepare for full barrier implementation: first remove the restricted support. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
9c47008d13
commit
692d0eb9e0
5 changed files with 10 additions and 27 deletions
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue