Whamcloud - gitweb
EX-752 kernel: backport two patches for E2EDI
authorWang Shilong <wshilong@ddn.com>
Fri, 20 Dec 2019 02:21:41 +0000 (10:21 +0800)
committerAndreas Dilger <adilger@whamcloud.com>
Fri, 5 Mar 2021 18:50:10 +0000 (18:50 +0000)
commitd4814ebee3d1b29404d904246ceb144fcc1e5b34
treec808a7cd4118f92391b4370473e7418aa5cd4b95
parent790f97bf75df6282f224f5f9c04808f75e809b4d
EX-752 kernel: backport two patches for E2EDI

From 40423bfb35bb6057bcefe93b738b5a9411e037a2 Mon Sep 17 00:00:00 2001
From: Jianchao Wang <jianchao.w.wang@oracle.com>
Date: Tue, 12 Feb 2019 09:56:25 +0800
blk-mq: insert rq with DONTPREP to hctx dispatch list
 when requeue

When requeue, if RQF_DONTPREP, rq has contained some driver
specific data, so insert it to hctx dispatch list to avoid any
merge. Take scsi as example, here is the trace event log (no
io scheduler, because RQF_STARTED would prevent merging),

   kworker/0:1H-339   [000] ...1  2037.209289: block_rq_insert: 8,0 R 4096 () 32768 + 8 [kworker/0:1H]
scsi_inert_test-1987  [000] ....  2037.220465: block_bio_queue: 8,0 R 32776 + 8 [scsi_inert_test]
scsi_inert_test-1987  [000] ...2  2037.220466: block_bio_backmerge: 8,0 R 32776 + 8 [scsi_inert_test]
   kworker/0:1H-339   [000] ....  2047.220913: block_rq_issue: 8,0 R 8192 () 32768 + 16 [kworker/0:1H]
scsi_inert_test-1996  [000] ..s1  2047.221007: block_rq_complete: 8,0 R () 32768 + 8 [0]
scsi_inert_test-1996  [000] .Ns1  2047.221045: block_rq_requeue: 8,0 R () 32776 + 8 [0]
   kworker/0:1H-339   [000] ...1  2047.221054: block_rq_insert: 8,0 R 4096 () 32776 + 8 [kworker/0:1H]
   kworker/0:1H-339   [000] ...1  2047.221056: block_rq_issue: 8,0 R 4096 () 32776 + 8 [kworker/0:1H]
scsi_inert_test-1986  [000] ..s1  2047.221119: block_rq_complete: 8,0 R () 32776 + 8 [0]

(32768 + 8) was requeued by scsi_queue_insert and had RQF_DONTPREP.
Then it was merged with (32776 + 8) and issued. Due to RQF_DONTPREP,
the sdb only contained the part of (32768 + 8), then only that part
was completed. The lucky thing was that scsi_io_completion detected
it and requeued the remaining part. So we didn't get corrupted data.
However, the requeue of (32776 + 8) is not expected.

Suggested-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[gedwards@ddn.com: s/RQF_DONTPREP/REQ_DONTPREP/]

From e0c0d06892051e17ee58e041259f339d0c194804 Mon Sep 17 00:00:00 2001
From: "Martin K. Petersen" <martin.petersen@oracle.com>
Date: Fri, 26 Sep 2014 19:20:06 -0400
block: Don't merge requests if integrity flags differ

We'd occasionally merge requests with conflicting integrity flags.
Introduce a merge helper which checks that the requests have compatible
integrity payloads.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
[gedwards@ddn.com: only compare INTEGRITY bi_flags since we don't have bip_flags yet]

Change-Id: Iece6117afa7b16c86e682e8f44b702ac79ea3609
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-on: https://review.whamcloud.com/41833
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/kernel_patches/patches/blk-mq-insert-rq-with-DONTPREP-to-hctx-dispatch-rhel7.patch [new file with mode: 0644]
lustre/kernel_patches/patches/block-Don-t-merge-requests-if-integrity-flags-rhel7.patch [new file with mode: 0644]
lustre/kernel_patches/series/3.10-rhel7.7.series