block: Remove bio->bi_ioc
bio->bi_ioc is never set so always NULL. Remove references to it in bio_disassociate_task() and in rq_ioc() and delete this field from struct bio. With this change, rq_ioc() always returns current->io_context without the need for a bio argument. Further simplify the code and make it more readable by also removing this helper, which also allows to simplify blk_mq_sched_assign_ioc() by removing its bio argument. Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Adam Manzanares <adam.manzanares@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>hifive-unleashed-5.1
parent
23464f8c34
commit
e2b3fa5af7
|
@ -2027,10 +2027,6 @@ int bio_associate_blkg(struct bio *bio, struct blkcg_gq *blkg)
|
||||||
*/
|
*/
|
||||||
void bio_disassociate_task(struct bio *bio)
|
void bio_disassociate_task(struct bio *bio)
|
||||||
{
|
{
|
||||||
if (bio->bi_ioc) {
|
|
||||||
put_io_context(bio->bi_ioc);
|
|
||||||
bio->bi_ioc = NULL;
|
|
||||||
}
|
|
||||||
if (bio->bi_css) {
|
if (bio->bi_css) {
|
||||||
css_put(bio->bi_css);
|
css_put(bio->bi_css);
|
||||||
bio->bi_css = NULL;
|
bio->bi_css = NULL;
|
||||||
|
|
|
@ -813,7 +813,7 @@ out:
|
||||||
|
|
||||||
void blk_init_request_from_bio(struct request *req, struct bio *bio)
|
void blk_init_request_from_bio(struct request *req, struct bio *bio)
|
||||||
{
|
{
|
||||||
struct io_context *ioc = rq_ioc(bio);
|
struct io_context *ioc = current->io_context;
|
||||||
|
|
||||||
if (bio->bi_opf & REQ_RAHEAD)
|
if (bio->bi_opf & REQ_RAHEAD)
|
||||||
req->cmd_flags |= REQ_FAILFAST_MASK;
|
req->cmd_flags |= REQ_FAILFAST_MASK;
|
||||||
|
|
|
@ -31,10 +31,10 @@ void blk_mq_sched_free_hctx_data(struct request_queue *q,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(blk_mq_sched_free_hctx_data);
|
EXPORT_SYMBOL_GPL(blk_mq_sched_free_hctx_data);
|
||||||
|
|
||||||
void blk_mq_sched_assign_ioc(struct request *rq, struct bio *bio)
|
void blk_mq_sched_assign_ioc(struct request *rq)
|
||||||
{
|
{
|
||||||
struct request_queue *q = rq->q;
|
struct request_queue *q = rq->q;
|
||||||
struct io_context *ioc = rq_ioc(bio);
|
struct io_context *ioc = current->io_context;
|
||||||
struct io_cq *icq;
|
struct io_cq *icq;
|
||||||
|
|
||||||
spin_lock_irq(&q->queue_lock);
|
spin_lock_irq(&q->queue_lock);
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
void blk_mq_sched_free_hctx_data(struct request_queue *q,
|
void blk_mq_sched_free_hctx_data(struct request_queue *q,
|
||||||
void (*exit)(struct blk_mq_hw_ctx *));
|
void (*exit)(struct blk_mq_hw_ctx *));
|
||||||
|
|
||||||
void blk_mq_sched_assign_ioc(struct request *rq, struct bio *bio);
|
void blk_mq_sched_assign_ioc(struct request *rq);
|
||||||
|
|
||||||
void blk_mq_sched_request_inserted(struct request *rq);
|
void blk_mq_sched_request_inserted(struct request *rq);
|
||||||
bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
|
bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
|
||||||
|
|
|
@ -389,8 +389,8 @@ static struct request *blk_mq_get_request(struct request_queue *q,
|
||||||
if (!op_is_flush(data->cmd_flags)) {
|
if (!op_is_flush(data->cmd_flags)) {
|
||||||
rq->elv.icq = NULL;
|
rq->elv.icq = NULL;
|
||||||
if (e && e->type->ops.prepare_request) {
|
if (e && e->type->ops.prepare_request) {
|
||||||
if (e->type->icq_cache && rq_ioc(bio))
|
if (e->type->icq_cache)
|
||||||
blk_mq_sched_assign_ioc(rq, bio);
|
blk_mq_sched_assign_ioc(rq);
|
||||||
|
|
||||||
e->type->ops.prepare_request(rq, bio);
|
e->type->ops.prepare_request(rq, bio);
|
||||||
rq->rq_flags |= RQF_ELVPRIV;
|
rq->rq_flags |= RQF_ELVPRIV;
|
||||||
|
|
16
block/blk.h
16
block/blk.h
|
@ -254,22 +254,6 @@ void ioc_clear_queue(struct request_queue *q);
|
||||||
|
|
||||||
int create_task_io_context(struct task_struct *task, gfp_t gfp_mask, int node);
|
int create_task_io_context(struct task_struct *task, gfp_t gfp_mask, int node);
|
||||||
|
|
||||||
/**
|
|
||||||
* rq_ioc - determine io_context for request allocation
|
|
||||||
* @bio: request being allocated is for this bio (can be %NULL)
|
|
||||||
*
|
|
||||||
* Determine io_context to use for request allocation for @bio. May return
|
|
||||||
* %NULL if %current->io_context doesn't exist.
|
|
||||||
*/
|
|
||||||
static inline struct io_context *rq_ioc(struct bio *bio)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_BLK_CGROUP
|
|
||||||
if (bio && bio->bi_ioc)
|
|
||||||
return bio->bi_ioc;
|
|
||||||
#endif
|
|
||||||
return current->io_context;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create_io_context - try to create task->io_context
|
* create_io_context - try to create task->io_context
|
||||||
* @gfp_mask: allocation mask
|
* @gfp_mask: allocation mask
|
||||||
|
|
|
@ -174,10 +174,9 @@ struct bio {
|
||||||
void *bi_private;
|
void *bi_private;
|
||||||
#ifdef CONFIG_BLK_CGROUP
|
#ifdef CONFIG_BLK_CGROUP
|
||||||
/*
|
/*
|
||||||
* Optional ioc and css associated with this bio. Put on bio
|
* Optional css associated with this bio. Put on bio
|
||||||
* release. Read comment on top of bio_associate_current().
|
* release. Read comment on top of bio_associate_current().
|
||||||
*/
|
*/
|
||||||
struct io_context *bi_ioc;
|
|
||||||
struct cgroup_subsys_state *bi_css;
|
struct cgroup_subsys_state *bi_css;
|
||||||
struct blkcg_gq *bi_blkg;
|
struct blkcg_gq *bi_blkg;
|
||||||
struct bio_issue bi_issue;
|
struct bio_issue bi_issue;
|
||||||
|
|
Loading…
Reference in New Issue