mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
block: convert blkdev_issue_flush() to use empty barriers
Then we can get rid of ->issue_flush_fn() and all the driver private implementations of that. Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
bf2de6f5a4
commit
fd5d806266
16 changed files with 36 additions and 329 deletions
|
|
@ -999,33 +999,6 @@ void dm_table_unplug_all(struct dm_table *t)
|
|||
}
|
||||
}
|
||||
|
||||
int dm_table_flush_all(struct dm_table *t)
|
||||
{
|
||||
struct list_head *d, *devices = dm_table_get_devices(t);
|
||||
int ret = 0;
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < t->num_targets; i++)
|
||||
if (t->targets[i].type->flush)
|
||||
t->targets[i].type->flush(&t->targets[i]);
|
||||
|
||||
for (d = devices->next; d != devices; d = d->next) {
|
||||
struct dm_dev *dd = list_entry(d, struct dm_dev, list);
|
||||
struct request_queue *q = bdev_get_queue(dd->bdev);
|
||||
int err;
|
||||
|
||||
if (!q->issue_flush_fn)
|
||||
err = -EOPNOTSUPP;
|
||||
else
|
||||
err = q->issue_flush_fn(q, dd->bdev->bd_disk, NULL);
|
||||
|
||||
if (!ret)
|
||||
ret = err;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct mapped_device *dm_table_get_md(struct dm_table *t)
|
||||
{
|
||||
dm_get(t->md);
|
||||
|
|
@ -1043,4 +1016,3 @@ EXPORT_SYMBOL(dm_table_get_md);
|
|||
EXPORT_SYMBOL(dm_table_put);
|
||||
EXPORT_SYMBOL(dm_table_get);
|
||||
EXPORT_SYMBOL(dm_table_unplug_all);
|
||||
EXPORT_SYMBOL(dm_table_flush_all);
|
||||
|
|
|
|||
|
|
@ -840,21 +840,6 @@ static int dm_request(struct request_queue *q, struct bio *bio)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dm_flush_all(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
struct mapped_device *md = q->queuedata;
|
||||
struct dm_table *map = dm_get_table(md);
|
||||
int ret = -ENXIO;
|
||||
|
||||
if (map) {
|
||||
ret = dm_table_flush_all(map);
|
||||
dm_table_put(map);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void dm_unplug_all(struct request_queue *q)
|
||||
{
|
||||
struct mapped_device *md = q->queuedata;
|
||||
|
|
@ -1003,7 +988,6 @@ static struct mapped_device *alloc_dev(int minor)
|
|||
blk_queue_make_request(md->queue, dm_request);
|
||||
blk_queue_bounce_limit(md->queue, BLK_BOUNCE_ANY);
|
||||
md->queue->unplug_fn = dm_unplug_all;
|
||||
md->queue->issue_flush_fn = dm_flush_all;
|
||||
|
||||
md->io_pool = mempool_create_slab_pool(MIN_IOS, _io_cache);
|
||||
if (!md->io_pool)
|
||||
|
|
|
|||
|
|
@ -111,7 +111,6 @@ void dm_table_postsuspend_targets(struct dm_table *t);
|
|||
int dm_table_resume_targets(struct dm_table *t);
|
||||
int dm_table_any_congested(struct dm_table *t, int bdi_bits);
|
||||
void dm_table_unplug_all(struct dm_table *t);
|
||||
int dm_table_flush_all(struct dm_table *t);
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* A registry of target types.
|
||||
|
|
|
|||
|
|
@ -92,25 +92,6 @@ static void linear_unplug(struct request_queue *q)
|
|||
}
|
||||
}
|
||||
|
||||
static int linear_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
linear_conf_t *conf = mddev_to_conf(mddev);
|
||||
int i, ret = 0;
|
||||
|
||||
for (i=0; i < mddev->raid_disks && ret == 0; i++) {
|
||||
struct block_device *bdev = conf->disks[i].rdev->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int linear_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -279,7 +260,6 @@ static int linear_run (mddev_t *mddev)
|
|||
|
||||
blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
|
||||
mddev->queue->unplug_fn = linear_unplug;
|
||||
mddev->queue->issue_flush_fn = linear_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_fn = linear_congested;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -3463,7 +3463,6 @@ static int do_md_stop(mddev_t * mddev, int mode)
|
|||
mddev->pers->stop(mddev);
|
||||
mddev->queue->merge_bvec_fn = NULL;
|
||||
mddev->queue->unplug_fn = NULL;
|
||||
mddev->queue->issue_flush_fn = NULL;
|
||||
mddev->queue->backing_dev_info.congested_fn = NULL;
|
||||
if (mddev->pers->sync_request)
|
||||
sysfs_remove_group(&mddev->kobj, &md_redundancy_group);
|
||||
|
|
|
|||
|
|
@ -194,35 +194,6 @@ static void multipath_status (struct seq_file *seq, mddev_t *mddev)
|
|||
seq_printf (seq, "]");
|
||||
}
|
||||
|
||||
static int multipath_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
multipath_conf_t *conf = mddev_to_conf(mddev);
|
||||
int i, ret = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
for (i=0; i<mddev->raid_disks && ret == 0; i++) {
|
||||
mdk_rdev_t *rdev = rcu_dereference(conf->multipaths[i].rdev);
|
||||
if (rdev && !test_bit(Faulty, &rdev->flags)) {
|
||||
struct block_device *bdev = rdev->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else {
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk,
|
||||
error_sector);
|
||||
rdev_dec_pending(rdev, mddev);
|
||||
rcu_read_lock();
|
||||
}
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
static int multipath_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -527,7 +498,6 @@ static int multipath_run (mddev_t *mddev)
|
|||
mddev->array_size = mddev->size;
|
||||
|
||||
mddev->queue->unplug_fn = multipath_unplug;
|
||||
mddev->queue->issue_flush_fn = multipath_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_fn = multipath_congested;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
|
||||
|
|
|
|||
|
|
@ -40,26 +40,6 @@ static void raid0_unplug(struct request_queue *q)
|
|||
}
|
||||
}
|
||||
|
||||
static int raid0_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
raid0_conf_t *conf = mddev_to_conf(mddev);
|
||||
mdk_rdev_t **devlist = conf->strip_zone[0].dev;
|
||||
int i, ret = 0;
|
||||
|
||||
for (i=0; i<mddev->raid_disks && ret == 0; i++) {
|
||||
struct block_device *bdev = devlist[i]->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int raid0_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -250,7 +230,6 @@ static int create_strip_zones (mddev_t *mddev)
|
|||
|
||||
mddev->queue->unplug_fn = raid0_unplug;
|
||||
|
||||
mddev->queue->issue_flush_fn = raid0_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_fn = raid0_congested;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
|
||||
|
|
|
|||
|
|
@ -567,36 +567,6 @@ static void raid1_unplug(struct request_queue *q)
|
|||
md_wakeup_thread(mddev->thread);
|
||||
}
|
||||
|
||||
static int raid1_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
conf_t *conf = mddev_to_conf(mddev);
|
||||
int i, ret = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
for (i=0; i<mddev->raid_disks && ret == 0; i++) {
|
||||
mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev);
|
||||
if (rdev && !test_bit(Faulty, &rdev->flags)) {
|
||||
struct block_device *bdev = rdev->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else {
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk,
|
||||
error_sector);
|
||||
rdev_dec_pending(rdev, mddev);
|
||||
rcu_read_lock();
|
||||
}
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int raid1_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -1997,7 +1967,6 @@ static int run(mddev_t *mddev)
|
|||
mddev->array_size = mddev->size;
|
||||
|
||||
mddev->queue->unplug_fn = raid1_unplug;
|
||||
mddev->queue->issue_flush_fn = raid1_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_fn = raid1_congested;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
|
||||
|
|
|
|||
|
|
@ -611,36 +611,6 @@ static void raid10_unplug(struct request_queue *q)
|
|||
md_wakeup_thread(mddev->thread);
|
||||
}
|
||||
|
||||
static int raid10_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
conf_t *conf = mddev_to_conf(mddev);
|
||||
int i, ret = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
for (i=0; i<mddev->raid_disks && ret == 0; i++) {
|
||||
mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev);
|
||||
if (rdev && !test_bit(Faulty, &rdev->flags)) {
|
||||
struct block_device *bdev = rdev->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else {
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk,
|
||||
error_sector);
|
||||
rdev_dec_pending(rdev, mddev);
|
||||
rcu_read_lock();
|
||||
}
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int raid10_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -2118,7 +2088,6 @@ static int run(mddev_t *mddev)
|
|||
mddev->resync_max_sectors = size << conf->chunk_shift;
|
||||
|
||||
mddev->queue->unplug_fn = raid10_unplug;
|
||||
mddev->queue->issue_flush_fn = raid10_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_fn = raid10_congested;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
|
||||
|
|
|
|||
|
|
@ -3204,36 +3204,6 @@ static void raid5_unplug_device(struct request_queue *q)
|
|||
unplug_slaves(mddev);
|
||||
}
|
||||
|
||||
static int raid5_issue_flush(struct request_queue *q, struct gendisk *disk,
|
||||
sector_t *error_sector)
|
||||
{
|
||||
mddev_t *mddev = q->queuedata;
|
||||
raid5_conf_t *conf = mddev_to_conf(mddev);
|
||||
int i, ret = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
for (i=0; i<mddev->raid_disks && ret == 0; i++) {
|
||||
mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev);
|
||||
if (rdev && !test_bit(Faulty, &rdev->flags)) {
|
||||
struct block_device *bdev = rdev->bdev;
|
||||
struct request_queue *r_queue = bdev_get_queue(bdev);
|
||||
|
||||
if (!r_queue->issue_flush_fn)
|
||||
ret = -EOPNOTSUPP;
|
||||
else {
|
||||
atomic_inc(&rdev->nr_pending);
|
||||
rcu_read_unlock();
|
||||
ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk,
|
||||
error_sector);
|
||||
rdev_dec_pending(rdev, mddev);
|
||||
rcu_read_lock();
|
||||
}
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int raid5_congested(void *data, int bits)
|
||||
{
|
||||
mddev_t *mddev = data;
|
||||
|
|
@ -4263,7 +4233,6 @@ static int run(mddev_t *mddev)
|
|||
mdname(mddev));
|
||||
|
||||
mddev->queue->unplug_fn = raid5_unplug_device;
|
||||
mddev->queue->issue_flush_fn = raid5_issue_flush;
|
||||
mddev->queue->backing_dev_info.congested_data = mddev;
|
||||
mddev->queue->backing_dev_info.congested_fn = raid5_congested;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue