€• Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ /translations/zh_CN/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/zh_TW/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/it_IT/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ja_JP/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ko_KR/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/pt_BR/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/sp_SP/block/blk-mq”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ:/var/lib/git/docbuild/linux/Documentation/block/blk-mq.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ0Multi-Queue Block IO Queueing Mechanism (blk-mq)”h]”hŒ0Multi-Queue Block IO Queueing Mechanism (blk-mq)”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hX*The Multi-Queue Block IO Queueing Mechanism is an API to enable fast storage devices to achieve a huge number of input/output operations per second (IOPS) through queueing and submitting IO requests to block devices simultaneously, benefiting from the parallelism offered by modern storage devices.”h]”hX*The Multi-Queue Block IO Queueing Mechanism is an API to enable fast storage devices to achieve a huge number of input/output operations per second (IOPS) through queueing and submitting IO requests to block devices simultaneously, benefiting from the parallelism offered by modern storage devices.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhíh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Background”h]”hŒ Background”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhþh²hh³hÇh´KubhÞ)�”}”(hXÞMagnetic hard disks have been the de facto standard from the beginning of the development of the kernel. The Block IO subsystem aimed to achieve the best performance possible for those devices with a high penalty when doing random access, and the bottleneck was the mechanical moving parts, a lot slower than any layer on the storage stack. One example of such optimization technique involves ordering read/write requests according to the current position of the hard disk head.”h]”hXÞMagnetic hard disks have been the de facto standard from the beginning of the development of the kernel. The Block IO subsystem aimed to achieve the best performance possible for those devices with a high penalty when doing random access, and the bottleneck was the mechanical moving parts, a lot slower than any layer on the storage stack. One example of such optimization technique involves ordering read/write requests according to the current position of the hard disk head.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhþh²hubhÞ)�”}”(hXyHowever, with the development of Solid State Drives and Non-Volatile Memories without mechanical parts nor random access penalty and capable of performing high parallel access, the bottleneck of the stack had moved from the storage device to the operating system. In order to take advantage of the parallelism in those devices' design, the multi-queue mechanism was introduced.”h]”hX{However, with the development of Solid State Drives and Non-Volatile Memories without mechanical parts nor random access penalty and capable of performing high parallel access, the bottleneck of the stack had moved from the storage device to the operating system. In order to take advantage of the parallelism in those devices’ design, the multi-queue mechanism was introduced.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhþh²hubhÞ)�”}”(hXFThe former design had a single queue to store block IO requests with a single lock. That did not scale well in SMP systems due to dirty data in cache and the bottleneck of having a single lock for multiple processors. This setup also suffered with congestion when different processes (or the same process, moving to different CPUs) wanted to perform block IO. Instead of this, the blk-mq API spawns multiple queues with individual entry points local to the CPU, removing the need for a lock. A deeper explanation on how this works is covered in the following section (`Operation`_).”h]”(hX8The former design had a single queue to store block IO requests with a single lock. That did not scale well in SMP systems due to dirty data in cache and the bottleneck of having a single lock for multiple processors. This setup also suffered with congestion when different processes (or the same process, moving to different CPUs) wanted to perform block IO. Instead of this, the blk-mq API spawns multiple queues with individual entry points local to the CPU, removing the need for a lock. A deeper explanation on how this works is covered in the following section (”…”�”}”(hj+h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ `Operation`_”h]”hŒ Operation”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Operation”Œrefid”Œ operation”uh1j3hj+Œresolved”KubhŒ).”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhþh²hubeh}”(h]”Œ background”ah ]”h"]”Œ background”ah$]”h&]”uh1hÈhhíh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Operation”h]”hŒ Operation”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjZh²hh³hÇh´K*ubhÞ)�”}”(hXWhen the userspace performs IO to a block device (reading or writing a file, for instance), blk-mq takes action: it will store and manage IO requests to the block device, acting as middleware between the userspace (and a file system, if present) and the block device driver.”h]”hXWhen the userspace performs IO to a block device (reading or writing a file, for instance), blk-mq takes action: it will store and manage IO requests to the block device, acting as middleware between the userspace (and a file system, if present) and the block device driver.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K,hjZh²hubhÞ)�”}”(hXŸblk-mq has two group of queues: software staging queues and hardware dispatch queues. When the request arrives at the block layer, it will try the shortest path possible: send it directly to the hardware queue. However, there are two cases that it might not do that: if there's an IO scheduler attached at the layer or if we want to try to merge requests. In both cases, requests will be sent to the software queue.”h]”hX¡blk-mq has two group of queues: software staging queues and hardware dispatch queues. When the request arrives at the block layer, it will try the shortest path possible: send it directly to the hardware queue. However, there are two cases that it might not do that: if there’s an IO scheduler attached at the layer or if we want to try to merge requests. In both cases, requests will be sent to the software queue.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjZh²hubhÞ)�”}”(hXqThen, after the requests are processed by software queues, they will be placed at the hardware queue, a second stage queue where the hardware has direct access to process those requests. However, if the hardware does not have enough resources to accept more requests, blk-mq will place requests on a temporary queue, to be sent in the future, when the hardware is able.”h]”hXqThen, after the requests are processed by software queues, they will be placed at the hardware queue, a second stage queue where the hardware has direct access to process those requests. However, if the hardware does not have enough resources to accept more requests, blk-mq will place requests on a temporary queue, to be sent in the future, when the hardware is able.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hjZh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSoftware staging queues”h]”hŒSoftware staging queues”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj•h²hh³hÇh´K?ubhÞ)�”}”(hXèThe block IO subsystem adds requests in the software staging queues (represented by struct blk_mq_ctx) in case that they weren't sent directly to the driver. A request is one or more BIOs. They arrived at the block layer through the data structure struct bio. The block layer will then build a new structure from it, the struct request that will be used to communicate with the device driver. Each queue has its own lock and the number of queues is defined by a per-CPU or per-node basis.”h]”hXêThe block IO subsystem adds requests in the software staging queues (represented by struct blk_mq_ctx) in case that they weren’t sent directly to the driver. A request is one or more BIOs. They arrived at the block layer through the data structure struct bio. The block layer will then build a new structure from it, the struct request that will be used to communicate with the device driver. Each queue has its own lock and the number of queues is defined by a per-CPU or per-node basis.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KAhj•h²hubhÞ)�”}”(hX…The staging queue can be used to merge requests for adjacent sectors. For instance, requests for sector 3-6, 6-7, 7-9 can become one request for 3-9. Even if random access to SSDs and NVMs have the same time of response compared to sequential access, grouped requests for sequential access decreases the number of individual requests. This technique of merging requests is called plugging.”h]”hX…The staging queue can be used to merge requests for adjacent sectors. For instance, requests for sector 3-6, 6-7, 7-9 can become one request for 3-9. Even if random access to SSDs and NVMs have the same time of response compared to sequential access, grouped requests for sequential access decreases the number of individual requests. This technique of merging requests is called plugging.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KIhj•h²hubhÞ)�”}”(hŒÈAlong with that, the requests can be reordered to ensure fairness of system resources (e.g. to ensure that no application suffers from starvation) and/or to improve IO performance, by an IO scheduler.”h]”hŒÈAlong with that, the requests can be reordered to ensure fairness of system resources (e.g. to ensure that no application suffers from starvation) and/or to improve IO performance, by an IO scheduler.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KPhj•h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ IO Schedulers”h]”hŒ IO Schedulers”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÐh²hh³hÇh´KUubhÞ)�”}”(hX There are several schedulers implemented by the block layer, each one following a heuristic to improve the IO performance. They are "pluggable" (as in plug and play), in the sense of they can be selected at run time using sysfs. You can read more about Linux's IO schedulers `here `_. The scheduling happens only between requests in the same queue, so it is not possible to merge requests from different queues, otherwise there would be cache trashing and a need to have a lock for each queue. After the scheduling, the requests are eligible to be sent to the hardware. One of the possible schedulers to be selected is the NONE scheduler, the most straightforward one. It will just place requests on whatever software queue the process is running on, without any reordering. When the device starts processing requests in the hardware queue (a.k.a. run the hardware queue), the software queues mapped to that hardware queue will be drained in sequence according to their mapping.”h]”(hXThere are several schedulers implemented by the block layer, each one following a heuristic to improve the IO performance. They are “pluggableâ€� (as in plug and play), in the sense of they can be selected at run time using sysfs. You can read more about Linux’s IO schedulers ”…”�”}”(hjáh²hh³Nh´Nubj4)�”}”(hŒA`here `_”h]”hŒhere”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œhere”Œrefuri”Œ7https://www.kernel.org/doc/html/latest/block/index.html”uh1j3hjáubhŒtarget”“”)�”}”(hŒ: ”h]”h}”(h]”Œhere”ah ]”h"]”Œhere”ah$]”h&]”Œrefuri”júuh1jûŒ referenced”KhjáubhX·. The scheduling happens only between requests in the same queue, so it is not possible to merge requests from different queues, otherwise there would be cache trashing and a need to have a lock for each queue. After the scheduling, the requests are eligible to be sent to the hardware. One of the possible schedulers to be selected is the NONE scheduler, the most straightforward one. It will just place requests on whatever software queue the process is running on, without any reordering. When the device starts processing requests in the hardware queue (a.k.a. run the hardware queue), the software queues mapped to that hardware queue will be drained in sequence according to their mapping.”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KWhjÐh²hubeh}”(h]”Œ io-schedulers”ah ]”h"]”Œ io schedulers”ah$]”h&]”uh1hÈhj•h²hh³hÇh´KUubeh}”(h]”Œsoftware-staging-queues”ah ]”h"]”Œsoftware staging queues”ah$]”h&]”uh1hÈhjZh²hh³hÇh´K?ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒHardware dispatch queues”h]”hŒHardware dispatch queues”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj%h²hh³hÇh´KgubhÞ)�”}”(hX˜The hardware queue (represented by struct blk_mq_hw_ctx) is a struct used by device drivers to map the device submission queues (or device DMA ring buffer), and are the last step of the block layer submission code before the low level device driver taking ownership of the request. To run this queue, the block layer removes requests from the associated software queues and tries to dispatch to the hardware.”h]”hX˜The hardware queue (represented by struct blk_mq_hw_ctx) is a struct used by device drivers to map the device submission queues (or device DMA ring buffer), and are the last step of the block layer submission code before the low level device driver taking ownership of the request. To run this queue, the block layer removes requests from the associated software queues and tries to dispatch to the hardware.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kihj%h²hubhÞ)�”}”(hXsIf it's not possible to send the requests directly to hardware, they will be added to a linked list (``hctx->dispatch``) of requests. Then, next time the block layer runs a queue, it will send the requests laying at the ``dispatch`` list first, to ensure a fairness dispatch with those requests that were ready to be sent first. The number of hardware queues depends on the number of hardware contexts supported by the hardware and its device driver, but it will not be more than the number of cores of the system. There is no reordering at this stage, and each software queue has a set of hardware queues to send requests for.”h]”(hŒgIf it’s not possible to send the requests directly to hardware, they will be added to a linked list (”…”�”}”(hjDh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``hctx->dispatch``”h]”hŒhctx->dispatch”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjDubhŒe) of requests. Then, next time the block layer runs a queue, it will send the requests laying at the ”…”�”}”(hjDh²hh³Nh´NubjM)�”}”(hŒ ``dispatch``”h]”hŒdispatch”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjDubhX‹ list first, to ensure a fairness dispatch with those requests that were ready to be sent first. The number of hardware queues depends on the number of hardware contexts supported by the hardware and its device driver, but it will not be more than the number of cores of the system. There is no reordering at this stage, and each software queue has a set of hardware queues to send requests for.”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphj%h²hubhŒnote”“”)�”}”(hŒ›Neither the block layer nor the device protocols guarantee the order of completion of requests. This must be handled by higher layers, like the filesystem.”h]”hÞ)�”}”(hŒ›Neither the block layer nor the device protocols guarantee the order of completion of requests. This must be handled by higher layers, like the filesystem.”h]”hŒ›Neither the block layer nor the device protocols guarantee the order of completion of requests. This must be handled by higher layers, like the filesystem.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jxhj%h²hh³hÇh´Nubeh}”(h]”Œhardware-dispatch-queues”ah ]”h"]”Œhardware dispatch queues”ah$]”h&]”uh1hÈhjZh²hh³hÇh´KgubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTag-based completion”h]”hŒTag-based completion”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjšh²hh³hÇh´K�ubhÞ)�”}”(hXÚIn order to indicate which request has been completed, every request is identified by an integer, ranging from 0 to the dispatch queue size. This tag is generated by the block layer and later reused by the device driver, removing the need to create a redundant identifier. When a request is completed in the driver, the tag is sent back to the block layer to notify it of the finalization. This removes the need to do a linear search to find out which IO has been completed.”h]”hXÚIn order to indicate which request has been completed, every request is identified by an integer, ranging from 0 to the dispatch queue size. This tag is generated by the block layer and later reused by the device driver, removing the need to create a redundant identifier. When a request is completed in the driver, the tag is sent back to the block layer to notify it of the finalization. This removes the need to do a linear search to find out which IO has been completed.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kƒhjšh²hubeh}”(h]”Œtag-based-completion”ah ]”h"]”Œtag-based completion”ah$]”h&]”uh1hÈhjZh²hh³hÇh´K�ubeh}”(h]”jFah ]”h"]”Œ operation”ah$]”h&]”uh1hÈhhíh²hh³hÇh´K*j KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒFurther reading”h]”hŒFurther reading”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÈh²hh³hÇh´KŒubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒo`Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems `_ ”h]”hÞ)�”}”(hŒn`Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems `_”h]”(j4)�”}”(hjæh]”hŒHLinux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒHLinux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems”jùŒ https://www.kernel.dk/blk-mq.pdf”uh1j3hjäubjü)�”}”(hŒ# ”h]”h}”(h]”ŒGlinux-block-io-introducing-multi-queue-ssd-access-on-multi-core-systems”ah ]”h"]”ŒHlinux block io: introducing multi-queue ssd access on multi-core systems”ah$]”h&]”Œrefuri”j÷uh1jûj Khjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŽhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛh²hh³hÇh´Nubjß)�”}”(hŒA`NOOP scheduler `_ ”h]”hÞ)�”}”(hŒ@`NOOP scheduler `_”h]”(j4)�”}”(hjh]”hŒNOOP scheduler”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒNOOP scheduler”jùŒ,https://en.wikipedia.org/wiki/Noop_scheduler”uh1j3hjubjü)�”}”(hŒ/ ”h]”h}”(h]”Œnoop-scheduler”ah ]”h"]”Œnoop scheduler”ah$]”h&]”Œrefuri”j(uh1jûj Khjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛh²hh³hÇh´Nubjß)�”}”(hŒY`Null block device driver `_ ”h]”hÞ)�”}”(hŒX`Null block device driver `_”h]”(j4)�”}”(hjHh]”hŒNull block device driver”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒNull block device driver”jùŒ:https://www.kernel.org/doc/html/latest/block/null_blk.html”uh1j3hjFubjü)�”}”(hŒ= ”h]”h}”(h]”Œnull-block-device-driver”ah ]”h"]”Œnull block device driver”ah$]”h&]”Œrefuri”jYuh1jûj KhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K’hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jÙh³hÇh´KŽhjÈh²hubeh}”(h]”Œfurther-reading”ah ]”h"]”Œfurther reading”ah$]”h&]”uh1hÈhhíh²hh³hÇh´KŒubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSource code documentation”h]”hŒSource code documentation”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‹h²hh³hÇh´K•ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œblk_eh_timer_return (C enum)”Œc.blk_eh_timer_return”hNt”auh1jœhj‹h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒblk_eh_timer_return”h]”hŒdesc_signature_line”“”)�”}”(hŒenum blk_eh_timer_return”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j¾hjºh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jÐhjºh²hh³jÏh´KubhŒ desc_name”“”)�”}”(hŒblk_eh_timer_return”h]”hŒ desc_sig_name”“”)�”}”(hj¶h]”hŒblk_eh_timer_return”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jçhjãubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jáhjºh²hh³jÏh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j¸Œsphinx_line_type”Œ declarator”hj´h²hh³jÏh´Kubah}”(h]”j«ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j²h³jÏh´Khj¯h²hubhŒ desc_content”“”)�”}”(hhh]”hÞ)�”}”(hŒ&How the timeout handler should proceed”h]”hŒ&How the timeout handler should proceed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M3hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯h²hh³jÏh´Kubeh}”(h]”h ]”(Œc”Œenum”eh"]”h$]”h&]”Œdomain”j0Œobjtype”j1Œdesctype”j1Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j­h²hhj‹h³Nh´NubhŒ container”“”)�”}”(hŒÔ**Constants** ``BLK_EH_DONE`` The block driver completed the command or will complete it at a later time. ``BLK_EH_RESET_TIMER`` Reset the request timer and continue waiting for the request to complete.”h]”(hÞ)�”}”(hŒ **Constants**”h]”hŒstrong”“”)�”}”(hjCh]”hŒ Constants”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M7hj=ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ\``BLK_EH_DONE`` The block driver completed the command or will complete it at a later time. ”h]”(hŒterm”“”)�”}”(hŒ``BLK_EH_DONE``”h]”jM)�”}”(hjjh]”hŒ BLK_EH_DONE”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M;hjbubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒKThe block driver completed the command or will complete it at a later time.”h]”hŒKThe block driver completed the command or will complete it at a later time.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M:hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´M;hj]ubja)�”}”(hŒ```BLK_EH_RESET_TIMER`` Reset the request timer and continue waiting for the request to complete.”h]”(jg)�”}”(hŒ``BLK_EH_RESET_TIMER``”h]”jM)�”}”(hj¦h]”hŒBLK_EH_RESET_TIMER”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M>hj ubj�)�”}”(hhh]”hÞ)�”}”(hŒIReset the request timer and continue waiting for the request to complete.”h]”hŒIReset the request timer and continue waiting for the request to complete.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j»h´M>hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j»h´M>hj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_hw_ctx (C struct)”Œc.blk_mq_hw_ctx”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ blk_mq_hw_ctx”h]”j¹)�”}”(hŒstruct blk_mq_hw_ctx”h]”(j¿)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjûh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MDubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjûh²hh³j h´MDubjâ)�”}”(hŒ blk_mq_hw_ctx”h]”jè)�”}”(hjùh]”hŒ blk_mq_hw_ctx”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjûh²hh³j h´MDubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj÷h²hh³j h´MDubah}”(h]”jòah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j h´MDhjôh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ;State for a hardware queue facing the hardware block device”h]”hŒ;State for a hardware queue facing the hardware block device”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M?hj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôh²hh³j h´MDubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6jZj7jZj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXw**Definition**:: struct blk_mq_hw_ctx { struct { spinlock_t lock; struct list_head dispatch; unsigned long state; }; struct delayed_work run_work; cpumask_var_t cpumask; int next_cpu; int next_cpu_batch; unsigned long flags; void *sched_data; struct request_queue *queue; struct blk_flush_queue *fq; void *driver_data; struct sbitmap ctx_map; struct blk_mq_ctx *dispatch_from; unsigned int dispatch_busy; unsigned short type; unsigned short nr_ctx; struct blk_mq_ctx **ctxs; spinlock_t dispatch_wait_lock; wait_queue_entry_t dispatch_wait; atomic_t wait_index; struct blk_mq_tags *tags; struct blk_mq_tags *sched_tags; int numa_node; unsigned int queue_num; atomic_t nr_active; struct hlist_node cpuhp_online; struct hlist_node cpuhp_dead; struct kobject kobj; #ifdef CONFIG_BLK_DEBUG_FS; struct dentry *debugfs_dir; struct dentry *sched_debugfs_dir; #endif; struct list_head hctx_list; }; **Members** ``{unnamed_struct}`` anonymous ``lock`` Protects the dispatch list. ``dispatch`` Used for requests that are ready to be dispatched to the hardware but for some reason (e.g. lack of resources) could not be sent to the hardware. As soon as the driver can send new requests, requests at this list will be sent first for a fairer dispatch. ``state`` BLK_MQ_S_* flags. Defines the state of the hw queue (active, scheduled to restart, stopped). ``run_work`` Used for scheduling a hardware queue run at a later time. ``cpumask`` Map of available CPUs where this hctx can run. ``next_cpu`` Used by blk_mq_hctx_next_cpu() for round-robin CPU selection from **cpumask**. ``next_cpu_batch`` Counter of how many works left in the batch before changing to the next CPU. ``flags`` BLK_MQ_F_* flags. Defines the behaviour of the queue. ``sched_data`` Pointer owned by the IO scheduler attached to a request queue. It's up to the IO scheduler how to use this pointer. ``queue`` Pointer to the request queue that owns this hardware context. ``fq`` Queue of requests that need to perform a flush operation. ``driver_data`` Pointer to data owned by the block driver that created this hctx ``ctx_map`` Bitmap for each software queue. If bit is on, there is a pending request in that software queue. ``dispatch_from`` Software queue to be used when no scheduler was selected. ``dispatch_busy`` Number used by blk_mq_update_dispatch_busy() to decide if the hw_queue is busy using Exponential Weighted Moving Average algorithm. ``type`` HCTX_TYPE_* flags. Type of hardware queue. ``nr_ctx`` Number of software queues. ``ctxs`` Array of software queues. ``dispatch_wait_lock`` Lock for dispatch_wait queue. ``dispatch_wait`` Waitqueue to put requests when there is no tag available at the moment, to wait for another try in the future. ``wait_index`` Index of next available dispatch_wait queue to insert requests. ``tags`` Tags owned by the block driver. A tag at this set is only assigned when a request is dispatched from a hardware queue. ``sched_tags`` Tags owned by I/O scheduler. If there is an I/O scheduler associated with a request queue, a tag is assigned when that request is allocated. Else, this member is not used. ``numa_node`` NUMA node the storage adapter has been connected to. ``queue_num`` Index of this hardware queue. ``nr_active`` Number of active requests. Only used when a tag set is shared across request queues. ``cpuhp_online`` List to store request if CPU is going to die ``cpuhp_dead`` List to store request if some CPU die. ``kobj`` Kernel object for sysfs. ``debugfs_dir`` debugfs directory for this hardware queue. Named as cpu. ``sched_debugfs_dir`` debugfs directory for the scheduler. ``hctx_list`` if this hctx is not in use, this is an entry in q->unused_hctx_list.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jF)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjbubhŒ:”…”�”}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MChj^ubhŒ literal_block”“”)�”}”(hX–struct blk_mq_hw_ctx { struct { spinlock_t lock; struct list_head dispatch; unsigned long state; }; struct delayed_work run_work; cpumask_var_t cpumask; int next_cpu; int next_cpu_batch; unsigned long flags; void *sched_data; struct request_queue *queue; struct blk_flush_queue *fq; void *driver_data; struct sbitmap ctx_map; struct blk_mq_ctx *dispatch_from; unsigned int dispatch_busy; unsigned short type; unsigned short nr_ctx; struct blk_mq_ctx **ctxs; spinlock_t dispatch_wait_lock; wait_queue_entry_t dispatch_wait; atomic_t wait_index; struct blk_mq_tags *tags; struct blk_mq_tags *sched_tags; int numa_node; unsigned int queue_num; atomic_t nr_active; struct hlist_node cpuhp_online; struct hlist_node cpuhp_dead; struct kobject kobj; #ifdef CONFIG_BLK_DEBUG_FS; struct dentry *debugfs_dir; struct dentry *sched_debugfs_dir; #endif; struct list_head hctx_list; };”h]”hX–struct blk_mq_hw_ctx { struct { spinlock_t lock; struct list_head dispatch; unsigned long state; }; struct delayed_work run_work; cpumask_var_t cpumask; int next_cpu; int next_cpu_batch; unsigned long flags; void *sched_data; struct request_queue *queue; struct blk_flush_queue *fq; void *driver_data; struct sbitmap ctx_map; struct blk_mq_ctx *dispatch_from; unsigned int dispatch_busy; unsigned short type; unsigned short nr_ctx; struct blk_mq_ctx **ctxs; spinlock_t dispatch_wait_lock; wait_queue_entry_t dispatch_wait; atomic_t wait_index; struct blk_mq_tags *tags; struct blk_mq_tags *sched_tags; int numa_node; unsigned int queue_num; atomic_t nr_active; struct hlist_node cpuhp_online; struct hlist_node cpuhp_dead; struct kobject kobj; #ifdef CONFIG_BLK_DEBUG_FS; struct dentry *debugfs_dir; struct dentry *sched_debugfs_dir; #endif; struct list_head hctx_list; };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MEhj^ubhÞ)�”}”(hŒ **Members**”h]”jF)�”}”(hj’h]”hŒMembers”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mlhj^ubj\)�”}”(hhh]”(ja)�”}”(hŒ``{unnamed_struct}`` anonymous ”h]”(jg)�”}”(hŒ``{unnamed_struct}``”h]”jM)�”}”(hj±h]”hŒ{unnamed_struct}”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Khj«ubj�)�”}”(hhh]”hÞ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÆh´KhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÆh´Khj¨ubja)�”}”(hŒ%``lock`` Protects the dispatch list. ”h]”(jg)�”}”(hŒ``lock``”h]”jM)�”}”(hjêh]”hŒlock”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MEhjäubj�)�”}”(hhh]”hÞ)�”}”(hŒProtects the dispatch list.”h]”hŒProtects the dispatch list.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÿh´MEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÿh´MEhj¨ubja)�”}”(hX ``dispatch`` Used for requests that are ready to be dispatched to the hardware but for some reason (e.g. lack of resources) could not be sent to the hardware. As soon as the driver can send new requests, requests at this list will be sent first for a fairer dispatch. ”h]”(jg)�”}”(hŒ ``dispatch``”h]”jM)�”}”(hj#h]”hŒdispatch”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MLhjubj�)�”}”(hhh]”hÞ)�”}”(hŒþUsed for requests that are ready to be dispatched to the hardware but for some reason (e.g. lack of resources) could not be sent to the hardware. As soon as the driver can send new requests, requests at this list will be sent first for a fairer dispatch.”h]”hŒþUsed for requests that are ready to be dispatched to the hardware but for some reason (e.g. lack of resources) could not be sent to the hardware. As soon as the driver can send new requests, requests at this list will be sent first for a fairer dispatch.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MHhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j8h´MLhj¨ubja)�”}”(hŒg``state`` BLK_MQ_S_* flags. Defines the state of the hw queue (active, scheduled to restart, stopped). ”h]”(jg)�”}”(hŒ ``state``”h]”jM)�”}”(hj]h]”hŒstate”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MQhjWubj�)�”}”(hhh]”hÞ)�”}”(hŒ\BLK_MQ_S_* flags. Defines the state of the hw queue (active, scheduled to restart, stopped).”h]”hŒ\BLK_MQ_S_* flags. Defines the state of the hw queue (active, scheduled to restart, stopped).”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MPhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jrh´MQhj¨ubja)�”}”(hŒG``run_work`` Used for scheduling a hardware queue run at a later time. ”h]”(jg)�”}”(hŒ ``run_work``”h]”jM)�”}”(hj—h]”hŒrun_work”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MWhj‘ubj�)�”}”(hhh]”hÞ)�”}”(hŒ9Used for scheduling a hardware queue run at a later time.”h]”hŒ9Used for scheduling a hardware queue run at a later time.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¬h´MWhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¬h´MWhj¨ubja)�”}”(hŒ;``cpumask`` Map of available CPUs where this hctx can run. ”h]”(jg)�”}”(hŒ ``cpumask``”h]”jM)�”}”(hjÐh]”hŒcpumask”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MZhjÊubj�)�”}”(hhh]”hÞ)�”}”(hŒ.Map of available CPUs where this hctx can run.”h]”hŒ.Map of available CPUs where this hctx can run.”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jåh´MZhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jåh´MZhj¨ubja)�”}”(hŒ\``next_cpu`` Used by blk_mq_hctx_next_cpu() for round-robin CPU selection from **cpumask**. ”h]”(jg)�”}”(hŒ ``next_cpu``”h]”jM)�”}”(hj h]”hŒnext_cpu”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M^hjubj�)�”}”(hhh]”hÞ)�”}”(hŒNUsed by blk_mq_hctx_next_cpu() for round-robin CPU selection from **cpumask**.”h]”(hŒBUsed by blk_mq_hctx_next_cpu() for round-robin CPU selection from ”…”�”}”(hj"h²hh³Nh´NubjF)�”}”(hŒ **cpumask**”h]”hŒcpumask”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj"ubhŒ.”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M]hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´M^hj¨ubja)�”}”(hŒ```next_cpu_batch`` Counter of how many works left in the batch before changing to the next CPU. ”h]”(jg)�”}”(hŒ``next_cpu_batch``”h]”jM)�”}”(hjUh]”hŒnext_cpu_batch”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MchjOubj�)�”}”(hhh]”hÞ)�”}”(hŒLCounter of how many works left in the batch before changing to the next CPU.”h]”hŒLCounter of how many works left in the batch before changing to the next CPU.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mbhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jjh´Mchj¨ubja)�”}”(hŒ@``flags`` BLK_MQ_F_* flags. Defines the behaviour of the queue. ”h]”(jg)�”}”(hŒ ``flags``”h]”jM)�”}”(hj�h]”hŒflags”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mghj‰ubj�)�”}”(hhh]”hÞ)�”}”(hŒ5BLK_MQ_F_* flags. Defines the behaviour of the queue.”h]”hŒ5BLK_MQ_F_* flags. Defines the behaviour of the queue.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¤h´Mghj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¤h´Mghj¨ubja)�”}”(hŒƒ``sched_data`` Pointer owned by the IO scheduler attached to a request queue. It's up to the IO scheduler how to use this pointer. ”h]”(jg)�”}”(hŒ``sched_data``”h]”jM)�”}”(hjÈh]”hŒ sched_data”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MlhjÂubj�)�”}”(hhh]”hÞ)�”}”(hŒsPointer owned by the IO scheduler attached to a request queue. It's up to the IO scheduler how to use this pointer.”h]”hŒuPointer owned by the IO scheduler attached to a request queue. It’s up to the IO scheduler how to use this pointer.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MkhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÝh´Mlhj¨ubja)�”}”(hŒH``queue`` Pointer to the request queue that owns this hardware context. ”h]”(jg)�”}”(hŒ ``queue``”h]”jM)�”}”(hjh]”hŒqueue”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mphjüubj�)�”}”(hhh]”hÞ)�”}”(hŒ=Pointer to the request queue that owns this hardware context.”h]”hŒ=Pointer to the request queue that owns this hardware context.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Mphjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´Mphj¨ubja)�”}”(hŒA``fq`` Queue of requests that need to perform a flush operation. ”h]”(jg)�”}”(hŒ``fq``”h]”jM)�”}”(hj;h]”hŒfq”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mshj5ubj�)�”}”(hhh]”hÞ)�”}”(hŒ9Queue of requests that need to perform a flush operation.”h]”hŒ9Queue of requests that need to perform a flush operation.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jPh´MshjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jPh´Mshj¨ubja)�”}”(hŒQ``driver_data`` Pointer to data owned by the block driver that created this hctx ”h]”(jg)�”}”(hŒ``driver_data``”h]”jM)�”}”(hjth]”hŒ driver_data”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mxhjnubj�)�”}”(hhh]”hÞ)�”}”(hŒ@Pointer to data owned by the block driver that created this hctx”h]”hŒ@Pointer to data owned by the block driver that created this hctx”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MwhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j‰h´Mxhj¨ubja)�”}”(hŒm``ctx_map`` Bitmap for each software queue. If bit is on, there is a pending request in that software queue. ”h]”(jg)�”}”(hŒ ``ctx_map``”h]”jM)�”}”(hj®h]”hŒctx_map”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M~hj¨ubj�)�”}”(hhh]”hÞ)�”}”(hŒ`Bitmap for each software queue. If bit is on, there is a pending request in that software queue.”h]”hŒ`Bitmap for each software queue. If bit is on, there is a pending request in that software queue.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M}hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÃh´M~hj¨ubja)�”}”(hŒL``dispatch_from`` Software queue to be used when no scheduler was selected. ”h]”(jg)�”}”(hŒ``dispatch_from``”h]”jM)�”}”(hjèh]”hŒ dispatch_from”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M„hjâubj�)�”}”(hhh]”hÞ)�”}”(hŒ9Software queue to be used when no scheduler was selected.”h]”hŒ9Software queue to be used when no scheduler was selected.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mƒhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jýh´M„hj¨ubja)�”}”(hŒ–``dispatch_busy`` Number used by blk_mq_update_dispatch_busy() to decide if the hw_queue is busy using Exponential Weighted Moving Average algorithm. ”h]”(jg)�”}”(hŒ``dispatch_busy``”h]”jM)�”}”(hj" h]”hŒ dispatch_busy”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŠhj ubj�)�”}”(hhh]”hÞ)�”}”(hŒƒNumber used by blk_mq_update_dispatch_busy() to decide if the hw_queue is busy using Exponential Weighted Moving Average algorithm.”h]”hŒƒNumber used by blk_mq_update_dispatch_busy() to decide if the hw_queue is busy using Exponential Weighted Moving Average algorithm.”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mˆhj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j7 h´MŠhj¨ubja)�”}”(hŒ4``type`` HCTX_TYPE_* flags. Type of hardware queue. ”h]”(jg)�”}”(hŒ``type``”h]”jM)�”}”(hj\ h]”hŒtype”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŽhjV ubj�)�”}”(hhh]”hÞ)�”}”(hŒ*HCTX_TYPE_* flags. Type of hardware queue.”h]”hŒ*HCTX_TYPE_* flags. Type of hardware queue.”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jq h´MŽhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jq h´MŽhj¨ubja)�”}”(hŒ&``nr_ctx`` Number of software queues. ”h]”(jg)�”}”(hŒ ``nr_ctx``”h]”jM)�”}”(hj• h]”hŒnr_ctx”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M�hj� ubj�)�”}”(hhh]”hÞ)�”}”(hŒNumber of software queues.”h]”hŒNumber of software queues.”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jª h´M�hj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jª h´M�hj¨ubja)�”}”(hŒ#``ctxs`` Array of software queues. ”h]”(jg)�”}”(hŒ``ctxs``”h]”jM)�”}”(hjÎ h]”hŒctxs”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M’hjÈ ubj�)�”}”(hhh]”hÞ)�”}”(hŒArray of software queues.”h]”hŒArray of software queues.”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jã h´M’hjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÈ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jã h´M’hj¨ubja)�”}”(hŒ5``dispatch_wait_lock`` Lock for dispatch_wait queue. ”h]”(jg)�”}”(hŒ``dispatch_wait_lock``”h]”jM)�”}”(hj h]”hŒdispatch_wait_lock”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M•hj ubj�)�”}”(hhh]”hÞ)�”}”(hŒLock for dispatch_wait queue.”h]”hŒLock for dispatch_wait queue.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j h´M•hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j h´M•hj¨ubja)�”}”(hŒ�``dispatch_wait`` Waitqueue to put requests when there is no tag available at the moment, to wait for another try in the future. ”h]”(jg)�”}”(hŒ``dispatch_wait``”h]”jM)�”}”(hj@ h]”hŒ dispatch_wait”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M™hj: ubj�)�”}”(hhh]”hÞ)�”}”(hŒnWaitqueue to put requests when there is no tag available at the moment, to wait for another try in the future.”h]”hŒnWaitqueue to put requests when there is no tag available at the moment, to wait for another try in the future.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M˜hjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jU h´M™hj¨ubja)�”}”(hŒO``wait_index`` Index of next available dispatch_wait queue to insert requests. ”h]”(jg)�”}”(hŒ``wait_index``”h]”jM)�”}”(hjz h]”hŒ wait_index”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŸhjt ubj�)�”}”(hhh]”hÞ)�”}”(hŒ?Index of next available dispatch_wait queue to insert requests.”h]”hŒ?Index of next available dispatch_wait queue to insert requests.”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mžhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjt ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j� h´MŸhj¨ubja)�”}”(hŒ€``tags`` Tags owned by the block driver. A tag at this set is only assigned when a request is dispatched from a hardware queue. ”h]”(jg)�”}”(hŒ``tags``”h]”jM)�”}”(hj´ h]”hŒtags”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¥hj® ubj�)�”}”(hhh]”hÞ)�”}”(hŒvTags owned by the block driver. A tag at this set is only assigned when a request is dispatched from a hardware queue.”h]”hŒvTags owned by the block driver. A tag at this set is only assigned when a request is dispatched from a hardware queue.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¤hjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj® ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÉ h´M¥hj¨ubja)�”}”(hŒ»``sched_tags`` Tags owned by I/O scheduler. If there is an I/O scheduler associated with a request queue, a tag is assigned when that request is allocated. Else, this member is not used. ”h]”(jg)�”}”(hŒ``sched_tags``”h]”jM)�”}”(hjî h]”hŒ sched_tags”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjì ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M«hjè ubj�)�”}”(hhh]”hÞ)�”}”(hŒ«Tags owned by I/O scheduler. If there is an I/O scheduler associated with a request queue, a tag is assigned when that request is allocated. Else, this member is not used.”h]”hŒ«Tags owned by I/O scheduler. If there is an I/O scheduler associated with a request queue, a tag is assigned when that request is allocated. Else, this member is not used.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjè ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j h´M«hj¨ubja)�”}”(hŒC``numa_node`` NUMA node the storage adapter has been connected to. ”h]”(jg)�”}”(hŒ ``numa_node``”h]”jM)�”}”(hj( h]”hŒ numa_node”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj& ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¯hj" ubj�)�”}”(hhh]”hÞ)�”}”(hŒ4NUMA node the storage adapter has been connected to.”h]”hŒ4NUMA node the storage adapter has been connected to.”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j= h´M¯hj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj" ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j= h´M¯hj¨ubja)�”}”(hŒ,``queue_num`` Index of this hardware queue. ”h]”(jg)�”}”(hŒ ``queue_num``”h]”jM)�”}”(hja h]”hŒ queue_num”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M±hj[ ubj�)�”}”(hhh]”hÞ)�”}”(hŒIndex of this hardware queue.”h]”hŒIndex of this hardware queue.”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jv h´M±hjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj[ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jv h´M±hj¨ubja)�”}”(hŒc``nr_active`` Number of active requests. Only used when a tag set is shared across request queues. ”h]”(jg)�”}”(hŒ ``nr_active``”h]”jM)�”}”(hjš h]”hŒ nr_active”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¶hj” ubj�)�”}”(hhh]”hÞ)�”}”(hŒTNumber of active requests. Only used when a tag set is shared across request queues.”h]”hŒTNumber of active requests. Only used when a tag set is shared across request queues.”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mµhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj” ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¯ h´M¶hj¨ubja)�”}”(hŒ>``cpuhp_online`` List to store request if CPU is going to die ”h]”(jg)�”}”(hŒ``cpuhp_online``”h]”jM)�”}”(hjÔ h]”hŒ cpuhp_online”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MºhjÎ ubj�)�”}”(hhh]”hÞ)�”}”(hŒ,List to store request if CPU is going to die”h]”hŒ,List to store request if CPU is going to die”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jé h´Mºhjê ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÎ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jé h´Mºhj¨ubja)�”}”(hŒ6``cpuhp_dead`` List to store request if some CPU die. ”h]”(jg)�”}”(hŒ``cpuhp_dead``”h]”jM)�”}”(hj h]”hŒ cpuhp_dead”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¼hj ubj�)�”}”(hhh]”hÞ)�”}”(hŒ&List to store request if some CPU die.”h]”hŒ&List to store request if some CPU die.”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j" h´M¼hj# ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j" h´M¼hj¨ubja)�”}”(hŒ"``kobj`` Kernel object for sysfs. ”h]”(jg)�”}”(hŒ``kobj``”h]”jM)�”}”(hjF h]”hŒkobj”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M¾hj@ ubj�)�”}”(hhh]”hÞ)�”}”(hŒKernel object for sysfs.”h]”hŒKernel object for sysfs.”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j[ h´M¾hj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj@ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j[ h´M¾hj¨ubja)�”}”(hŒU``debugfs_dir`` debugfs directory for this hardware queue. Named as cpu. ”h]”(jg)�”}”(hŒ``debugfs_dir``”h]”jM)�”}”(hj h]”hŒ debugfs_dir”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÄhjy ubj�)�”}”(hhh]”hÞ)�”}”(hŒDdebugfs directory for this hardware queue. Named as cpu.”h]”hŒDdebugfs directory for this hardware queue. Named as cpu.”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÃhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjy ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j” h´MÄhj¨ubja)�”}”(hŒ;``sched_debugfs_dir`` debugfs directory for the scheduler. ”h]”(jg)�”}”(hŒ``sched_debugfs_dir``”h]”jM)�”}”(hj¹ h]”hŒsched_debugfs_dir”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÇhj³ ubj�)�”}”(hhh]”hÞ)�”}”(hŒ$debugfs directory for the scheduler.”h]”hŒ$debugfs directory for the scheduler.”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎ h´MÇhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj³ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÎ h´MÇhj¨ubja)�”}”(hŒR``hctx_list`` if this hctx is not in use, this is an entry in q->unused_hctx_list.”h]”(jg)�”}”(hŒ ``hctx_list``”h]”jM)�”}”(hjò h]”hŒ hctx_list”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÌhjì ubj�)�”}”(hhh]”hÞ)�”}”(hŒDif this hctx is not in use, this is an entry in q->unused_hctx_list.”h]”hŒDif this hctx is not in use, this is an entry in q->unused_hctx_list.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j h´MÌhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjì ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j h´MÌhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_queue_map (C struct)”Œc.blk_mq_queue_map”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒblk_mq_queue_map”h]”j¹)�”}”(hŒstruct blk_mq_queue_map”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjG h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÓubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjG h²hh³jX h´MÓubjâ)�”}”(hŒblk_mq_queue_map”h]”jè)�”}”(hjE h]”hŒblk_mq_queue_map”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjg ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjG h²hh³jX h´MÓubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjC h²hh³jX h´MÓubah}”(h]”j> ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jX h´MÓhj@ h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ&Map software queues to hardware queues”h]”hŒ&Map software queues to hardware queues”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÒhjŠ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ h²hh³jX h´MÓubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6j¥ j7j¥ j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXG**Definition**:: struct blk_mq_queue_map { unsigned int *mq_map; unsigned int nr_queues; unsigned int queue_offset; }; **Members** ``mq_map`` CPU ID to hardware queue index map. This is an array with nr_cpu_ids elements. Each element has a value in the range [**queue_offset**, **queue_offset** + **nr_queues**). ``nr_queues`` Number of hardware queues to map CPU IDs onto. ``queue_offset`` First hardware queue to map onto. Used by the PCIe NVMe driver to map each hardware queue type (enum hctx_type) onto a distinct set of hardware queues.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jF)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj­ ubhŒ:”…”�”}”(hj­ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÖhj© ubj€)�”}”(hŒqstruct blk_mq_queue_map { unsigned int *mq_map; unsigned int nr_queues; unsigned int queue_offset; };”h]”hŒqstruct blk_mq_queue_map { unsigned int *mq_map; unsigned int nr_queues; unsigned int queue_offset; };”…”�”}”hjÊ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MØhj© ubhÞ)�”}”(hŒ **Members**”h]”jF)�”}”(hjÛ h]”hŒMembers”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÞhj© ubj\)�”}”(hhh]”(ja)�”}”(hŒ¶``mq_map`` CPU ID to hardware queue index map. This is an array with nr_cpu_ids elements. Each element has a value in the range [**queue_offset**, **queue_offset** + **nr_queues**). ”h]”(jg)�”}”(hŒ ``mq_map``”h]”jM)�”}”(hjú h]”hŒmq_map”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÖhjô ubj�)�”}”(hhh]”hÞ)�”}”(hŒªCPU ID to hardware queue index map. This is an array with nr_cpu_ids elements. Each element has a value in the range [**queue_offset**, **queue_offset** + **nr_queues**).”h]”(hŒvCPU ID to hardware queue index map. This is an array with nr_cpu_ids elements. Each element has a value in the range [”…”�”}”(hjh²hh³Nh´NubjF)�”}”(hŒ**queue_offset**”h]”hŒ queue_offset”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhŒ, ”…”�”}”(hjh²hh³Nh´NubjF)�”}”(hŒ**queue_offset**”h]”hŒ queue_offset”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhŒ + ”…”�”}”(hjh²hh³Nh´NubjF)�”}”(hŒ **nr_queues**”h]”hŒ nr_queues”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhŒ).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”•h´MÔhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjô ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´MÖhjñ ubja)�”}”(hŒ=``nr_queues`` Number of hardware queues to map CPU IDs onto. ”h]”(jg)�”}”(hŒ ``nr_queues``”h]”jM)�”}”(hjjh]”hŒ nr_queues”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M×hjdubj�)�”}”(hhh]”hÞ)�”}”(hŒ.Number of hardware queues to map CPU IDs onto.”h]”hŒ.Number of hardware queues to map CPU IDs onto.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´M×hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´M×hjñ ubja)�”}”(hŒ¨``queue_offset`` First hardware queue to map onto. Used by the PCIe NVMe driver to map each hardware queue type (enum hctx_type) onto a distinct set of hardware queues.”h]”(jg)�”}”(hŒ``queue_offset``”h]”jM)�”}”(hj£h]”hŒ queue_offset”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÙhj�ubj�)�”}”(hhh]”hÞ)�”}”(hŒ—First hardware queue to map onto. Used by the PCIe NVMe driver to map each hardware queue type (enum hctx_type) onto a distinct set of hardware queues.”h]”hŒ—First hardware queue to map onto. Used by the PCIe NVMe driver to map each hardware queue type (enum hctx_type) onto a distinct set of hardware queues.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MØhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¸h´MÙhjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj© ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œhctx_type (C enum)”Œ c.hctx_type”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ hctx_type”h]”j¹)�”}”(hŒenum hctx_type”h]”(j¿)�”}”(hjÂh]”hŒenum”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjùh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MàubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjùh²hh³j h´Màubjâ)�”}”(hŒ hctx_type”h]”jè)�”}”(hj÷h]”hŒ hctx_type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjùh²hh³j h´Màubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjõh²hh³j h´Màubah}”(h]”jðah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j h´Màhjòh²hubj)�”}”(hhh]”hÞ)�”}”(hŒType of hardware queue”h]”hŒType of hardware queue”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mâhj<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòh²hh³j h´Màubeh}”(h]”h ]”(j0Œenum”eh"]”h$]”h&]”j5j0j6jWj7jWj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒÑ**Constants** ``HCTX_TYPE_DEFAULT`` All I/O not otherwise accounted for. ``HCTX_TYPE_READ`` Just for READ I/O. ``HCTX_TYPE_POLL`` Polled I/O of any kind. ``HCTX_MAX_TYPES`` Number of types of hctx.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jF)�”}”(hjah]”hŒ Constants”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mæhj[ubj\)�”}”(hhh]”(ja)�”}”(hŒ;``HCTX_TYPE_DEFAULT`` All I/O not otherwise accounted for. ”h]”(jg)�”}”(hŒ``HCTX_TYPE_DEFAULT``”h]”jM)�”}”(hj€h]”hŒHCTX_TYPE_DEFAULT”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Méhjzubj�)�”}”(hhh]”hÞ)�”}”(hŒ$All I/O not otherwise accounted for.”h]”hŒ$All I/O not otherwise accounted for.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j•h´Méhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j•h´Méhjwubja)�”}”(hŒ&``HCTX_TYPE_READ`` Just for READ I/O. ”h]”(jg)�”}”(hŒ``HCTX_TYPE_READ``”h]”jM)�”}”(hj¹h]”hŒHCTX_TYPE_READ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mìhj³ubj�)�”}”(hhh]”hÞ)�”}”(hŒJust for READ I/O.”h]”hŒJust for READ I/O.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÎh´MìhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÎh´Mìhjwubja)�”}”(hŒ+``HCTX_TYPE_POLL`` Polled I/O of any kind. ”h]”(jg)�”}”(hŒ``HCTX_TYPE_POLL``”h]”jM)�”}”(hjòh]”hŒHCTX_TYPE_POLL”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mïhjìubj�)�”}”(hhh]”hÞ)�”}”(hŒPolled I/O of any kind.”h]”hŒPolled I/O of any kind.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Mïhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´Mïhjwubja)�”}”(hŒ+``HCTX_MAX_TYPES`` Number of types of hctx.”h]”(jg)�”}”(hŒ``HCTX_MAX_TYPES``”h]”jM)�”}”(hj+h]”hŒHCTX_MAX_TYPES”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mñhj%ubj�)�”}”(hhh]”hÞ)�”}”(hŒNumber of types of hctx.”h]”hŒNumber of types of hctx.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MòhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j@h´Mñhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_tag_set (C struct)”Œc.blk_mq_tag_set”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒblk_mq_tag_set”h]”j¹)�”}”(hŒstruct blk_mq_tag_set”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj�h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M÷ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj�h²hh³j’h´M÷ubjâ)�”}”(hŒblk_mq_tag_set”h]”jè)�”}”(hjh]”hŒblk_mq_tag_set”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¡ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj�h²hh³j’h´M÷ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj}h²hh³j’h´M÷ubah}”(h]”jxah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j’h´M÷hjzh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ1tag set that can be shared between request queues”h]”hŒ1tag set that can be shared between request queues”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MñhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzh²hh³j’h´M÷ubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6jßj7jßj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXÐ **Definition**:: struct blk_mq_tag_set { const struct blk_mq_ops *ops; struct blk_mq_queue_map map[HCTX_MAX_TYPES]; unsigned int nr_maps; unsigned int nr_hw_queues; unsigned int queue_depth; unsigned int reserved_tags; unsigned int cmd_size; int numa_node; unsigned int timeout; unsigned int flags; void *driver_data; struct blk_mq_tags **tags; struct blk_mq_tags *shared_tags; struct mutex tag_list_lock; struct list_head tag_list; struct srcu_struct *srcu; struct srcu_struct tags_srcu; struct rw_semaphore update_nr_hwq_lock; }; **Members** ``ops`` Pointers to functions that implement block driver behavior. ``map`` One or more ctx -> hctx mappings. One map exists for each hardware queue type (enum hctx_type) that the driver wishes to support. There are no restrictions on maps being of the same size, and it's perfectly legal to share maps between types. ``nr_maps`` Number of elements in the **map** array. A number in the range [1, HCTX_MAX_TYPES]. ``nr_hw_queues`` Number of hardware queues supported by the block driver that owns this data structure. ``queue_depth`` Number of tags per hardware queue, reserved tags included. ``reserved_tags`` Number of tags to set aside for BLK_MQ_REQ_RESERVED tag allocations. ``cmd_size`` Number of additional bytes to allocate per request. The block driver owns these additional bytes. ``numa_node`` NUMA node the storage adapter has been connected to. ``timeout`` Request processing timeout in jiffies. ``flags`` Zero or more BLK_MQ_F_* flags. ``driver_data`` Pointer to data owned by the block driver that created this tag set. ``tags`` Tag sets. One tag set per hardware queue. Has **nr_hw_queues** elements. ``shared_tags`` Shared set of tags. Has **nr_hw_queues** elements. If set, shared by all **tags**. ``tag_list_lock`` Serializes tag_list accesses. ``tag_list`` List of the request queues that use this tag set. See also request_queue.tag_set_list. ``srcu`` Use as lock when type of the request queue is blocking (BLK_MQ_F_BLOCKING). ``tags_srcu`` SRCU used to defer freeing of tags page_list to prevent use-after-free when iterating tags. ``update_nr_hwq_lock`` Synchronize updating nr_hw_queues with add/del disk & switching elevator.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jF)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjçubhŒ:”…”�”}”(hjçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mõhjãubj€)�”}”(hXÁstruct blk_mq_tag_set { const struct blk_mq_ops *ops; struct blk_mq_queue_map map[HCTX_MAX_TYPES]; unsigned int nr_maps; unsigned int nr_hw_queues; unsigned int queue_depth; unsigned int reserved_tags; unsigned int cmd_size; int numa_node; unsigned int timeout; unsigned int flags; void *driver_data; struct blk_mq_tags **tags; struct blk_mq_tags *shared_tags; struct mutex tag_list_lock; struct list_head tag_list; struct srcu_struct *srcu; struct srcu_struct tags_srcu; struct rw_semaphore update_nr_hwq_lock; };”h]”hXÁstruct blk_mq_tag_set { const struct blk_mq_ops *ops; struct blk_mq_queue_map map[HCTX_MAX_TYPES]; unsigned int nr_maps; unsigned int nr_hw_queues; unsigned int queue_depth; unsigned int reserved_tags; unsigned int cmd_size; int numa_node; unsigned int timeout; unsigned int flags; void *driver_data; struct blk_mq_tags **tags; struct blk_mq_tags *shared_tags; struct mutex tag_list_lock; struct list_head tag_list; struct srcu_struct *srcu; struct srcu_struct tags_srcu; struct rw_semaphore update_nr_hwq_lock; };”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M÷hjãubhÞ)�”}”(hŒ **Members**”h]”jF)�”}”(hjh]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M hjãubj\)�”}”(hhh]”(ja)�”}”(hŒD``ops`` Pointers to functions that implement block driver behavior. ”h]”(jg)�”}”(hŒ``ops``”h]”jM)�”}”(hj4h]”hŒops”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Móhj.ubj�)�”}”(hhh]”hÞ)�”}”(hŒ;Pointers to functions that implement block driver behavior.”h]”hŒ;Pointers to functions that implement block driver behavior.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jIh´MóhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jIh´Móhj+ubja)�”}”(hŒú``map`` One or more ctx -> hctx mappings. One map exists for each hardware queue type (enum hctx_type) that the driver wishes to support. There are no restrictions on maps being of the same size, and it's perfectly legal to share maps between types. ”h]”(jg)�”}”(hŒ``map``”h]”jM)�”}”(hjmh]”hŒmap”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Møhjgubj�)�”}”(hhh]”hÞ)�”}”(hŒñOne or more ctx -> hctx mappings. One map exists for each hardware queue type (enum hctx_type) that the driver wishes to support. There are no restrictions on maps being of the same size, and it's perfectly legal to share maps between types.”h]”hŒóOne or more ctx -> hctx mappings. One map exists for each hardware queue type (enum hctx_type) that the driver wishes to support. There are no restrictions on maps being of the same size, and it’s perfectly legal to share maps between types.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Môhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j‚h´Møhj+ubja)�”}”(hŒ```nr_maps`` Number of elements in the **map** array. A number in the range [1, HCTX_MAX_TYPES]. ”h]”(jg)�”}”(hŒ ``nr_maps``”h]”jM)�”}”(hj§h]”hŒnr_maps”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Múhj¡ubj�)�”}”(hhh]”hÞ)�”}”(hŒSNumber of elements in the **map** array. A number in the range [1, HCTX_MAX_TYPES].”h]”(hŒNumber of elements in the ”…”�”}”(hjÀh²hh³Nh´NubjF)�”}”(hŒ**map**”h]”hŒmap”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÀubhŒ2 array. A number in the range [1, HCTX_MAX_TYPES].”…”�”}”(hjÀh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mùhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¼h´Múhj+ubja)�”}”(hŒh``nr_hw_queues`` Number of hardware queues supported by the block driver that owns this data structure. ”h]”(jg)�”}”(hŒ``nr_hw_queues``”h]”jM)�”}”(hjóh]”hŒ nr_hw_queues”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mühjíubj�)�”}”(hhh]”hÞ)�”}”(hŒVNumber of hardware queues supported by the block driver that owns this data structure.”h]”hŒVNumber of hardware queues supported by the block driver that owns this data structure.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mûhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´Mühj+ubja)�”}”(hŒK``queue_depth`` Number of tags per hardware queue, reserved tags included. ”h]”(jg)�”}”(hŒ``queue_depth``”h]”jM)�”}”(hj-h]”hŒ queue_depth”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mýhj'ubj�)�”}”(hhh]”hÞ)�”}”(hŒ:Number of tags per hardware queue, reserved tags included.”h]”hŒ:Number of tags per hardware queue, reserved tags included.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jBh´MýhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jBh´Mýhj+ubja)�”}”(hŒW``reserved_tags`` Number of tags to set aside for BLK_MQ_REQ_RESERVED tag allocations. ”h]”(jg)�”}”(hŒ``reserved_tags``”h]”jM)�”}”(hjfh]”hŒ reserved_tags”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mÿhj`ubj�)�”}”(hhh]”hÞ)�”}”(hŒDNumber of tags to set aside for BLK_MQ_REQ_RESERVED tag allocations.”h]”hŒDNumber of tags to set aside for BLK_MQ_REQ_RESERVED tag allocations.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mþhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j{h´Mÿhj+ubja)�”}”(hŒo``cmd_size`` Number of additional bytes to allocate per request. The block driver owns these additional bytes. ”h]”(jg)�”}”(hŒ ``cmd_size``”h]”jM)�”}”(hj h]”hŒcmd_size”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjšubj�)�”}”(hhh]”hÞ)�”}”(hŒaNumber of additional bytes to allocate per request. The block driver owns these additional bytes.”h]”hŒaNumber of additional bytes to allocate per request. The block driver owns these additional bytes.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jµh´Mhj+ubja)�”}”(hŒC``numa_node`` NUMA node the storage adapter has been connected to. ”h]”(jg)�”}”(hŒ ``numa_node``”h]”jM)�”}”(hjÚh]”hŒ numa_node”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MhjÔubj�)�”}”(hhh]”hÞ)�”}”(hŒ4NUMA node the storage adapter has been connected to.”h]”hŒ4NUMA node the storage adapter has been connected to.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jïh´Mhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jïh´Mhj+ubja)�”}”(hŒ3``timeout`` Request processing timeout in jiffies. ”h]”(jg)�”}”(hŒ ``timeout``”h]”jM)�”}”(hjh]”hŒtimeout”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhj ubj�)�”}”(hhh]”hÞ)�”}”(hŒ&Request processing timeout in jiffies.”h]”hŒ&Request processing timeout in jiffies.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j(h´Mhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j(h´Mhj+ubja)�”}”(hŒ)``flags`` Zero or more BLK_MQ_F_* flags. ”h]”(jg)�”}”(hŒ ``flags``”h]”jM)�”}”(hjLh]”hŒflags”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MhjFubj�)�”}”(hhh]”hÞ)�”}”(hŒZero or more BLK_MQ_F_* flags.”h]”hŒZero or more BLK_MQ_F_* flags.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jah´Mhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jah´Mhj+ubja)�”}”(hŒU``driver_data`` Pointer to data owned by the block driver that created this tag set. ”h]”(jg)�”}”(hŒ``driver_data``”h]”jM)�”}”(hj…h]”hŒ driver_data”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjubj�)�”}”(hhh]”hÞ)�”}”(hŒDPointer to data owned by the block driver that created this tag set.”h]”hŒDPointer to data owned by the block driver that created this tag set.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jšh´Mhj+ubja)�”}”(hŒR``tags`` Tag sets. One tag set per hardware queue. Has **nr_hw_queues** elements. ”h]”(jg)�”}”(hŒ``tags``”h]”jM)�”}”(hj¿h]”hŒtags”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhj¹ubj�)�”}”(hhh]”hÞ)�”}”(hŒHTag sets. One tag set per hardware queue. Has **nr_hw_queues** elements.”h]”(hŒ.Tag sets. One tag set per hardware queue. Has ”…”�”}”(hjØh²hh³Nh´NubjF)�”}”(hŒ**nr_hw_queues**”h]”hŒ nr_hw_queues”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjØubhŒ elements.”…”�”}”(hjØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÔh´Mhj+ubja)�”}”(hŒc``shared_tags`` Shared set of tags. Has **nr_hw_queues** elements. If set, shared by all **tags**. ”h]”(jg)�”}”(hŒ``shared_tags``”h]”jM)�”}”(hj h]”hŒ shared_tags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M hjubj�)�”}”(hhh]”hÞ)�”}”(hŒRShared set of tags. Has **nr_hw_queues** elements. If set, shared by all **tags**.”h]”(hŒShared set of tags. Has ”…”�”}”(hj$h²hh³Nh´NubjF)�”}”(hŒ**nr_hw_queues**”h]”hŒ nr_hw_queues”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj$ubhŒ! elements. If set, shared by all ”…”�”}”(hj$h²hh³Nh´NubjF)�”}”(hŒ**tags**”h]”hŒtags”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj$ubhŒ.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j h´M hj+ubja)�”}”(hŒ0``tag_list_lock`` Serializes tag_list accesses. ”h]”(jg)�”}”(hŒ``tag_list_lock``”h]”jM)�”}”(hjih]”hŒ tag_list_lock”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M hjcubj�)�”}”(hhh]”hÞ)�”}”(hŒSerializes tag_list accesses.”h]”hŒSerializes tag_list accesses.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j~h´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j~h´M hj+ubja)�”}”(hŒd``tag_list`` List of the request queues that use this tag set. See also request_queue.tag_set_list. ”h]”(jg)�”}”(hŒ ``tag_list``”h]”jM)�”}”(hj¢h]”hŒtag_list”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjœubj�)�”}”(hhh]”hÞ)�”}”(hŒVList of the request queues that use this tag set. See also request_queue.tag_set_list.”h]”hŒVList of the request queues that use this tag set. See also request_queue.tag_set_list.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j·h´Mhj+ubja)�”}”(hŒU``srcu`` Use as lock when type of the request queue is blocking (BLK_MQ_F_BLOCKING). ”h]”(jg)�”}”(hŒ``srcu``”h]”jM)�”}”(hjÜh]”hŒsrcu”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MhjÖubj�)�”}”(hhh]”hÞ)�”}”(hŒKUse as lock when type of the request queue is blocking (BLK_MQ_F_BLOCKING).”h]”hŒKUse as lock when type of the request queue is blocking (BLK_MQ_F_BLOCKING).”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jñh´Mhj+ubja)�”}”(hŒj``tags_srcu`` SRCU used to defer freeing of tags page_list to prevent use-after-free when iterating tags. ”h]”(jg)�”}”(hŒ ``tags_srcu``”h]”jM)�”}”(hjh]”hŒ tags_srcu”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjubj�)�”}”(hhh]”hÞ)�”}”(hŒ[SRCU used to defer freeing of tags page_list to prevent use-after-free when iterating tags.”h]”hŒ[SRCU used to defer freeing of tags page_list to prevent use-after-free when iterating tags.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j+h´Mhj+ubja)�”}”(hŒ```update_nr_hwq_lock`` Synchronize updating nr_hw_queues with add/del disk & switching elevator.”h]”(jg)�”}”(hŒ``update_nr_hwq_lock``”h]”jM)�”}”(hjPh]”hŒupdate_nr_hwq_lock”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MhjJubj�)�”}”(hhh]”hÞ)�”}”(hŒISynchronize updating nr_hw_queues with add/del disk & switching elevator.”h]”hŒISynchronize updating nr_hw_queues with add/del disk & switching elevator.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jeh´Mhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jeh´Mhj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_queue_data (C struct)”Œc.blk_mq_queue_data”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒblk_mq_queue_data”h]”j¹)�”}”(hŒstruct blk_mq_queue_data”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¥h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¥h²hh³j¶h´Mubjâ)�”}”(hŒblk_mq_queue_data”h]”jè)�”}”(hj£h]”hŒblk_mq_queue_data”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÅubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj¥h²hh³j¶h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj¡h²hh³j¶h´Mubah}”(h]”jœah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j¶h´Mhjžh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ(Data about a request inserted in a queue”h]”hŒ(Data about a request inserted in a queue”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M0hjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžh²hh³j¶h´Mubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6jj7jj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒº**Definition**:: struct blk_mq_queue_data { struct request *rq; bool last; }; **Members** ``rq`` Request pointer. ``last`` If it is the last request in the queue.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jF)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj ubhŒ:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M4hjubj€)�”}”(hŒDstruct blk_mq_queue_data { struct request *rq; bool last; };”h]”hŒDstruct blk_mq_queue_data { struct request *rq; bool last; };”…”�”}”hj(sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M6hjubhÞ)�”}”(hŒ **Members**”h]”jF)�”}”(hj9h]”hŒMembers”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M;hjubj\)�”}”(hhh]”(ja)�”}”(hŒ``rq`` Request pointer. ”h]”(jg)�”}”(hŒ``rq``”h]”jM)�”}”(hjXh]”hŒrq”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M3hjRubj�)�”}”(hhh]”hÞ)�”}”(hŒRequest pointer.”h]”hŒRequest pointer.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jmh´M3hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jmh´M3hjOubja)�”}”(hŒ0``last`` If it is the last request in the queue.”h]”(jg)�”}”(hŒ``last``”h]”jM)�”}”(hj‘h]”hŒlast”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M3hj‹ubj�)�”}”(hhh]”hÞ)�”}”(hŒ'If it is the last request in the queue.”h]”hŒ'If it is the last request in the queue.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M4hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¦h´M3hjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_ops (C struct)”Œ c.blk_mq_ops”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ blk_mq_ops”h]”j¹)�”}”(hŒstruct blk_mq_ops”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjçh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M:ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjçh²hh³jøh´M:ubjâ)�”}”(hŒ blk_mq_ops”h]”jè)�”}”(hjåh]”hŒ blk_mq_ops”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjçh²hh³jøh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjãh²hh³jøh´M:ubah}”(h]”jÞah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jøh´M:hjàh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ:Callback functions that implements block driver behaviour.”h]”hŒ:Callback functions that implements block driver behaviour.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M=hj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàh²hh³jøh´M:ubeh}”(h]”h ]”(j0Œstruct”eh"]”h$]”h&]”j5j0j6jEj7jEj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXx **Definition**:: struct blk_mq_ops { blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); void (*commit_rqs)(struct blk_mq_hw_ctx *); void (*queue_rqs)(struct rq_list *rqlist); int (*get_budget)(struct request_queue *); void (*put_budget)(struct request_queue *, int); void (*set_rq_budget_token)(struct request *, int); int (*get_rq_budget_token)(struct request *); enum blk_eh_timer_return (*timeout)(struct request *); int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *); void (*complete)(struct request *); int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int); void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int); int (*init_request)(struct blk_mq_tag_set *set, struct request *, unsigned int, int); void (*exit_request)(struct blk_mq_tag_set *set, struct request *, unsigned int); void (*cleanup_rq)(struct request *); bool (*busy)(struct request_queue *); void (*map_queues)(struct blk_mq_tag_set *set); #ifdef CONFIG_BLK_DEBUG_FS; void (*show_rq)(struct seq_file *m, struct request *rq); #endif; }; **Members** ``queue_rq`` Queue a new request from block IO. ``commit_rqs`` If a driver uses bd->last to judge when to submit requests to hardware, it must define this function. In case of errors that make us stop issuing further requests, this hook serves the purpose of kicking the hardware (which the last request otherwise would have done). ``queue_rqs`` Queue a list of new requests. Driver is guaranteed that each request belongs to the same queue. If the driver doesn't empty the **rqlist** completely, then the rest will be queued individually by the block layer upon return. ``get_budget`` Reserve budget before queue request, once .queue_rq is run, it is driver's responsibility to release the reserved budget. Also we have to handle failure case of .get_budget for avoiding I/O deadlock. ``put_budget`` Release the reserved budget. ``set_rq_budget_token`` store rq's budget token ``get_rq_budget_token`` retrieve rq's budget token ``timeout`` Called on request timeout. ``poll`` Called to poll for completion of a specific tag. ``complete`` Mark the request as complete. ``init_hctx`` Called when the block layer side of a hardware queue has been set up, allowing the driver to allocate/init matching structures. ``exit_hctx`` Ditto for exit/teardown. ``init_request`` Called for every command allocated by the block layer to allow the driver to set up driver specific data. Tag greater than or equal to queue_depth is for setting up flush request. ``exit_request`` Ditto for exit/teardown. ``cleanup_rq`` Called before freeing one request which isn't completed yet, and usually for freeing the driver private data. ``busy`` If set, returns whether or not this queue currently is busy. ``map_queues`` This allows drivers specify their own queue mapping by overriding the setup-time function that builds the mq_map. ``show_rq`` Used by the debugfs implementation to show driver-specific information about a request.”h]”(hÞ)�”}”(hŒ**Definition**::”h]”(jF)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjMubhŒ:”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MAhjIubj€)�”}”(hXYstruct blk_mq_ops { blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); void (*commit_rqs)(struct blk_mq_hw_ctx *); void (*queue_rqs)(struct rq_list *rqlist); int (*get_budget)(struct request_queue *); void (*put_budget)(struct request_queue *, int); void (*set_rq_budget_token)(struct request *, int); int (*get_rq_budget_token)(struct request *); enum blk_eh_timer_return (*timeout)(struct request *); int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *); void (*complete)(struct request *); int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int); void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int); int (*init_request)(struct blk_mq_tag_set *set, struct request *, unsigned int, int); void (*exit_request)(struct blk_mq_tag_set *set, struct request *, unsigned int); void (*cleanup_rq)(struct request *); bool (*busy)(struct request_queue *); void (*map_queues)(struct blk_mq_tag_set *set); #ifdef CONFIG_BLK_DEBUG_FS; void (*show_rq)(struct seq_file *m, struct request *rq); #endif; };”h]”hXYstruct blk_mq_ops { blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); void (*commit_rqs)(struct blk_mq_hw_ctx *); void (*queue_rqs)(struct rq_list *rqlist); int (*get_budget)(struct request_queue *); void (*put_budget)(struct request_queue *, int); void (*set_rq_budget_token)(struct request *, int); int (*get_rq_budget_token)(struct request *); enum blk_eh_timer_return (*timeout)(struct request *); int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *); void (*complete)(struct request *); int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int); void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int); int (*init_request)(struct blk_mq_tag_set *set, struct request *, unsigned int, int); void (*exit_request)(struct blk_mq_tag_set *set, struct request *, unsigned int); void (*cleanup_rq)(struct request *); bool (*busy)(struct request_queue *); void (*map_queues)(struct blk_mq_tag_set *set); #ifdef CONFIG_BLK_DEBUG_FS; void (*show_rq)(struct seq_file *m, struct request *rq); #endif; };”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MChjIubhÞ)�”}”(hŒ **Members**”h]”jF)�”}”(hj{h]”hŒMembers”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MZhjIubj\)�”}”(hhh]”(ja)�”}”(hŒ0``queue_rq`` Queue a new request from block IO. ”h]”(jg)�”}”(hŒ ``queue_rq``”h]”jM)�”}”(hjšh]”hŒqueue_rq”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MChj”ubj�)�”}”(hhh]”hÞ)�”}”(hŒ"Queue a new request from block IO.”h]”hŒ"Queue a new request from block IO.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¯h´MChj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¯h´MChj‘ubja)�”}”(hX``commit_rqs`` If a driver uses bd->last to judge when to submit requests to hardware, it must define this function. In case of errors that make us stop issuing further requests, this hook serves the purpose of kicking the hardware (which the last request otherwise would have done). ”h]”(jg)�”}”(hŒ``commit_rqs``”h]”jM)�”}”(hjÓh]”hŒ commit_rqs”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MMhjÍubj�)�”}”(hhh]”hÞ)�”}”(hX If a driver uses bd->last to judge when to submit requests to hardware, it must define this function. In case of errors that make us stop issuing further requests, this hook serves the purpose of kicking the hardware (which the last request otherwise would have done).”h]”hX If a driver uses bd->last to judge when to submit requests to hardware, it must define this function. In case of errors that make us stop issuing further requests, this hook serves the purpose of kicking the hardware (which the last request otherwise would have done).”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MIhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jèh´MMhj‘ubja)�”}”(hŒï``queue_rqs`` Queue a list of new requests. Driver is guaranteed that each request belongs to the same queue. If the driver doesn't empty the **rqlist** completely, then the rest will be queued individually by the block layer upon return. ”h]”(jg)�”}”(hŒ ``queue_rqs``”h]”jM)�”}”(hj h]”hŒ queue_rqs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MUhjubj�)�”}”(hhh]”hÞ)�”}”(hŒàQueue a list of new requests. Driver is guaranteed that each request belongs to the same queue. If the driver doesn't empty the **rqlist** completely, then the rest will be queued individually by the block layer upon return.”h]”(hŒ‚Queue a list of new requests. Driver is guaranteed that each request belongs to the same queue. If the driver doesn’t empty the ”…”�”}”(hj&h²hh³Nh´NubjF)�”}”(hŒ **rqlist**”h]”hŒrqlist”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj&ubhŒV completely, then the rest will be queued individually by the block layer upon return.”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MRhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j"h´MUhj‘ubja)�”}”(hŒ×``get_budget`` Reserve budget before queue request, once .queue_rq is run, it is driver's responsibility to release the reserved budget. Also we have to handle failure case of .get_budget for avoiding I/O deadlock. ”h]”(jg)�”}”(hŒ``get_budget``”h]”jM)�”}”(hjYh]”hŒ get_budget”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M]hjSubj�)�”}”(hhh]”hÞ)�”}”(hŒÇReserve budget before queue request, once .queue_rq is run, it is driver's responsibility to release the reserved budget. Also we have to handle failure case of .get_budget for avoiding I/O deadlock.”h]”hŒÉReserve budget before queue request, once .queue_rq is run, it is driver’s responsibility to release the reserved budget. Also we have to handle failure case of .get_budget for avoiding I/O deadlock.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MZhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jnh´M]hj‘ubja)�”}”(hŒ,``put_budget`` Release the reserved budget. ”h]”(jg)�”}”(hŒ``put_budget``”h]”jM)�”}”(hj“h]”hŒ put_budget”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mbhj�ubj�)�”}”(hhh]”hÞ)�”}”(hŒRelease the reserved budget.”h]”hŒRelease the reserved budget.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¨h´Mbhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¨h´Mbhj‘ubja)�”}”(hŒ0``set_rq_budget_token`` store rq's budget token ”h]”(jg)�”}”(hŒ``set_rq_budget_token``”h]”jM)�”}”(hjÌh]”hŒset_rq_budget_token”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MghjÆubj�)�”}”(hhh]”hÞ)�”}”(hŒstore rq's budget token”h]”hŒstore rq’s budget token”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jáh´Mghjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jáh´Mghj‘ubja)�”}”(hŒ3``get_rq_budget_token`` retrieve rq's budget token ”h]”(jg)�”}”(hŒ``get_rq_budget_token``”h]”jM)�”}”(hjh]”hŒget_rq_budget_token”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mkhjÿubj�)�”}”(hhh]”hÞ)�”}”(hŒretrieve rq's budget token”h]”hŒretrieve rq’s budget token”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Mkhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jh´Mkhj‘ubja)�”}”(hŒ'``timeout`` Called on request timeout. ”h]”(jg)�”}”(hŒ ``timeout``”h]”jM)�”}”(hj>h]”hŒtimeout”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mphj8ubj�)�”}”(hhh]”hÞ)�”}”(hŒCalled on request timeout.”h]”hŒCalled on request timeout.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jSh´MphjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jSh´Mphj‘ubja)�”}”(hŒ:``poll`` Called to poll for completion of a specific tag. ”h]”(jg)�”}”(hŒ``poll``”h]”jM)�”}”(hjwh]”hŒpoll”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Muhjqubj�)�”}”(hhh]”hÞ)�”}”(hŒ0Called to poll for completion of a specific tag.”h]”hŒ0Called to poll for completion of a specific tag.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŒh´Muhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jŒh´Muhj‘ubja)�”}”(hŒ+``complete`` Mark the request as complete. ”h]”(jg)�”}”(hŒ ``complete``”h]”jM)�”}”(hj°h]”hŒcomplete”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mzhjªubj�)�”}”(hhh]”hÞ)�”}”(hŒMark the request as complete.”h]”hŒMark the request as complete.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅh´MzhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÅh´Mzhj‘ubja)�”}”(hŒŽ``init_hctx`` Called when the block layer side of a hardware queue has been set up, allowing the driver to allocate/init matching structures. ”h]”(jg)�”}”(hŒ ``init_hctx``”h]”jM)�”}”(hjéh]”hŒ init_hctx”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M�hjãubj�)�”}”(hhh]”hÞ)�”}”(hŒCalled when the block layer side of a hardware queue has been set up, allowing the driver to allocate/init matching structures.”h]”hŒCalled when the block layer side of a hardware queue has been set up, allowing the driver to allocate/init matching structures.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jþh´M�hj‘ubja)�”}”(hŒ'``exit_hctx`` Ditto for exit/teardown. ”h]”(jg)�”}”(hŒ ``exit_hctx``”h]”jM)�”}”(hj#h]”hŒ exit_hctx”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M…hjubj�)�”}”(hhh]”hÞ)�”}”(hŒDitto for exit/teardown.”h]”hŒDitto for exit/teardown.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j8h´M…hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j8h´M…hj‘ubja)�”}”(hŒÆ``init_request`` Called for every command allocated by the block layer to allow the driver to set up driver specific data. Tag greater than or equal to queue_depth is for setting up flush request. ”h]”(jg)�”}”(hŒ``init_request``”h]”jM)�”}”(hj\h]”hŒ init_request”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŽhjVubj�)�”}”(hhh]”(hÞ)�”}”(hŒiCalled for every command allocated by the block layer to allow the driver to set up driver specific data.”h]”hŒiCalled for every command allocated by the block layer to allow the driver to set up driver specific data.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŠhjrubhÞ)�”}”(hŒITag greater than or equal to queue_depth is for setting up flush request.”h]”hŒITag greater than or equal to queue_depth is for setting up flush request.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M�hjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jqh´MŽhj‘ubja)�”}”(hŒ*``exit_request`` Ditto for exit/teardown. ”h]”(jg)�”}”(hŒ``exit_request``”h]”jM)�”}”(hj¥h]”hŒ exit_request”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M“hjŸubj�)�”}”(hhh]”hÞ)�”}”(hŒDitto for exit/teardown.”h]”hŒDitto for exit/teardown.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jºh´M“hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jºh´M“hj‘ubja)�”}”(hŒ}``cleanup_rq`` Called before freeing one request which isn't completed yet, and usually for freeing the driver private data. ”h]”(jg)�”}”(hŒ``cleanup_rq``”h]”jM)�”}”(hjÞh]”hŒ cleanup_rq”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MšhjØubj�)�”}”(hhh]”hÞ)�”}”(hŒmCalled before freeing one request which isn't completed yet, and usually for freeing the driver private data.”h]”hŒoCalled before freeing one request which isn’t completed yet, and usually for freeing the driver private data.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M™hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jóh´Mšhj‘ubja)�”}”(hŒF``busy`` If set, returns whether or not this queue currently is busy. ”h]”(jg)�”}”(hŒ``busy``”h]”jM)�”}”(hjh]”hŒbusy”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MŸhjubj�)�”}”(hhh]”hÞ)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj:ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjàh²hh³jñh´M7ubhŒdesc_parameterlist”“”)�”}”(hŒ(struct request *rq)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjYubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjYubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j}Œmodname”NŒ classname”Njj )�”}”j#]”j'Œc.blk_mq_rq_state”†”asbuh1hhjYubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjYubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j§hjYubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjSubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjàh²hh³jñh´M7ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjÜh²hh³jñh´M7ubah}”(h]”j×ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jñh´M7hjÙh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ+read the current MQ_RQ_* state of a request”h]”hŒ+read the current MQ_RQ_* state of a request”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M7hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙh²hh³jñh´M7ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6júj7júj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒ8**Parameters** ``struct request *rq`` target request.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M;hjþubj\)�”}”(hhh]”ja)�”}”(hŒ&``struct request *rq`` target request.”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj#h]”hŒstruct request *rq”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M=hjubj�)�”}”(hhh]”hÞ)�”}”(hŒtarget request.”h]”hŒtarget request.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M8hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j8h´M=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ blk_mq_add_to_batch (C function)”Œc.blk_mq_add_to_batch”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ‚bool blk_mq_add_to_batch (struct request *req, struct io_comp_batch *iob, bool is_error, void (*complete)(struct io_comp_batch *))”h]”j¹)�”}”(hŒ€bool blk_mq_add_to_batch(struct request *req, struct io_comp_batch *iob, bool is_error, void (*complete)(struct io_comp_batch*))”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j}hjyh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MtubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjyh²hh³jŽh´Mtubjâ)�”}”(hŒblk_mq_add_to_batch”h]”jè)�”}”(hŒblk_mq_add_to_batch”h]”hŒblk_mq_add_to_batch”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj�ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjyh²hh³jŽh´MtubjR)�”}”(hŒh(struct request *req, struct io_comp_batch *iob, bool is_error, void (*complete)(struct io_comp_batch*))”h]”(jX)�”}”(hŒstruct request *req”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¹ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¹ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÝŒmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jj£sbŒc.blk_mq_add_to_batch”†”asbuh1hhj¹ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¹ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¹ubjè)�”}”(hŒreq”h]”hŒreq”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjµubjX)�”}”(hŒstruct io_comp_batch *iob”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj+ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj+ubh)�”}”(hhh]”jè)�”}”(hŒ io_comp_batch”h]”hŒ io_comp_batch”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jOŒmodname”NŒ classname”Njj )�”}”j#]”j÷Œc.blk_mq_add_to_batch”†”asbuh1hhj+ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj+ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj+ubjè)�”}”(hŒiob”h]”hŒiob”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjµubjX)�”}”(hŒ bool is_error”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj›ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj›ubjè)�”}”(hŒis_error”h]”hŒis_error”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjµubjX)�”}”(hŒ'void (*complete)(struct io_comp_batch*)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjÏubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÏubj¨)�”}”(hŒ(”h]”hŒ(”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubjè)�”}”(hŒcomplete”h]”hŒcomplete”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÏubj¨)�”}”(hŒ)”h]”hŒ)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubj¨)�”}”(hjñh]”hŒ(”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubj¿)�”}”(hjh]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÏubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÏubh)�”}”(hhh]”jè)�”}”(hŒ io_comp_batch”h]”hŒ io_comp_batch”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jSŒmodname”NŒ classname”Njj )�”}”j#]”j÷Œc.blk_mq_add_to_batch”†”asbuh1hhjÏubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubj¨)�”}”(hjh]”hŒ)”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjµubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjyh²hh³jŽh´Mtubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjuh²hh³jŽh´Mtubah}”(h]”jpah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jŽh´Mthjrh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ%add a request to the completion batch”h]”hŒ%add a request to the completion batch”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mthj¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrh²hh³jŽh´Mtubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j½j7j½j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXØ**Parameters** ``struct request *req`` The request to add to batch ``struct io_comp_batch *iob`` The batch to add the request ``bool is_error`` Specify true if the request failed with an error ``void (*complete)(struct io_comp_batch *)`` The completaion handler for the request **Description** Batched completions only work when there is no I/O error and no special ->end_io handler. **Return** true when the request was added to the batch, otherwise false”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjÇh]”hŒ Parameters”…”�”•Ç}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MxhjÁubj\)�”}”(hhh]”(ja)�”}”(hŒ4``struct request *req`` The request to add to batch ”h]”(jg)�”}”(hŒ``struct request *req``”h]”jM)�”}”(hjæh]”hŒstruct request *req”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Muhjàubj�)�”}”(hhh]”hÞ)�”}”(hŒThe request to add to batch”h]”hŒThe request to add to batch”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jûh´Muhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jûh´MuhjÝubja)�”}”(hŒ;``struct io_comp_batch *iob`` The batch to add the request ”h]”(jg)�”}”(hŒ``struct io_comp_batch *iob``”h]”jM)�”}”(hj h]”hŒstruct io_comp_batch *iob”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mvhj ubj�)�”}”(hhh]”hÞ)�”}”(hŒThe batch to add the request”h]”hŒThe batch to add the request”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j4 h´Mvhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j4 h´MvhjÝubja)�”}”(hŒC``bool is_error`` Specify true if the request failed with an error ”h]”(jg)�”}”(hŒ``bool is_error``”h]”jM)�”}”(hjX h]”hŒ bool is_error”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MwhjR ubj�)�”}”(hhh]”hÞ)�”}”(hŒ0Specify true if the request failed with an error”h]”hŒ0Specify true if the request failed with an error”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jm h´Mwhjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjR ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jm h´MwhjÝubja)�”}”(hŒU``void (*complete)(struct io_comp_batch *)`` The completaion handler for the request ”h]”(jg)�”}”(hŒ,``void (*complete)(struct io_comp_batch *)``”h]”jM)�”}”(hj‘ h]”hŒ(void (*complete)(struct io_comp_batch *)”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mxhj‹ ubj�)�”}”(hhh]”hÞ)�”}”(hŒ'The completaion handler for the request”h]”hŒ'The completaion handler for the request”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¦ h´Mxhj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j¦ h´MxhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÁubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjÌ h]”hŒ Description”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MzhjÁubhÞ)�”}”(hŒYBatched completions only work when there is no I/O error and no special ->end_io handler.”h]”hŒYBatched completions only work when there is no I/O error and no special ->end_io handler.”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MyhjÁubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hjó h]”hŒReturn”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M|hjÁubhÞ)�”}”(hŒ=true when the request was added to the batch, otherwise false”h]”hŒ=true when the request was added to the batch, otherwise false”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´M}hjÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_rq_from_pdu (C function)”Œc.blk_mq_rq_from_pdu”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ/struct request * blk_mq_rq_from_pdu (void *pdu)”h]”j¹)�”}”(hŒ-struct request *blk_mq_rq_from_pdu(void *pdu)”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj8!h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj4!h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MáubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF!h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj4!h²hh³jE!h´Máubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjW!h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjT!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jY!Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jŒblk_mq_rq_from_pdu”sbŒc.blk_mq_rq_from_pdu”†”asbuh1hhj4!h²hh³jE!h´MáubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx!h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj4!h²hh³jE!h´Máubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj†!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4!h²hh³jE!h´Máubjâ)�”}”(hŒblk_mq_rq_from_pdu”h]”jè)�”}”(hju!h]”hŒblk_mq_rq_from_pdu”…”�”}”(hj—!h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj“!ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj4!h²hh³jE!h´MáubjR)�”}”(hŒ (void *pdu)”h]”jX)�”}”(hŒ void *pdu”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj²!h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj®!ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ!h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj®!ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjÎ!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®!ubjè)�”}”(hŒpdu”h]”hŒpdu”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj®!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjª!ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj4!h²hh³jE!h´Máubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj0!h²hh³jE!h´Máubah}”(h]”j+!ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jE!h´Máhj-!h²hubj)�”}”(hhh]”hÞ)�”}”(hŒcast a PDU to a request”h]”hŒcast a PDU to a request”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Máhj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-!h²hh³jE!h´Máubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j"j7j"j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒä**Parameters** ``void *pdu`` the PDU (Protocol Data Unit) to be casted **Return** request **Description** Driver command data is immediately after the request. So subtract request size to get back to the original request.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj'"h]”hŒ Parameters”…”�”}”(hj)"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj%"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Måhj!"ubj\)�”}”(hhh]”ja)�”}”(hŒ8``void *pdu`` the PDU (Protocol Data Unit) to be casted ”h]”(jg)�”}”(hŒ ``void *pdu``”h]”jM)�”}”(hjF"h]”hŒ void *pdu”…”�”}”(hjH"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjD"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mâhj@"ubj�)�”}”(hhh]”hÞ)�”}”(hŒ)the PDU (Protocol Data Unit) to be casted”h]”hŒ)the PDU (Protocol Data Unit) to be casted”…”�”}”(hj_"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j["h´Mâhj\"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj@"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j["h´Mâhj="ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj!"ubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hj�"h]”hŒReturn”…”�”}”(hjƒ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mähj!"ubhÞ)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj—"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mähj!"ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj¨"h]”hŒ Description”…”�”}”(hjª"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj¦"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mæhj!"ubhÞ)�”}”(hŒsDriver command data is immediately after the request. So subtract request size to get back to the original request.”h]”hŒsDriver command data is immediately after the request. So subtract request size to get back to the original request.”…”�”}”(hj¾"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Måhj!"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_rq_to_pdu (C function)”Œc.blk_mq_rq_to_pdu”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ,void * blk_mq_rq_to_pdu (struct request *rq)”h]”j¹)�”}”(hŒ*void *blk_mq_rq_to_pdu(struct request *rq)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjí"h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjé"h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MïubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü"h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjé"h²hh³jû"h´Mïubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjé"h²hh³jû"h´Mïubjâ)�”}”(hŒblk_mq_rq_to_pdu”h]”jè)�”}”(hŒblk_mq_rq_to_pdu”h]”hŒblk_mq_rq_to_pdu”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj#ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjé"h²hh³jû"h´MïubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj7#h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj3#ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD#h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj3#ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjU#h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjR#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jW#Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jj#sbŒc.blk_mq_rq_to_pdu”†”asbuh1hhj3#ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju#h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj3#ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjƒ#h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3#ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj3#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj/#ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjé"h²hh³jû"h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjå"h²hh³jû"h´Mïubah}”(h]”jà"ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jû"h´Mïhjâ"h²hubj)�”}”(hhh]”hÞ)�”}”(hŒcast a request to a PDU”h]”hŒcast a request to a PDU”…”�”}”(hjº#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mïhj·#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ"h²hh³jû"h´Mïubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÒ#j7jÒ#j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒÈ**Parameters** ``struct request *rq`` the request to be casted **Return** pointer to the PDU **Description** Driver command data is immediately after the request. So add request to get the PDU.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjÜ#h]”hŒ Parameters”…”�”}”(hjÞ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÚ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MóhjÖ#ubj\)�”}”(hhh]”ja)�”}”(hŒ0``struct request *rq`` the request to be casted ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hjû#h]”hŒstruct request *rq”…”�”}”(hjý#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjù#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mðhjõ#ubj�)�”}”(hhh]”hÞ)�”}”(hŒthe request to be casted”h]”hŒthe request to be casted”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j$h´Mðhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjõ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j$h´Mðhjò#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÖ#ubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hj6$h]”hŒReturn”…”�”}”(hj8$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj4$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MòhjÖ#ubhÞ)�”}”(hŒpointer to the PDU”h]”hŒpointer to the PDU”…”�”}”(hjL$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MòhjÖ#ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj]$h]”hŒ Description”…”�”}”(hj_$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj[$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MôhjÖ#ubhÞ)�”}”(hŒTDriver command data is immediately after the request. So add request to get the PDU.”h]”hŒTDriver command data is immediately after the request. So add request to get the PDU.”…”�”}”(hjs$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MóhjÖ#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_rq_nr_bvec (C function)”Œc.blk_rq_nr_bvec”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ0unsigned int blk_rq_nr_bvec (struct request *rq)”h]”j¹)�”}”(hŒ/unsigned int blk_rq_nr_bvec(struct request *rq)”h]”(j~)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¢$h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjž$h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÌubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±$h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjž$h²hh³j°$h´MÌubj~)�”}”(hŒint”h]”hŒint”…”�”}”(hj¿$h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjž$h²hh³j°$h´MÌubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ$h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjž$h²hh³j°$h´MÌubjâ)�”}”(hŒblk_rq_nr_bvec”h]”jè)�”}”(hŒblk_rq_nr_bvec”h]”hŒblk_rq_nr_bvec”…”�”}”(hjß$h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÛ$ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjž$h²hh³j°$h´MÌubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjû$h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj÷$ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj÷$ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j%Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjá$sbŒc.blk_rq_nr_bvec”†”asbuh1hhj÷$ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9%h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj÷$ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjG%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷$ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjT%h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj÷$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjó$ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjž$h²hh³j°$h´MÌubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjš$h²hh³j°$h´MÌubah}”(h]”j•$ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j°$h´MÌhj—$h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ#return number of bvecs in a request”h]”hŒ#return number of bvecs in a request”…”�”}”(hj~%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÌhj{%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—$h²hh³j°$h´MÌubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j–%j7j–%j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒv**Parameters** ``struct request *rq`` request to calculate bvecs for **Description** Returns the number of bvecs.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj %h]”hŒ Parameters”…”�”}”(hj¢%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjž%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÐhjš%ubj\)�”}”(hhh]”ja)�”}”(hŒ6``struct request *rq`` request to calculate bvecs for ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj¿%h]”hŒstruct request *rq”…”�”}”(hjÁ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj½%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÍhj¹%ubj�)�”}”(hhh]”hÞ)�”}”(hŒrequest to calculate bvecs for”h]”hŒrequest to calculate bvecs for”…”�”}”(hjØ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÔ%h´MÍhjÕ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¹%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÔ%h´MÍhj¶%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjš%ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjú%h]”hŒ Description”…”�”}”(hjü%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjø%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÏhjš%ubhÞ)�”}”(hŒReturns the number of bvecs.”h]”hŒReturns the number of bvecs.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MÎhjš%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ%blk_rq_passthrough_stats (C function)”Œc.blk_rq_passthrough_stats”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒKbool blk_rq_passthrough_stats (struct request *rq, struct request_queue *q)”h]”j¹)�”}”(hŒJbool blk_rq_passthrough_stats(struct request *rq, struct request_queue *q)”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hj?&h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj;&h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MèubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM&h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj;&h²hh³jL&h´Mèubjâ)�”}”(hŒblk_rq_passthrough_stats”h]”jè)�”}”(hŒblk_rq_passthrough_stats”h]”hŒblk_rq_passthrough_stats”…”�”}”(hj_&h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj[&ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj;&h²hh³jL&h´MèubjR)�”}”(hŒ-(struct request *rq, struct request_queue *q)”h]”(jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj{&h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjw&ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ&h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjw&ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj™&h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj–&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j›&Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jja&sbŒc.blk_rq_passthrough_stats”†”asbuh1hhjw&ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹&h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjw&ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjÇ&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjw&ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjÔ&h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjw&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjs&ubjX)�”}”(hŒstruct request_queue *q”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjí&h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjé&ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú&h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjé&ubh)�”}”(hhh]”jè)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j 'Œmodname”NŒ classname”Njj )�”}”j#]”jµ&Œc.blk_rq_passthrough_stats”†”asbuh1hhjé&ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)'h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjé&ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj7'h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjé&ubjè)�”}”(hŒq”h]”hŒq”…”�”}”(hjD'h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjé&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjs&ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj;&h²hh³jL&h´Mèubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj7&h²hh³jL&h´Mèubah}”(h]”j2&ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jL&h´Mèhj4&h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ*check if this request should account stats”h]”hŒ*check if this request should account stats”…”�”}”(hjn'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mèhjk'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4&h²hh³jL&h´Mèubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j†'j7j†'j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hX**Parameters** ``struct request *rq`` request to check ``struct request_queue *q`` the queue accumulating the stats **Description** Note, **q** does not necessarily need to be the request_queue that provides **rq**. **Return** true if stats should be accounted.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj�'h]”hŒ Parameters”…”�”}”(hj’'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjŽ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MìhjŠ'ubj\)�”}”(hhh]”(ja)�”}”(hŒ(``struct request *rq`` request to check ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj¯'h]”hŒstruct request *rq”…”�”}”(hj±'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj­'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Méhj©'ubj�)�”}”(hhh]”hÞ)�”}”(hŒrequest to check”h]”hŒrequest to check”…”�”}”(hjÈ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÄ'h´MéhjÅ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj©'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÄ'h´Méhj¦'ubja)�”}”(hŒ=``struct request_queue *q`` the queue accumulating the stats ”h]”(jg)�”}”(hŒ``struct request_queue *q``”h]”jM)�”}”(hjè'h]”hŒstruct request_queue *q”…”�”}”(hjê'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjæ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´Mêhjâ'ubj�)�”}”(hhh]”hÞ)�”}”(hŒ the queue accumulating the stats”h]”hŒ the queue accumulating the stats”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jý'h´Mêhjþ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjâ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jý'h´Mêhj¦'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjŠ'ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj#(h]”hŒ Description”…”�”}”(hj%(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj!(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MìhjŠ'ubhÞ)�”}”(hŒSNote, **q** does not necessarily need to be the request_queue that provides **rq**.”h]”(hŒNote, ”…”�”}”(hj9(h²hh³Nh´NubjF)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj9(ubhŒA does not necessarily need to be the request_queue that provides ”…”�”}”(hj9(h²hh³Nh´NubjF)�”}”(hŒ**rq**”h]”hŒrq”…”�”}”(hjS(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj9(ubhŒ.”…”�”}”(hj9(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MëhjŠ'ubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hjn(h]”hŒReturn”…”�”}”(hjp(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjl(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MîhjŠ'ubhÞ)�”}”(hŒ"true if stats should be accounted.”h]”hŒ"true if stats should be accounted.”…”�”}”(hj„(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒT/var/lib/git/docbuild/linux/Documentation/block/blk-mq:151: ./include/linux/blk-mq.h”h´MïhjŠ'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ%blk_mq_wait_quiesce_done (C function)”Œc.blk_mq_wait_quiesce_done”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ:void blk_mq_wait_quiesce_done (struct blk_mq_tag_set *set)”h]”j¹)�”}”(hŒ9void blk_mq_wait_quiesce_done(struct blk_mq_tag_set *set)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³(h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj¯(h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ(h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¯(h²hh³jÁ(h´Mubjâ)�”}”(hŒblk_mq_wait_quiesce_done”h]”jè)�”}”(hŒblk_mq_wait_quiesce_done”h]”hŒblk_mq_wait_quiesce_done”…”�”}”(hjÔ(h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÐ(ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj¯(h²hh³jÁ(h´MubjR)�”}”(hŒ(struct blk_mq_tag_set *set)”h]”jX)�”}”(hŒstruct blk_mq_tag_set *set”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjð(h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjì(ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý(h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjì(ubh)�”}”(hhh]”jè)�”}”(hŒblk_mq_tag_set”h]”hŒblk_mq_tag_set”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj )ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j)Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjÖ(sbŒc.blk_mq_wait_quiesce_done”†”asbuh1hhjì(ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.)h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjì(ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj<)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjì(ubjè)�”}”(hŒset”h]”hŒset”…”�”}”(hjI)h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjì(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjè(ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj¯(h²hh³jÁ(h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj«(h²hh³jÁ(h´Mubah}”(h]”j¦(ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÁ(h´Mhj¨(h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ&wait until in-progress quiesce is done”h]”hŒ&wait until in-progress quiesce is done”…”�”}”(hjs)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mhjp)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨(h²hh³jÁ(h´Mubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j‹)j7j‹)j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXN**Parameters** ``struct blk_mq_tag_set *set`` tag_set to wait on **Note** it is driver's responsibility for making sure that quiesce has been started on or more of the request_queues of the tag_set. This function only waits for the quiesce on those request_queues that had the quiesce flag set using blk_mq_quiesce_queue_nowait.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj•)h]”hŒ Parameters”…”�”}”(hj—)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj“)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mhj�)ubj\)�”}”(hhh]”ja)�”}”(hŒ2``struct blk_mq_tag_set *set`` tag_set to wait on ”h]”(jg)�”}”(hŒ``struct blk_mq_tag_set *set``”h]”jM)�”}”(hj´)h]”hŒstruct blk_mq_tag_set *set”…”�”}”(hj¶)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj²)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mhj®)ubj�)�”}”(hhh]”hÞ)�”}”(hŒtag_set to wait on”h]”hŒtag_set to wait on”…”�”}”(hjÍ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÉ)h´MhjÊ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj®)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÉ)h´Mhj«)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj�)ubhÞ)�”}”(hŒ**Note**”h]”jF)�”}”(hjï)h]”hŒNote”…”�”}”(hjñ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjí)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mhj�)ubhÞ)�”}”(hŒÿit is driver's responsibility for making sure that quiesce has been started on or more of the request_queues of the tag_set. This function only waits for the quiesce on those request_queues that had the quiesce flag set using blk_mq_quiesce_queue_nowait.”h]”hXit is driver’s responsibility for making sure that quiesce has been started on or more of the request_queues of the tag_set. This function only waits for the quiesce on those request_queues that had the quiesce flag set using blk_mq_quiesce_queue_nowait.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mhj�)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ!blk_mq_quiesce_queue (C function)”Œc.blk_mq_quiesce_queue”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ3void blk_mq_quiesce_queue (struct request_queue *q)”h]”j¹)�”}”(hŒ2void blk_mq_quiesce_queue(struct request_queue *q)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4*h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj0*h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M#ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC*h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj0*h²hh³jB*h´M#ubjâ)�”}”(hŒblk_mq_quiesce_queue”h]”jè)�”}”(hŒblk_mq_quiesce_queue”h]”hŒblk_mq_quiesce_queue”…”�”}”(hjU*h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjQ*ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj0*h²hh³jB*h´M#ubjR)�”}”(hŒ(struct request_queue *q)”h]”jX)�”}”(hŒstruct request_queue *q”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjq*h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjm*ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~*h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjm*ubh)�”}”(hhh]”jè)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjŒ*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j‘*Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjW*sbŒc.blk_mq_quiesce_queue”†”asbuh1hhjm*ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯*h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjm*ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj½*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm*ubjè)�”}”(hjF'h]”hŒq”…”�”}”(hjÊ*h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjm*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhji*ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj0*h²hh³jB*h´M#ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj,*h²hh³jB*h´M#ubah}”(h]”j'*ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jB*h´M#hj)*h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ/wait until all ongoing dispatches have finished”h]”hŒ/wait until all ongoing dispatches have finished”…”�”}”(hjó*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M#hjð*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)*h²hh³jB*h´M#ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j +j7j +j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hX%**Parameters** ``struct request_queue *q`` request queue. **Note** this function does not prevent that the struct request end_io() callback function is invoked. Once this function is returned, we make sure no dispatch can happen until the queue is unquiesced via blk_mq_unquiesce_queue().”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj+h]”hŒ Parameters”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M'hj+ubj\)�”}”(hhh]”ja)�”}”(hŒ+``struct request_queue *q`` request queue. ”h]”(jg)�”}”(hŒ``struct request_queue *q``”h]”jM)�”}”(hj4+h]”hŒstruct request_queue *q”…”�”}”(hj6+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj2+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M$hj.+ubj�)�”}”(hhh]”hÞ)�”}”(hŒrequest queue.”h]”hŒrequest queue.”…”�”}”(hjM+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jI+h´M$hjJ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj.+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jI+h´M$hj++ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj+ubhÞ)�”}”(hŒ**Note**”h]”jF)�”}”(hjo+h]”hŒNote”…”�”}”(hjq+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjm+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M&hj+ubhÞ)�”}”(hŒÝthis function does not prevent that the struct request end_io() callback function is invoked. Once this function is returned, we make sure no dispatch can happen until the queue is unquiesced via blk_mq_unquiesce_queue().”h]”hŒÝthis function does not prevent that the struct request end_io() callback function is invoked. Once this function is returned, we make sure no dispatch can happen until the queue is unquiesced via blk_mq_unquiesce_queue().”…”�”}”(hj…+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M&hj+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_update_request (C function)”Œc.blk_update_request”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒXbool blk_update_request (struct request *req, blk_status_t error, unsigned int nr_bytes)”h]”j¹)�”}”(hŒWbool blk_update_request(struct request *req, blk_status_t error, unsigned int nr_bytes)”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hj´+h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj°+h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¥ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj°+h²hh³jÁ+h´M¥ubjâ)�”}”(hŒblk_update_request”h]”jè)�”}”(hŒblk_update_request”h]”hŒblk_update_request”…”�”}”(hjÔ+h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÐ+ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj°+h²hh³jÁ+h´M¥ubjR)�”}”(hŒ@(struct request *req, blk_status_t error, unsigned int nr_bytes)”h]”(jX)�”}”(hŒstruct request *req”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjð+h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjì+ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý+h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjì+ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj ,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j,Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjÖ+sbŒc.blk_update_request”†”asbuh1hhjì+ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.,h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjì+ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj<,h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjì+ubjè)�”}”(hŒreq”h]”hŒreq”…”�”}”(hjI,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjì+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjè+ubjX)�”}”(hŒblk_status_t error”h]”(h)�”}”(hhh]”jè)�”}”(hŒ blk_status_t”h]”hŒ blk_status_t”…”�”}”(hje,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjb,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jg,Œmodname”NŒ classname”Njj )�”}”j#]”j*,Œc.blk_update_request”†”asbuh1hhj^,ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ,h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj^,ubjè)�”}”(hŒerror”h]”hŒerror”…”�”}”(hj‘,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj^,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjè+ubjX)�”}”(hŒunsigned int nr_bytes”h]”(j~)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjª,h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj¦,ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸,h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¦,ubj~)�”}”(hŒint”h]”hŒint”…”�”}”(hjÆ,h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj¦,ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ,h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¦,ubjè)�”}”(hŒnr_bytes”h]”hŒnr_bytes”…”�”}”(hjâ,h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¦,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjè+ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj°+h²hh³jÁ+h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj¬+h²hh³jÁ+h´M¥ubah}”(h]”j§+ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÁ+h´M¥hj©+h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ6Complete multiple bytes without completing the request”h]”hŒ6Complete multiple bytes without completing the request”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¥hj -h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©+h²hh³jÁ+h´M¥ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j$-j7j$-j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hX **Parameters** ``struct request *req`` the request being processed ``blk_status_t error`` block status code ``unsigned int nr_bytes`` number of bytes to complete for **req** **Description** Ends I/O on a number of bytes attached to **req**, but doesn't complete the request structure even if **req** doesn't have leftover. If **req** has leftover, sets it up for the next range of segments. Passing the result of blk_rq_bytes() as **nr_bytes** guarantees ``false`` return from this function. **Note** The RQF_SPECIAL_PAYLOAD flag is ignored on purpose in this function except in the consistency check at the end of this function. **Return** ``false`` - this request doesn't have any more data ``true`` - this request has more data”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj.-h]”hŒ Parameters”…”�”}”(hj0-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj,-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M©hj(-ubj\)�”}”(hhh]”(ja)�”}”(hŒ4``struct request *req`` the request being processed ”h]”(jg)�”}”(hŒ``struct request *req``”h]”jM)�”}”(hjM-h]”hŒstruct request *req”…”�”}”(hjO-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjK-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¦hjG-ubj�)�”}”(hhh]”hÞ)�”}”(hŒthe request being processed”h]”hŒthe request being processed”…”�”}”(hjf-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jb-h´M¦hjc-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjG-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jb-h´M¦hjD-ubja)�”}”(hŒ)``blk_status_t error`` block status code ”h]”(jg)�”}”(hŒ``blk_status_t error``”h]”jM)�”}”(hj†-h]”hŒblk_status_t error”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj„-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M§hj€-ubj�)�”}”(hhh]”hÞ)�”}”(hŒblock status code”h]”hŒblock status code”…”�”}”(hjŸ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j›-h´M§hjœ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj€-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j›-h´M§hjD-ubja)�”}”(hŒB``unsigned int nr_bytes`` number of bytes to complete for **req** ”h]”(jg)�”}”(hŒ``unsigned int nr_bytes``”h]”jM)�”}”(hj¿-h]”hŒunsigned int nr_bytes”…”�”}”(hjÁ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj½-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¨hj¹-ubj�)�”}”(hhh]”hÞ)�”}”(hŒ'number of bytes to complete for **req**”h]”(hŒ number of bytes to complete for ”…”�”}”(hjØ-h²hh³Nh´NubjF)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hjà-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjØ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÔ-h´M¨hjÕ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¹-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÔ-h´M¨hjD-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj(-ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj.h]”hŒ Description”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mªhj(-ubhŒ block_quote”“”)�”}”(hX/Ends I/O on a number of bytes attached to **req**, but doesn't complete the request structure even if **req** doesn't have leftover. If **req** has leftover, sets it up for the next range of segments. Passing the result of blk_rq_bytes() as **nr_bytes** guarantees ``false`` return from this function. ”h]”(hÞ)�”}”(hŒÈEnds I/O on a number of bytes attached to **req**, but doesn't complete the request structure even if **req** doesn't have leftover. If **req** has leftover, sets it up for the next range of segments.”h]”(hŒ*Ends I/O on a number of bytes attached to ”…”�”}”(hj$.h²hh³Nh´NubjF)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hj,.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj$.ubhŒ7, but doesn’t complete the request structure even if ”…”�”}”(hj$.h²hh³Nh´NubjF)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hj>.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj$.ubhŒ doesn’t have leftover. If ”…”�”}”(hj$.h²hh³Nh´NubjF)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hjP.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj$.ubhŒ9 has leftover, sets it up for the next range of segments.”…”�”}”(hj$.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mªhj .ubhÞ)�”}”(hŒdPassing the result of blk_rq_bytes() as **nr_bytes** guarantees ``false`` return from this function.”h]”(hŒ(Passing the result of blk_rq_bytes() as ”…”�”}”(hji.h²hh³Nh´NubjF)�”}”(hŒ **nr_bytes**”h]”hŒnr_bytes”…”�”}”(hjq.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhji.ubhŒ guarantees ”…”�”}”(hji.h²hh³Nh´NubjM)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjƒ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhji.ubhŒ return from this function.”…”�”}”(hji.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M®hj .ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j.h³jh.h´Mªhj(-ubhÞ)�”}”(hŒ**Note**”h]”jF)�”}”(hj¤.h]”hŒNote”…”�”}”(hj¦.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj¢.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M±hj(-ubj.)�”}”(hŒ�The RQF_SPECIAL_PAYLOAD flag is ignored on purpose in this function except in the consistency check at the end of this function. ”h]”hÞ)�”}”(hŒ€The RQF_SPECIAL_PAYLOAD flag is ignored on purpose in this function except in the consistency check at the end of this function.”h]”hŒ€The RQF_SPECIAL_PAYLOAD flag is ignored on purpose in this function except in the consistency check at the end of this function.”…”�”}”(hj¾.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M²hjº.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j.h³jÌ.h´M²hj(-ubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hjÕ.h]”hŒReturn”…”�”}”(hj×.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÓ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mµhj(-ubhÞ)�”}”(hŒZ``false`` - this request doesn't have any more data ``true`` - this request has more data”h]”(jM)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjë.ubhŒ- - this request doesn’t have any more data ”…”�”}”(hjë.h²hh³Nh´NubjM)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjë.ubhŒ - this request has more data”…”�”}”(hjë.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¶hj(-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ$blk_mq_complete_request (C function)”Œc.blk_mq_complete_request”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ1void blk_mq_complete_request (struct request *rq)”h]”j¹)�”}”(hŒ0void blk_mq_complete_request(struct request *rq)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:/h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj6/h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M$ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI/h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj6/h²hh³jH/h´M$ubjâ)�”}”(hŒblk_mq_complete_request”h]”jè)�”}”(hŒblk_mq_complete_request”h]”hŒblk_mq_complete_request”…”�”}”(hj[/h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjW/ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj6/h²hh³jH/h´M$ubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjw/h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjs/ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„/h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjs/ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj•/h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj’/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j—/Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jj]/sbŒc.blk_mq_complete_request”†”asbuh1hhjs/ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ/h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjs/ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjÃ/h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjs/ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjÐ/h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjs/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjo/ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj6/h²hh³jH/h´M$ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj2/h²hh³jH/h´M$ubah}”(h]”j-/ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jH/h´M$hj//h²hubj)�”}”(hhh]”hÞ)�”}”(hŒend I/O on a request”h]”hŒend I/O on a request”…”�”}”(hjú/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M$hj÷/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj//h²hh³jH/h´M$ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j0j7j0j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒ™**Parameters** ``struct request *rq`` the request being processed **Description** Complete a request by scheduling the ->complete_rq operation.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj0h]”hŒ Parameters”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M(hj0ubj\)�”}”(hhh]”ja)�”}”(hŒ3``struct request *rq`` the request being processed ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj;0h]”hŒstruct request *rq”…”�”}”(hj=0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj90ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M%hj50ubj�)�”}”(hhh]”hÞ)�”}”(hŒthe request being processed”h]”hŒthe request being processed”…”�”}”(hjT0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jP0h´M%hjQ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj50ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jP0h´M%hj20ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj0ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjv0h]”hŒ Description”…”�”}”(hjx0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjt0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M'hj0ubj.)�”}”(hŒ=Complete a request by scheduling the ->complete_rq operation.”h]”hÞ)�”}”(hjŽ0h]”hŒ=Complete a request by scheduling the ->complete_rq operation.”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M'hjŒ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j.h³j�0h´M'hj0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ!blk_mq_start_request (C function)”Œc.blk_mq_start_request”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ.void blk_mq_start_request (struct request *rq)”h]”j¹)�”}”(hŒ-void blk_mq_start_request(struct request *rq)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÄ0h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjÀ0h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M2ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ0h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÀ0h²hh³jÒ0h´M2ubjâ)�”}”(hŒblk_mq_start_request”h]”jè)�”}”(hŒblk_mq_start_request”h]”hŒblk_mq_start_request”…”�”}”(hjå0h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjá0ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjÀ0h²hh³jÒ0h´M2ubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjý0ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjý0ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j!1Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjç0sbŒc.blk_mq_start_request”†”asbuh1hhjý0ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?1h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjý0ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjM1h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjý0ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjZ1h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjý0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjù0ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjÀ0h²hh³jÒ0h´M2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj¼0h²hh³jÒ0h´M2ubah}”(h]”j·0ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÒ0h´M2hj¹0h²hubj)�”}”(hhh]”hÞ)�”}”(hŒStart processing a request”h]”hŒStart processing a request”…”�”}”(hj„1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M2hj�1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹0h²hh³jÒ0h´M2ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jœ1j7jœ1j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hX**Parameters** ``struct request *rq`` Pointer to request to be started **Description** Function used by device drivers to notify the block layer that a request is going to be processed now, so blk layer can do proper initializations such as starting the timeout timer.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj¦1h]”hŒ Parameters”…”�”}”(hj¨1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj¤1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M6hj 1ubj\)�”}”(hhh]”ja)�”}”(hŒ8``struct request *rq`` Pointer to request to be started ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hjÅ1h]”hŒstruct request *rq”…”�”}”(hjÇ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÃ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M3hj¿1ubj�)�”}”(hhh]”hÞ)�”}”(hŒ Pointer to request to be started”h]”hŒ Pointer to request to be started”…”�”}”(hjÞ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÚ1h´M3hjÛ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj¿1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÚ1h´M3hj¼1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj 1ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj2h]”hŒ Description”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjþ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M5hj 1ubhÞ)�”}”(hŒµFunction used by device drivers to notify the block layer that a request is going to be processed now, so blk layer can do proper initializations such as starting the timeout timer.”h]”hŒµFunction used by device drivers to notify the block layer that a request is going to be processed now, so blk layer can do proper initializations such as starting the timeout timer.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M4hj 1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ"blk_execute_rq_nowait (C function)”Œc.blk_execute_rq_nowait”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ=void blk_execute_rq_nowait (struct request *rq, bool at_head)”h]”j¹)�”}”(hŒblk_status_t blk_execute_rq (struct request *rq, bool at_head)”h]”j¹)�”}”(hŒ=blk_status_t blk_execute_rq(struct request *rq, bool at_head)”h]”(h)�”}”(hhh]”jè)�”}”(hŒ blk_status_t”h]”hŒ blk_status_t”…”�”}”(hj‚4h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j„4Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jŒblk_execute_rq”sbŒc.blk_execute_rq”†”asbuh1hhj{4h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¼ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤4h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj{4h²hh³j£4h´M¼ubjâ)�”}”(hŒblk_execute_rq”h]”jè)�”}”(hj 4h]”hŒblk_execute_rq”…”�”}”(hj¶4h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj²4ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj{4h²hh³j£4h´M¼ubjR)�”}”(hŒ"(struct request *rq, bool at_head)”h]”(jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjÑ4h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÍ4ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ4h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÍ4ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjï4h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjì4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jñ4Œmodname”NŒ classname”Njj )�”}”j#]”jž4Œc.blk_execute_rq”†”asbuh1hhjÍ4ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÍ4ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÍ4ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hj(5h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÍ4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjÉ4ubjX)�”}”(hŒ bool at_head”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hjA5h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj=5ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN5h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj=5ubjè)�”}”(hŒat_head”h]”hŒat_head”…”�”}”(hj\5h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj=5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjÉ4ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj{4h²hh³j£4h´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjw4h²hh³j£4h´M¼ubah}”(h]”jr4ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j£4h´M¼hjt4h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ)insert a request into queue for execution”h]”hŒ)insert a request into queue for execution”…”�”}”(hj†5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¼hjƒ5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt4h²hh³j£4h´M¼ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jž5j7jž5j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXC**Parameters** ``struct request *rq`` request to insert ``bool at_head`` insert request at head or tail of queue **Description** Insert a fully prepared request at the back of the I/O scheduler queue for execution and wait for completion. **Return** The blk_status_t result provided to blk_mq_end_request().”•h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj¨5h]”hŒ Parameters”…”�”}”(hjª5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj¦5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MÀhj¢5ubj\)�”}”(hhh]”(ja)�”}”(hŒ)``struct request *rq`` request to insert ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hjÇ5h]”hŒstruct request *rq”…”�”}”(hjÉ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÅ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M½hjÁ5ubj�)�”}”(hhh]”hÞ)�”}”(hŒrequest to insert”h]”hŒrequest to insert”…”�”}”(hjà5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÜ5h´M½hjÝ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÁ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÜ5h´M½hj¾5ubja)�”}”(hŒ9``bool at_head`` insert request at head or tail of queue ”h]”(jg)�”}”(hŒ``bool at_head``”h]”jM)�”}”(hj6h]”hŒ bool at_head”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjþ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¾hjú5ubj�)�”}”(hhh]”hÞ)�”}”(hŒ'insert request at head or tail of queue”h]”hŒ'insert request at head or tail of queue”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j6h´M¾hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjú5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j6h´M¾hj¾5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj¢5ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj;6h]”hŒ Description”…”�”}”(hj=6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj96ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MÀhj¢5ubj.)�”}”(hŒnInsert a fully prepared request at the back of the I/O scheduler queue for execution and wait for completion. ”h]”hÞ)�”}”(hŒmInsert a fully prepared request at the back of the I/O scheduler queue for execution and wait for completion.”h]”hŒmInsert a fully prepared request at the back of the I/O scheduler queue for execution and wait for completion.”…”�”}”(hjU6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MÀhjQ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j.h³jc6h´MÀhj¢5ubhÞ)�”}”(hŒ **Return**”h]”jF)�”}”(hjl6h]”hŒReturn”…”�”}”(hjn6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MÃhj¢5ubhÞ)�”}”(hŒ9The blk_status_t result provided to blk_mq_end_request().”h]”hŒ9The blk_status_t result provided to blk_mq_end_request().”…”�”}”(hj‚6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MÃhj¢5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ&blk_mq_delay_run_hw_queue (C function)”Œc.blk_mq_delay_run_hw_queue”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒPvoid blk_mq_delay_run_hw_queue (struct blk_mq_hw_ctx *hctx, unsigned long msecs)”h]”j¹)�”}”(hŒOvoid blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj­6h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MçubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ6h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj­6h²hh³j¿6h´Mçubjâ)�”}”(hŒblk_mq_delay_run_hw_queue”h]”jè)�”}”(hŒblk_mq_delay_run_hw_queue”h]”hŒblk_mq_delay_run_hw_queue”…”�”}”(hjÒ6h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÎ6ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj­6h²hh³j¿6h´MçubjR)�”}”(hŒ1(struct blk_mq_hw_ctx *hctx, unsigned long msecs)”h]”(jX)�”}”(hŒstruct blk_mq_hw_ctx *hctx”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjî6h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjê6ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû6h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjê6ubh)�”}”(hhh]”jè)�”}”(hŒ blk_mq_hw_ctx”h]”hŒ blk_mq_hw_ctx”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj 7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j7Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjÔ6sbŒc.blk_mq_delay_run_hw_queue”†”asbuh1hhjê6ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,7h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjê6ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj:7h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjê6ubjè)�”}”(hŒhctx”h]”hŒhctx”…”�”}”(hjG7h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjê6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjæ6ubjX)�”}”(hŒunsigned long msecs”h]”(j~)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj`7h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj\7ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn7h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj\7ubj~)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj|7h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj\7ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ7h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj\7ubjè)�”}”(hŒmsecs”h]”hŒmsecs”…”�”}”(hj˜7h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj\7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjæ6ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj­6h²hh³j¿6h´Mçubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj©6h²hh³j¿6h´Mçubah}”(h]”j¤6ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j¿6h´Mçhj¦6h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ$Run a hardware queue asynchronously.”h]”hŒ$Run a hardware queue asynchronously.”…”�”}”(hjÂ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mçhj¿7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦6h²hh³j¿6h´Mçubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÚ7j7jÚ7j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒú**Parameters** ``struct blk_mq_hw_ctx *hctx`` Pointer to the hardware queue to run. ``unsigned long msecs`` Milliseconds of delay to wait before running the queue. **Description** Run a hardware queue asynchronously with a delay of **msecs**.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjä7h]”hŒ Parameters”…”�”}”(hjæ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjâ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MëhjÞ7ubj\)�”}”(hhh]”(ja)�”}”(hŒE``struct blk_mq_hw_ctx *hctx`` Pointer to the hardware queue to run. ”h]”(jg)�”}”(hŒ``struct blk_mq_hw_ctx *hctx``”h]”jM)�”}”(hj8h]”hŒstruct blk_mq_hw_ctx *hctx”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mèhjý7ubj�)�”}”(hhh]”hÞ)�”}”(hŒ%Pointer to the hardware queue to run.”h]”hŒ%Pointer to the hardware queue to run.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j8h´Mèhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjý7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j8h´Mèhjú7ubja)�”}”(hŒP``unsigned long msecs`` Milliseconds of delay to wait before running the queue. ”h]”(jg)�”}”(hŒ``unsigned long msecs``”h]”jM)�”}”(hj<8h]”hŒunsigned long msecs”…”�”}”(hj>8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj:8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Méhj68ubj�)�”}”(hhh]”hÞ)�”}”(hŒ7Milliseconds of delay to wait before running the queue.”h]”hŒ7Milliseconds of delay to wait before running the queue.”…”�”}”(hjU8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jQ8h´MéhjR8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj68ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jQ8h´Méhjú7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÞ7ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjw8h]”hŒ Description”…”�”}”(hjy8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhju8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MëhjÞ7ubhÞ)�”}”(hŒ>Run a hardware queue asynchronously with a delay of **msecs**.”h]”(hŒ4Run a hardware queue asynchronously with a delay of ”…”�”}”(hj�8h²hh³Nh´NubjF)�”}”(hŒ **msecs**”h]”hŒmsecs”…”�”}”(hj•8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj�8ubhŒ.”…”�”}”(hj�8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MêhjÞ7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ blk_mq_run_hw_queue (C function)”Œc.blk_mq_run_hw_queue”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒAvoid blk_mq_run_hw_queue (struct blk_mq_hw_ctx *hctx, bool async)”h]”j¹)�”}”(hŒ@void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎ8h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjÊ8h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ8h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÊ8h²hh³jÜ8h´M ubjâ)�”}”(hŒblk_mq_run_hw_queue”h]”jè)�”}”(hŒblk_mq_run_hw_queue”h]”hŒblk_mq_run_hw_queue”…”�”}”(hjï8h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjë8ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjÊ8h²hh³jÜ8h´M ubjR)�”}”(hŒ((struct blk_mq_hw_ctx *hctx, bool async)”h]”(jX)�”}”(hŒstruct blk_mq_hw_ctx *hctx”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj9ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj9ubh)�”}”(hhh]”jè)�”}”(hŒ blk_mq_hw_ctx”h]”hŒ blk_mq_hw_ctx”…”�”}”(hj)9h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj&9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j+9Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjñ8sbŒc.blk_mq_run_hw_queue”†”asbuh1hhj9ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI9h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj9ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjW9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9ubjè)�”}”(hŒhctx”h]”hŒhctx”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj9ubjX)�”}”(hŒ bool async”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hj}9h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjy9ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ9h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjy9ubjè)�”}”(hŒasync”h]”hŒasync”…”�”}”(hj˜9h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjy9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj9ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjÊ8h²hh³jÜ8h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhjÆ8h²hh³jÜ8h´M ubah}”(h]”jÁ8ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÜ8h´M hjÃ8h²hubj)�”}”(hhh]”hÞ)�”}”(hŒStart to run a hardware queue.”h]”hŒStart to run a hardware queue.”…”�”}”(hjÂ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hj¿9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃ8h²hh³jÜ8h´M ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÚ9j7jÚ9j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXG**Parameters** ``struct blk_mq_hw_ctx *hctx`` Pointer to the hardware queue to run. ``bool async`` If we want to run the queue asynchronously. **Description** Check if the request queue is not in a quiesced state and if there are pending requests to be sent. If this is true, run the queue to send requests to hardware.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjä9h]”hŒ Parameters”…”�”}”(hjæ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjâ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjÞ9ubj\)�”}”(hhh]”(ja)�”}”(hŒE``struct blk_mq_hw_ctx *hctx`` Pointer to the hardware queue to run. ”h]”(jg)�”}”(hŒ``struct blk_mq_hw_ctx *hctx``”h]”jM)�”}”(hj:h]”hŒstruct blk_mq_hw_ctx *hctx”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjý9ubj�)�”}”(hhh]”hÞ)�”}”(hŒ%Pointer to the hardware queue to run.”h]”hŒ%Pointer to the hardware queue to run.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j:h´M hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjý9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j:h´M hjú9ubja)�”}”(hŒ;``bool async`` If we want to run the queue asynchronously. ”h]”(jg)�”}”(hŒ``bool async``”h]”jM)�”}”(hj<:h]”hŒ bool async”…”�”}”(hj>:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj::ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hj6:ubj�)�”}”(hhh]”hÞ)�”}”(hŒ+If we want to run the queue asynchronously.”h]”hŒ+If we want to run the queue asynchronously.”…”�”}”(hjU:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jQ:h´M hjR:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj6:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jQ:h´M hjú9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjÞ9ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjw:h]”hŒ Description”…”�”}”(hjy:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhju:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjÞ9ubhÞ)�”}”(hŒ Check if the request queue is not in a quiesced state and if there are pending requests to be sent. If this is true, run the queue to send requests to hardware.”h]”hŒ Check if the request queue is not in a quiesced state and if there are pending requests to be sent. If this is true, run the queue to send requests to hardware.”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjÞ9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ!blk_mq_run_hw_queues (C function)”Œc.blk_mq_run_hw_queues”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ?void blk_mq_run_hw_queues (struct request_queue *q, bool async)”h]”j¹)�”}”(hŒ>void blk_mq_run_hw_queues(struct request_queue *q, bool async)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼:h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj¸:h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MN ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË:h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¸:h²hh³jÊ:h´MN ubjâ)�”}”(hŒblk_mq_run_hw_queues”h]”jè)�”}”(hŒblk_mq_run_hw_queues”h]”hŒblk_mq_run_hw_queues”…”�”}”(hjÝ:h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÙ:ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj¸:h²hh³jÊ:h´MN ubjR)�”}”(hŒ%(struct request_queue *q, bool async)”h]”(jX)�”}”(hŒstruct request_queue *q”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjù:h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjõ:ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjõ:ubh)�”}”(hhh]”jè)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j;Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjß:sbŒc.blk_mq_run_hw_queues”†”asbuh1hhjõ:ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7;h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjõ:ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjE;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjõ:ubjè)�”}”(hjF'h]”hŒq”…”�”}”(hjR;h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjõ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjñ:ubjX)�”}”(hŒ bool async”h]”(j~)�”}”(hj�h]”hŒbool”…”�”}”(hjj;h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjf;ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw;h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjf;ubjè)�”}”(hŒasync”h]”hŒasync”…”�”}”(hj…;h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjf;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjñ:ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj¸:h²hh³jÊ:h´MN ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj´:h²hh³jÊ:h´MN ubah}”(h]”j¯:ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÊ:h´MN hj±:h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ+Run all hardware queues in a request queue.”h]”hŒ+Run all hardware queues in a request queue.”…”�”}”(hj¯;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MN hj¬;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±:h²hh³jÊ:h´MN ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jÇ;j7jÇ;j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒ�**Parameters** ``struct request_queue *q`` Pointer to the request queue to run. ``bool async`` If we want to run the queue asynchronously.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjÑ;h]”hŒ Parameters”…”�”}”(hjÓ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÏ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MR hjË;ubj\)�”}”(hhh]”(ja)�”}”(hŒA``struct request_queue *q`` Pointer to the request queue to run. ”h]”(jg)�”}”(hŒ``struct request_queue *q``”h]”jM)�”}”(hjð;h]”hŒstruct request_queue *q”…”�”}”(hjò;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjî;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MO hjê;ubj�)�”}”(hhh]”hÞ)�”}”(hŒ$Pointer to the request queue to run.”h]”hŒ$Pointer to the request queue to run.”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j<h´MO hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjê;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j<h´MO hjç;ubja)�”}”(hŒ:``bool async`` If we want to run the queue asynchronously.”h]”(jg)�”}”(hŒ``bool async``”h]”jM)�”}”(hj)<h]”hŒ bool async”…”�”}”(hj+<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj'<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MQ hj#<ubj�)�”}”(hhh]”hÞ)�”}”(hŒ+If we want to run the queue asynchronously.”h]”hŒ+If we want to run the queue asynchronously.”…”�”}”(hjB<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´MP hj?<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj#<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j><h´MQ hjç;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjË;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ'blk_mq_delay_run_hw_queues (C function)”Œc.blk_mq_delay_run_hw_queues”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒNvoid blk_mq_delay_run_hw_queues (struct request_queue *q, unsigned long msecs)”h]”j¹)�”}”(hŒMvoid blk_mq_delay_run_hw_queues(struct request_queue *q, unsigned long msecs)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒ<h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj<h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mj ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’<h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj<h²hh³j‘<h´Mj ubjâ)�”}”(hŒblk_mq_delay_run_hw_queues”h]”jè)�”}”(hŒblk_mq_delay_run_hw_queues”h]”hŒblk_mq_delay_run_hw_queues”…”�”}”(hj¤<h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj <ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj<h²hh³j‘<h´Mj ubjR)�”}”(hŒ.(struct request_queue *q, unsigned long msecs)”h]”(jX)�”}”(hŒstruct request_queue *q”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjÀ<h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¼<ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ<h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¼<ubh)�”}”(hhh]”jè)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjÞ<h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÛ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jà<Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jj¦<sbŒc.blk_mq_delay_run_hw_queues”†”asbuh1hhj¼<ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ<h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¼<ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj =h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼<ubjè)�”}”(hjF'h]”hŒq”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¼<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¸<ubjX)�”}”(hŒunsigned long msecs”h]”(j~)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj1=h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj-=ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?=h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj-=ubj~)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjM=h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj-=ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[=h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj-=ubjè)�”}”(hŒmsecs”h]”hŒmsecs”…”�”}”(hji=h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj-=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¸<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj<h²hh³j‘<h´Mj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj{<h²hh³j‘<h´Mj ubah}”(h]”jv<ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j‘<h´Mj hjx<h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ'Run all hardware queues asynchronously.”h]”hŒ'Run all hardware queues asynchronously.”…”�”}”(hj“=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mj hj�=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjx<h²hh³j‘<h´Mj ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j«=j7j«=j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒ¦**Parameters** ``struct request_queue *q`` Pointer to the request queue to run. ``unsigned long msecs`` Milliseconds of delay to wait before running the queues.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjµ=h]”hŒ Parameters”…”�”}”(hj·=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj³=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mn hj¯=ubj\)�”}”(hhh]”(ja)�”}”(hŒA``struct request_queue *q`` Pointer to the request queue to run. ”h]”(jg)�”}”(hŒ``struct request_queue *q``”h]”jM)�”}”(hjÔ=h]”hŒstruct request_queue *q”…”�”}”(hjÖ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÒ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mk hjÎ=ubj�)�”}”(hhh]”hÞ)�”}”(hŒ$Pointer to the request queue to run.”h]”hŒ$Pointer to the request queue to run.”…”�”}”(hjí=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jé=h´Mk hjê=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÎ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jé=h´Mk hjË=ubja)�”}”(hŒP``unsigned long msecs`` Milliseconds of delay to wait before running the queues.”h]”(jg)�”}”(hŒ``unsigned long msecs``”h]”jM)�”}”(hj >h]”hŒunsigned long msecs”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj >ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mm hj>ubj�)�”}”(hhh]”hÞ)�”}”(hŒ8Milliseconds of delay to wait before running the queues.”h]”hŒ8Milliseconds of delay to wait before running the queues.”…”�”}”(hj&>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Ml hj#>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j">h´Mm hjË=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj¯=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ)blk_mq_request_bypass_insert (C function)”Œc.blk_mq_request_bypass_insert”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒJvoid blk_mq_request_bypass_insert (struct request *rq, blk_insert_t flags)”h]”j¹)�”}”(hŒIvoid blk_mq_request_bypass_insert(struct request *rq, blk_insert_t flags)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjg>h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjc>h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mè ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv>h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjc>h²hh³ju>h´Mè ubjâ)�”}”(hŒblk_mq_request_bypass_insert”h]”jè)�”}”(hŒblk_mq_request_bypass_insert”h]”hŒblk_mq_request_bypass_insert”…”�”}”(hjˆ>h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj„>ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjc>h²hh³ju>h´Mè ubjR)�”}”(hŒ((struct request *rq, blk_insert_t flags)”h]”(jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj¤>h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj >ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±>h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj >ubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjÂ>h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¿>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÄ>Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjŠ>sbŒc.blk_mq_request_bypass_insert”†”asbuh1hhj >ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ>h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj >ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjð>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj >ubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjý>h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj >ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjœ>ubjX)�”}”(hŒblk_insert_t flags”h]”(h)�”}”(hhh]”jè)�”}”(hŒ blk_insert_t”h]”hŒ blk_insert_t”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j?Œmodname”NŒ classname”Njj )�”}”j#]”jÞ>Œc.blk_mq_request_bypass_insert”†”asbuh1hhj?ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7?h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj?ubjè)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjE?h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjœ>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjc>h²hh³ju>h´Mè ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj_>h²hh³ju>h´Mè ubah}”(h]”jZ>ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³ju>h´Mè hj\>h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ"Insert a request at dispatch list.”h]”hŒ"Insert a request at dispatch list.”…”�”}”(hjo?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mè hjl?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\>h²hh³ju>h´Mè ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j‡?j7j‡?j8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒý**Parameters** ``struct request *rq`` Pointer to request to be inserted. ``blk_insert_t flags`` BLK_MQ_INSERT_* **Description** Should only be used carefully, when the caller knows we want to bypass a potential IO scheduler on the target device.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj‘?h]”hŒ Parameters”…”�”}”(hj“?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj�?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mì hj‹?ubj\)�”}”(hhh]”(ja)�”}”(hŒ:``struct request *rq`` Pointer to request to be inserted. ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj°?h]”hŒstruct request *rq”…”�”}”(hj²?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj®?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mé hjª?ubj�)�”}”(hhh]”hÞ)�”}”(hŒ"Pointer to request to be inserted.”h]”hŒ"Pointer to request to be inserted.”…”�”}”(hjÉ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÅ?h´Mé hjÆ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjª?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jÅ?h´Mé hj§?ubja)�”}”(hŒ'``blk_insert_t flags`` BLK_MQ_INSERT_* ”h]”(jg)�”}”(hŒ``blk_insert_t flags``”h]”jM)�”}”(hjé?h]”hŒblk_insert_t flags”…”�”}”(hjë?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjç?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mê hjã?ubj�)�”}”(hhh]”hÞ)�”}”(hŒBLK_MQ_INSERT_*”h]”hŒBLK_MQ_INSERT_*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jþ?h´Mê hjÿ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjã?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jþ?h´Mê hj§?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hj‹?ubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hj$@h]”hŒ Description”…”�”}”(hj&@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj"@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mì hj‹?ubhÞ)�”}”(hŒuShould only be used carefully, when the caller knows we want to bypass a potential IO scheduler on the target device.”h]”hŒuShould only be used carefully, when the caller knows we want to bypass a potential IO scheduler on the target device.”…”�”}”(hj:@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Më hj‹?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ&blk_mq_try_issue_directly (C function)”Œc.blk_mq_try_issue_directly”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒOvoid blk_mq_try_issue_directly (struct blk_mq_hw_ctx *hctx, struct request *rq)”h]”j¹)�”}”(hŒNvoid blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx, struct request *rq)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hji@h²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hje@h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¨ ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx@h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhje@h²hh³jw@h´M¨ ubjâ)�”}”(hŒblk_mq_try_issue_directly”h]”jè)�”}”(hŒblk_mq_try_issue_directly”h]”hŒblk_mq_try_issue_directly”…”�”}”(hjŠ@h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj†@ubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhje@h²hh³jw@h´M¨ ubjR)�”}”(hŒ0(struct blk_mq_hw_ctx *hctx, struct request *rq)”h]”(jX)�”}”(hŒstruct blk_mq_hw_ctx *hctx”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj¦@h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¢@ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³@h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¢@ubh)�”}”(hhh]”jè)�”}”(hŒ blk_mq_hw_ctx”h]”hŒ blk_mq_hw_ctx”…”�”}”(hjÄ@h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÁ@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jÆ@Œmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjŒ@sbŒc.blk_mq_try_issue_directly”†”asbuh1hhj¢@ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä@h²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj¢@ubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjò@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢@ubjè)�”}”(hŒhctx”h]”hŒhctx”…”�”}”(hjÿ@h²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj¢@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjž@ubjX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjAubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjAubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj6Ah²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj3Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j8AŒmodname”NŒ classname”Njj )�”}”j#]”jà@Œc.blk_mq_try_issue_directly”†”asbuh1hhjAubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTAh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjAubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjbAh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjAubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjoAh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjž@ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhje@h²hh³jw@h´M¨ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhja@h²hh³jw@h´M¨ ubah}”(h]”j\@ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jw@h´M¨ hj^@h²hubj)�”}”(hhh]”hÞ)�”}”(hŒ0Try to send a request directly to device driver.”h]”hŒ0Try to send a request directly to device driver.”…”�”}”(hj™Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¨ hj–Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^@h²hh³jw@h´M¨ ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j±Aj7j±Aj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXŸ**Parameters** ``struct blk_mq_hw_ctx *hctx`` Pointer of the associated hardware queue. ``struct request *rq`` Pointer to request to be sent. **Description** If the device has enough resources to accept a new request now, send the request directly to device driver. Else, insert at hctx->dispatch queue, so we can try send it another time in the future. Requests inserted at this queue have higher priority.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj»Ah]”hŒ Parameters”…”�”}”(hj½Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj¹Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¬ hjµAubj\)�”}”(hhh]”(ja)�”}”(hŒI``struct blk_mq_hw_ctx *hctx`` Pointer of the associated hardware queue. ”h]”(jg)�”}”(hŒ``struct blk_mq_hw_ctx *hctx``”h]”jM)�”}”(hjÚAh]”hŒstruct blk_mq_hw_ctx *hctx”…”�”}”(hjÜAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjØAubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M© hjÔAubj�)�”}”(hhh]”hÞ)�”}”(hŒ)Pointer of the associated hardware queue.”h]”hŒ)Pointer of the associated hardware queue.”…”�”}”(hjóAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jïAh´M© hjðAubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjÔAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jïAh´M© hjÑAubja)�”}”(hŒ6``struct request *rq`` Pointer to request to be sent. ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hjBh]”hŒstruct request *rq”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mª hj Bubj�)�”}”(hhh]”hÞ)�”}”(hŒPointer to request to be sent.”h]”hŒPointer to request to be sent.”…”�”}”(hj,Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j(Bh´Mª hj)Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j(Bh´Mª hjÑAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[hjµAubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjNBh]”hŒ Description”…”�”}”(hjPBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjLBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M¬ hjµAubhÞ)�”}”(hŒùIf the device has enough resources to accept a new request now, send the request directly to device driver. Else, insert at hctx->dispatch queue, so we can try send it another time in the future. Requests inserted at this queue have higher priority.”h]”hŒùIf the device has enough resources to accept a new request now, send the request directly to device driver. Else, insert at hctx->dispatch queue, so we can try send it another time in the future. Requests inserted at this queue have higher priority.”…”�”}”(hjdBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M« hjµAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_mq_submit_bio (C function)”Œc.blk_mq_submit_bio”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ(void blk_mq_submit_bio (struct bio *bio)”h]”j¹)�”}”(hŒ'void blk_mq_submit_bio(struct bio *bio)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj“Bh²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj�Bh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Bh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj�Bh²hh³j¡Bh´M ubjâ)�”}”(hŒblk_mq_submit_bio”h]”jè)�”}”(hŒblk_mq_submit_bio”h]”hŒblk_mq_submit_bio”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj°Bubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj�Bh²hh³j¡Bh´M ubjR)�”}”(hŒ(struct bio *bio)”h]”jX)�”}”(hŒstruct bio *bio”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjÐBh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÌBubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝBh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÌBubh)�”}”(hhh]”jè)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjîBh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjëBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jðBŒmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jj¶BsbŒc.blk_mq_submit_bio”†”asbuh1hhjÌBubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjÌBubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÌBubjè)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj)Ch²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÌBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjÈBubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj�Bh²hh³j¡Bh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj‹Bh²hh³j¡Bh´M ubah}”(h]”j†Bah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³j¡Bh´M hjˆBh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ*Create and send a request to block device.”h]”hŒ*Create and send a request to block device.”…”�”}”(hjSCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjPCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆBh²hh³j¡Bh´M ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6jkCj7jkCj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hXÉ**Parameters** ``struct bio *bio`` Bio pointer. **Description** Builds up a request structure from **q** and **bio** and send to the device. The request may not be queued directly to hardware if: * This request can be merged with another one * We want to place request at plug queue for possible future merging * There is an IO scheduler active at this queue It will not queue the request if there is an error with the bio, or at the request creation.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hjuCh]”hŒ Parameters”…”�”}”(hjwCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjsCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjoCubj\)�”}”(hhh]”ja)�”}”(hŒ!``struct bio *bio`` Bio pointer. ”h]”(jg)�”}”(hŒ``struct bio *bio``”h]”jM)�”}”(hj”Ch]”hŒstruct bio *bio”…”�”}”(hj–Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj’Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjŽCubj�)�”}”(hhh]”hÞ)�”}”(hŒ Bio pointer.”h]”hŒ Bio pointer.”…”�”}”(hj­Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j©Ch´M hjªCubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjŽCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³j©Ch´M hj‹Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hjoCubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjÏCh]”hŒ Description”…”�”}”(hjÑCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjÍCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjoCubhÞ)�”}”(hX&Builds up a request structure from **q** and **bio** and send to the device. The request may not be queued directly to hardware if: * This request can be merged with another one * We want to place request at plug queue for possible future merging * There is an IO scheduler active at this queue”h]”(hŒ#Builds up a request structure from ”…”�”}”(hjåCh²hh³Nh´NubjF)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjíCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjåCubhŒ and ”…”�”}”(hjåCh²hh³Nh´NubjF)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjÿCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjåCubhŒò and send to the device. The request may not be queued directly to hardware if: * This request can be merged with another one * We want to place request at plug queue for possible future merging * There is an IO scheduler active at this queue”…”�”}”(hjåCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjoCubhÞ)�”}”(hŒ\It will not queue the request if there is an error with the bio, or at the request creation.”h]”hŒ\It will not queue the request if there is an error with the bio, or at the request creation.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M hjoCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ&blk_insert_cloned_request (C function)”Œc.blk_insert_cloned_request”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ;blk_status_t blk_insert_cloned_request (struct request *rq)”h]”j¹)�”}”(hŒ:blk_status_t blk_insert_cloned_request(struct request *rq)”h]”(h)�”}”(hhh]”jè)�”}”(hŒ blk_status_t”h]”hŒ blk_status_t”…”�”}”(hjJDh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjGDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jLDŒmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jŒblk_insert_cloned_request”sbŒc.blk_insert_cloned_request”†”asbuh1hhjCDh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M• ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlDh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjCDh²hh³jkDh´M• ubjâ)�”}”(hŒblk_insert_cloned_request”h]”jè)�”}”(hjhDh]”hŒblk_insert_cloned_request”…”�”}”(hj~Dh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjzDubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjCDh²hh³jkDh´M• ubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hj™Dh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj•DubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Dh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj•Dubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj·Dh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj´Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j¹DŒmodname”NŒ classname”Njj )�”}”j#]”jfDŒc.blk_insert_cloned_request”†”asbuh1hhj•DubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕDh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj•Dubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjãDh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj•Dubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjðDh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj•Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj‘Dubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjCDh²hh³jkDh´M• ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj?Dh²hh³jkDh´M• ubah}”(h]”j:Dah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jkDh´M• hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj:Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M™ hj6Eubj\)�”}”(hhh]”ja)�”}”(hŒ/``struct request *rq`` the request being queued”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj[Eh]”hŒstruct request *rq”…”�”}”(hj]Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjYEubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M› hjUEubj�)�”}”(hhh]”hÞ)�”}”(hŒthe request being queued”h]”hŒthe request being queued”…”�”}”(hjtEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´M– hjqEubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjUEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jpEh´M› hjREubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj6Eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œ blk_rq_unprep_clone (C function)”Œc.blk_rq_unprep_clone”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ-void blk_rq_unprep_clone (struct request *rq)”h]”j¹)�”}”(hŒ,void blk_rq_unprep_clone(struct request *rq)”h]”(j~)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµEh²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hj±Eh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mç ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄEh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhj±Eh²hh³jÃEh´Mç ubjâ)�”}”(hŒblk_rq_unprep_clone”h]”jè)�”}”(hŒblk_rq_unprep_clone”h]”hŒblk_rq_unprep_clone”…”�”}”(hjÖEh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjÒEubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhj±Eh²hh³jÃEh´Mç ubjR)�”}”(hŒ(struct request *rq)”h]”jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjòEh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjîEubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjîEubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”jFŒmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjØEsbŒc.blk_rq_unprep_clone”†”asbuh1hhjîEubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Fh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjîEubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hj>Fh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjîEubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjKFh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjîEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjêEubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj±Eh²hh³jÃEh´Mç ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˆuh1j¸jjhj­Eh²hh³jÃEh´Mç ubah}”(h]”j¨Eah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j²h³jÃEh´Mç hjªEh²hubj)�”}”(hhh]”hÞ)�”}”(hŒ4Helper function to free all bios in a cloned request”h]”hŒ4Helper function to free all bios in a cloned request”…”�”}”(hjuFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mç hjrFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªEh²hh³jÃEh´Mç ubeh}”(h]”h ]”(j0Œfunction”eh"]”h$]”h&]”j5j0j6j�Fj7j�Fj8‰j9‰j:‰uh1j­h²hhj‹h³Nh´Nubj<)�”}”(hŒ�**Parameters** ``struct request *rq`` the clone request to be cleaned up **Description** Free all bios in **rq** for a cloned request.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jF)�”}”(hj—Fh]”hŒ Parameters”…”�”}”(hj™Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj•Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Më hj‘Fubj\)�”}”(hhh]”ja)�”}”(hŒ:``struct request *rq`` the clone request to be cleaned up ”h]”(jg)�”}”(hŒ``struct request *rq``”h]”jM)�”}”(hj¶Fh]”hŒstruct request *rq”…”�”}”(hj¸Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLhj´Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jfh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mè hj°Fubj�)�”}”(hhh]”hÞ)�”}”(hŒ"the clone request to be cleaned up”h]”hŒ"the clone request to be cleaned up”…”�”}”(hjÏFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jËFh´Mè hjÌFubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hj°Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jËFh´Mè hj­Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j[hj‘FubhÞ)�”}”(hŒ**Description**”h]”jF)�”}”(hjñFh]”hŒ Description”…”�”}”(hjóFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjïFubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mê hj‘Fubj.)�”}”(hŒ-Free all bios in **rq** for a cloned request.”h]”hÞ)�”}”(hj Gh]”(hŒFree all bios in ”…”�”}”(hj Gh²hh³Nh´NubjF)�”}”(hŒ**rq**”h]”hŒrq”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhj GubhŒ for a cloned request.”…”�”}”(hj Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mê hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j.h³j*Gh´Mê hj‘Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j;hj‹h²hh³Nh´Nubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j©Œblk_rq_prep_clone (C function)”Œc.blk_rq_prep_clone”hNt”auh1jœhj‹h²hh³Nh´Nubj®)�”}”(hhh]”(j³)�”}”(hŒ¦int blk_rq_prep_clone (struct request *rq, struct request *rq_src, struct bio_set *bs, gfp_t gfp_mask, int (*bio_ctr)(struct bio *, struct bio *, void *), void *data)”h]”j¹)�”}”(hŒ¢int blk_rq_prep_clone(struct request *rq, struct request *rq_src, struct bio_set *bs, gfp_t gfp_mask, int (*bio_ctr)(struct bio*, struct bio*, void*), void *data)”h]”(j~)�”}”(hŒint”h]”hŒint”…”�”}”(hjQGh²hh³Nh´Nubah}”(h]”h ]”jŠah"]”h$]”h&]”uh1j}hjMGh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/block/blk-mq:153: ./block/blk-mq.c”h´Mú ubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Gh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjMGh²hh³j_Gh´Mú ubjâ)�”}”(hŒblk_rq_prep_clone”h]”jè)�”}”(hŒblk_rq_prep_clone”h]”hŒblk_rq_prep_clone”…”�”}”(hjrGh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjnGubah}”(h]”h ]”(jújûeh"]”h$]”h&]”hÅhÆuh1jáhjMGh²hh³j_Gh´Mú ubjR)�”}”(hŒ�(struct request *rq, struct request *rq_src, struct bio_set *bs, gfp_t gfp_mask, int (*bio_ctr)(struct bio*, struct bio*, void*), void *data)”h]”(jX)�”}”(hŒstruct request *rq”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjŽGh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjŠGubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Gh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjŠGubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj¬Gh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhj©Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j®GŒmodname”NŒ classname”Njj )�”}”j#]”j&)�”}”jjtGsbŒc.blk_rq_prep_clone”†”asbuh1hhjŠGubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌGh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjŠGubj¨)�”}”(hj«h]”hŒ*”…”�”}”(hjÚGh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŠGubjè)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjçGh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjŠGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj†GubjX)�”}”(hŒstruct request *rq_src”h]”(j¿)�”}”(hjh]”hŒstruct”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjüGubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”jÝah"]”h$]”h&]”uh1jÐhjüGubh)�”}”(hhh]”jè)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jóah"]”h$]”h&]”uh1jçhjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j0Œreftype”jŒ reftarget”j HŒmodname”NŒ classname”Njj )�”}”j#]”jÈGŒc.blk_rq_prep_clone”†”asbuh1hhjüGubjÑ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj jC jðjõjxj}jœj¡jÞjãj×jÜjpjuj+!j0!jà"jå"j•$jš$j2&j7&j¦(j«(j'*j,*j§+j¬+j-/j2/j·0j¼0j82j=2jr4jw4j¤6j©6jÁ8jÆ8j¯:j´:jv<j{<jZ>j_>j\@ja@j†Bj‹Bj:Dj?Dj¨Ej­EjDGjIGjOMjTMuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.