mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 03:54:02 +00:00
block: kill swap_io_context()
It blindly copies everything in the io_context, including the lock. That doesn't work so well for either lock ordering or lockdep. There seems zero point in swapping io contexts on a request to request merge, so the best point of action is to just remove it. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
8bdd3f8a69
commit
3bc217ffe6
3 changed files with 0 additions and 24 deletions
|
@ -1268,22 +1268,8 @@ static void as_merged_requests(struct request_queue *q, struct request *req,
|
||||||
*/
|
*/
|
||||||
if (!list_empty(&req->queuelist) && !list_empty(&next->queuelist)) {
|
if (!list_empty(&req->queuelist) && !list_empty(&next->queuelist)) {
|
||||||
if (time_before(rq_fifo_time(next), rq_fifo_time(req))) {
|
if (time_before(rq_fifo_time(next), rq_fifo_time(req))) {
|
||||||
struct io_context *rioc = RQ_IOC(req);
|
|
||||||
struct io_context *nioc = RQ_IOC(next);
|
|
||||||
|
|
||||||
list_move(&req->queuelist, &next->queuelist);
|
list_move(&req->queuelist, &next->queuelist);
|
||||||
rq_set_fifo_time(req, rq_fifo_time(next));
|
rq_set_fifo_time(req, rq_fifo_time(next));
|
||||||
/*
|
|
||||||
* Don't copy here but swap, because when anext is
|
|
||||||
* removed below, it must contain the unused context
|
|
||||||
*/
|
|
||||||
if (rioc != nioc) {
|
|
||||||
double_spin_lock(&rioc->lock, &nioc->lock,
|
|
||||||
rioc < nioc);
|
|
||||||
swap_io_context(&rioc, &nioc);
|
|
||||||
double_spin_unlock(&rioc->lock, &nioc->lock,
|
|
||||||
rioc < nioc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -176,15 +176,6 @@ void copy_io_context(struct io_context **pdst, struct io_context **psrc)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(copy_io_context);
|
EXPORT_SYMBOL(copy_io_context);
|
||||||
|
|
||||||
void swap_io_context(struct io_context **ioc1, struct io_context **ioc2)
|
|
||||||
{
|
|
||||||
struct io_context *temp;
|
|
||||||
temp = *ioc1;
|
|
||||||
*ioc1 = *ioc2;
|
|
||||||
*ioc2 = temp;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(swap_io_context);
|
|
||||||
|
|
||||||
int __init blk_ioc_init(void)
|
int __init blk_ioc_init(void)
|
||||||
{
|
{
|
||||||
iocontext_cachep = kmem_cache_create("blkdev_ioc",
|
iocontext_cachep = kmem_cache_create("blkdev_ioc",
|
||||||
|
|
|
@ -39,7 +39,6 @@ void exit_io_context(void);
|
||||||
struct io_context *get_io_context(gfp_t gfp_flags, int node);
|
struct io_context *get_io_context(gfp_t gfp_flags, int node);
|
||||||
struct io_context *alloc_io_context(gfp_t gfp_flags, int node);
|
struct io_context *alloc_io_context(gfp_t gfp_flags, int node);
|
||||||
void copy_io_context(struct io_context **pdst, struct io_context **psrc);
|
void copy_io_context(struct io_context **pdst, struct io_context **psrc);
|
||||||
void swap_io_context(struct io_context **ioc1, struct io_context **ioc2);
|
|
||||||
|
|
||||||
struct request;
|
struct request;
|
||||||
typedef void (rq_end_io_fn)(struct request *, int);
|
typedef void (rq_end_io_fn)(struct request *, int);
|
||||||
|
|
Loading…
Add table
Reference in a new issue