diff options
author | Christoph Hellwig | 2014-05-28 16:08:02 +0200 |
---|---|---|
committer | Jens Axboe | 2014-05-28 16:08:02 +0200 |
commit | 6fca6a611c27f1f0d90fbe1cc3c229dbf8c09e48 (patch) | |
tree | d3348f3ab1169db9b5a1fca67a8fd2164152530c /include/linux/blkdev.h | |
parent | blk-mq: remove stale comment for blk_mq_complete_request() (diff) | |
download | kernel-qcow2-linux-6fca6a611c27f1f0d90fbe1cc3c229dbf8c09e48.tar.gz kernel-qcow2-linux-6fca6a611c27f1f0d90fbe1cc3c229dbf8c09e48.tar.xz kernel-qcow2-linux-6fca6a611c27f1f0d90fbe1cc3c229dbf8c09e48.zip |
blk-mq: add helper to insert requests from irq context
Both the cache flush state machine and the SCSI midlayer want to submit
requests from irq context, and the current per-request requeue_work
unfortunately causes corruption due to sharing with the csd field for
flushes. Replace them with a per-request_queue list of requests to
be requeued.
Based on an earlier test by Ming Lei.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reported-by: Ming Lei <tom.leiming@gmail.com>
Tested-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r-- | include/linux/blkdev.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 6bc011a09e82..913f1c2d3be0 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -99,7 +99,6 @@ struct request { struct list_head queuelist; union { struct call_single_data csd; - struct work_struct requeue_work; unsigned long fifo_time; }; @@ -463,6 +462,10 @@ struct request_queue { struct request *flush_rq; spinlock_t mq_flush_lock; + struct list_head requeue_list; + spinlock_t requeue_lock; + struct work_struct requeue_work; + struct mutex sysfs_lock; int bypass_depth; |