提交 692d0eb9 编写于 作者: M Mikulas Patocka 提交者: Alasdair G Kergon

dm: remove limited barrier support

Prepare for full barrier implementation: first remove the restricted support.
Signed-off-by: NMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
上级 9c47008d
...@@ -142,7 +142,6 @@ static struct target_type linear_target = { ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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); ...@@ -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); ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册