mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge branch 'for-4.4/io-poll' of git://git.kernel.dk/linux-block
Pull block IO poll support from Jens Axboe: "Various groups have been doing experimentation around IO polling for (really) fast devices. The code has been reviewed and has been sitting on the side for a few releases, but this is now good enough for coordinated benchmarking and further experimentation. Currently O_DIRECT sync read/write are supported. A framework is in the works that allows scalable stats tracking so we can auto-tune this. And we'll add libaio support as well soon. Fow now, it's an opt-in feature for test purposes" * 'for-4.4/io-poll' of git://git.kernel.dk/linux-block: direct-io: be sure to assign dio->bio_bdev for both paths directio: add block polling support NVMe: add blk polling support block: add block polling support blk-mq: return tag/queue combo in the make_request_fn handlers block: change ->make_request_fn() and users to return a queue cookie
This commit is contained in:
commit
3419b45039
33 changed files with 286 additions and 90 deletions
|
|
@ -958,7 +958,8 @@ static void cached_dev_nodata(struct closure *cl)
|
|||
|
||||
/* Cached devices - read & write stuff */
|
||||
|
||||
static void cached_dev_make_request(struct request_queue *q, struct bio *bio)
|
||||
static blk_qc_t cached_dev_make_request(struct request_queue *q,
|
||||
struct bio *bio)
|
||||
{
|
||||
struct search *s;
|
||||
struct bcache_device *d = bio->bi_bdev->bd_disk->private_data;
|
||||
|
|
@ -997,6 +998,8 @@ static void cached_dev_make_request(struct request_queue *q, struct bio *bio)
|
|||
else
|
||||
generic_make_request(bio);
|
||||
}
|
||||
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
static int cached_dev_ioctl(struct bcache_device *d, fmode_t mode,
|
||||
|
|
@ -1070,7 +1073,8 @@ static void flash_dev_nodata(struct closure *cl)
|
|||
continue_at(cl, search_free, NULL);
|
||||
}
|
||||
|
||||
static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
|
||||
static blk_qc_t flash_dev_make_request(struct request_queue *q,
|
||||
struct bio *bio)
|
||||
{
|
||||
struct search *s;
|
||||
struct closure *cl;
|
||||
|
|
@ -1093,7 +1097,7 @@ static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
|
|||
continue_at_nobarrier(&s->cl,
|
||||
flash_dev_nodata,
|
||||
bcache_wq);
|
||||
return;
|
||||
return BLK_QC_T_NONE;
|
||||
} else if (rw) {
|
||||
bch_keybuf_check_overlapping(&s->iop.c->moving_gc_keys,
|
||||
&KEY(d->id, bio->bi_iter.bi_sector, 0),
|
||||
|
|
@ -1109,6 +1113,7 @@ static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
|
|||
}
|
||||
|
||||
continue_at(cl, search_free, NULL);
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
static int flash_dev_ioctl(struct bcache_device *d, fmode_t mode,
|
||||
|
|
|
|||
|
|
@ -1755,7 +1755,7 @@ static void __split_and_process_bio(struct mapped_device *md,
|
|||
* The request function that just remaps the bio built up by
|
||||
* dm_merge_bvec.
|
||||
*/
|
||||
static void dm_make_request(struct request_queue *q, struct bio *bio)
|
||||
static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio)
|
||||
{
|
||||
int rw = bio_data_dir(bio);
|
||||
struct mapped_device *md = q->queuedata;
|
||||
|
|
@ -1774,12 +1774,12 @@ static void dm_make_request(struct request_queue *q, struct bio *bio)
|
|||
queue_io(md, bio);
|
||||
else
|
||||
bio_io_error(bio);
|
||||
return;
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
__split_and_process_bio(md, map, bio);
|
||||
dm_put_live_table(md, srcu_idx);
|
||||
return;
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
int dm_request_based(struct mapped_device *md)
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ static DEFINE_SPINLOCK(all_mddevs_lock);
|
|||
* call has finished, the bio has been linked into some internal structure
|
||||
* and so is visible to ->quiesce(), so we don't need the refcount any more.
|
||||
*/
|
||||
static void md_make_request(struct request_queue *q, struct bio *bio)
|
||||
static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)
|
||||
{
|
||||
const int rw = bio_data_dir(bio);
|
||||
struct mddev *mddev = q->queuedata;
|
||||
|
|
@ -262,13 +262,13 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
|
|||
if (mddev == NULL || mddev->pers == NULL
|
||||
|| !mddev->ready) {
|
||||
bio_io_error(bio);
|
||||
return;
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
if (mddev->ro == 1 && unlikely(rw == WRITE)) {
|
||||
if (bio_sectors(bio) != 0)
|
||||
bio->bi_error = -EROFS;
|
||||
bio_endio(bio);
|
||||
return;
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
smp_rmb(); /* Ensure implications of 'active' are visible */
|
||||
rcu_read_lock();
|
||||
|
|
@ -302,6 +302,8 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
|
|||
|
||||
if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
|
||||
wake_up(&mddev->sb_wait);
|
||||
|
||||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
/* mddev_suspend makes sure no new requests are submitted
|
||||
|
|
|
|||
Loading…
Reference in a new issue