summaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorLars Ellenberg2013-11-22 13:00:12 +0100
committerPhilipp Reisner2014-07-10 18:35:12 +0200
commit7753a4c17f9e305ed19d8851e1a3154c8c9abaaf (patch)
tree482711e3597d25d11d661514d60b8b3e4d352ced /drivers/block/drbd/drbd_main.c
parentdrbd: add lists to find oldest pending requests (diff)
downloadkernel-qcow2-linux-7753a4c17f9e305ed19d8851e1a3154c8c9abaaf.tar.gz
kernel-qcow2-linux-7753a4c17f9e305ed19d8851e1a3154c8c9abaaf.tar.xz
kernel-qcow2-linux-7753a4c17f9e305ed19d8851e1a3154c8c9abaaf.zip
drbd: add caching oldest request pointers for replication stages
A request that is to be shipped to the peer goes through a few stages: - queued - sent, waiting for ack - ack received, waiting for "barrier ack", which is re-order epoch being closed on the peer by acknowledging a "cache flush" equivalent on the lower level device. In the later two stages, depending on protocol, we may have already completed this request to the upper layers, so it won't be found anymore on device->pending_master_completion[] lists. Track the oldest request yet to be sent (req_next), the oldest not yet acknowledged (req_ack_pending) and the oldest "still waiting for something from the peer" (req_not_net_done), doing short list walks on the transfer log to find the next pending one whenever such a request makes progress. Now we have a fast way to look up the oldest requests, don't do a transfer log walk every time. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
0 files changed, 0 insertions, 0 deletions