diff mbox series

null_blk: initialize cmd->error before use

Message ID 20200215031950.6688-1-chaitanya.kulkarni@wdc.com (mailing list archive)
State New, archived
Headers show
Series null_blk: initialize cmd->error before use | expand

Commit Message

Chaitanya Kulkarni Feb. 15, 2020, 3:19 a.m. UTC
From : Alexey Dobriyan (SK hynix) <adobriyan@gmail.com>

null_blk driver supports bio and request mode. For each mode when
processing a new request initialize cmd->error to BLK_STS_OK so that in 
the completion function it will indicate success by default instead of
using previously recorded error if any.

Signed-off-by: Alexey Dobriyan (SK hynix) <adobriyan@gmail.com>
Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
---
Simple test log :-

1. Without Patch :- 
 # dd if=/dev/zero of=/dev/nullb0 bs=4k count=4096
 4096+0 records in
 4096+0 records out
 16777216 bytes (17 MB) copied, 0.262258 s, 64.0 MB/s
 # dmesg  -c 
1.1 Now write again to generate an error :-
 # dd if=/dev/zero of=/dev/nullb0 bs=4k count=4096
 4096+0 records in
 4096+0 records out
 16777216 bytes (17 MB) copied, 0.283751 s, 59.1 MB/s
 # dmesg  -c 
 [  600.946406] print_req_error: 3512 callbacks suppressed
 [   600.946409] blk_update_request: I/O error, dev nullb0, sector 0 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  600.947701] buffer_io_error: 4086 callbacks suppressed
 [  600.947703] Buffer I/O error on dev nullb0, logical block 0, lost async page write
 [  600.949694] blk_update_request: I/O error, dev nullb0, sector 8 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.952283] Buffer I/O error on dev nullb0, logical block 1, lost async page write
 [  600.954002] Buffer I/O error on dev nullb0, logical block 2, lost async page write
 [  600.955722] Buffer I/O error on dev nullb0, logical block 3, lost async page write
 [  600.957472] Buffer I/O error on dev nullb0, logical block 4, lost async page write
 [  600.959228] Buffer I/O error on dev nullb0, logical block 5, lost async page write
 [  600.960622] Buffer I/O error on dev nullb0, logical block 6, lost async page write
 [  600.961587] Buffer I/O error on dev nullb0, logical block 7, lost async page write
 [  600.962529] Buffer I/O error on dev nullb0, logical block 8, lost async page write
 [  600.963473] Buffer I/O error on dev nullb0, logical block 9, lost async page write
 [  600.964574] blk_update_request: I/O error, dev nullb0, sector 256 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.966079] blk_update_request: I/O error, dev nullb0, sector 504 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.967897] blk_update_request: I/O error, dev nullb0, sector 752 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.969464] blk_update_request: I/O error, dev nullb0, sector 1000 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.972423] blk_update_request: I/O error, dev nullb0, sector 1248 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.975262] blk_update_request: I/O error, dev nullb0, sector 1496 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.977683] blk_update_request: I/O error, dev nullb0, sector 1744 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  600.979164] blk_update_request: I/O error, dev nullb0, sector 1992 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 # dd of=/dev/null if=/dev/nullb0 bs=4k count=100
 100+0 records in
 100+0 records out
 409600 bytes (410 kB) copied, 0.00286957 s, 143 MB/s
 # dmesg  -c 
 
1.2 Read from the device and expect an error :- 
 # dd of=/dev/null if=/dev/nullb0 bs=4k count=100
 dd: error reading ‘/dev/nullb0’: Input/output error
 92+0 records in
 92+0 records out
 376832 bytes (377 kB) copied, 0.0127975 s, 29.4 MB/s
 # dmesg  -c 
 [  633.362252] print_req_error: 3540 callbacks suppressed
 [  633.362261] blk_update_request: I/O error, dev nullb0, sector 984 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
 [  633.363834] blk_update_request: I/O error, dev nullb0, sector 992 op 0x0:(READ) flags 0x84700 phys_seg 23 prio class 0
 [  633.365366] blk_update_request: I/O error, dev nullb0, sector 1240 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
 [  633.365449] blk_update_request: I/O error, dev nullb0, sector 736 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
 [  633.368981] buffer_io_error: 4087 callbacks suppressed
 [  633.368983] Buffer I/O error on dev nullb0, logical block 92, async page read

2. With patch :-
 # dd if=/dev/zero of=/dev/nullb0 bs=4k count=4096
 4096+0 records in
 4096+0 records out
 16777216 bytes (17 MB) copied, 0.270187 s, 62.1 MB/s
 # dmesg  -c 

2.1 Now write again to generate an error :-
 # dd if=/dev/zero of=/dev/nullb0 bs=4k count=4096
 4096+0 records in
 4096+0 records out
 16777216 bytes (17 MB) copied, 0.464682 s, 36.1 MB/s
 # dmesg  -c 
 [  696.630879] blk_update_request: I/O error, dev nullb0, sector 0 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.632550] Buffer I/O error on dev nullb0, logical block 0, lost async page write
 [  696.633733] blk_update_request: I/O error, dev nullb0, sector 8 op 0x1:(WRITE) flags 0x800 phys_seg 23 prio class 0
 [  696.636239] Buffer I/O error on dev nullb0, logical block 1, lost async page write
 [  696.637996] Buffer I/O error on dev nullb0, logical block 2, lost async page write
 [  696.639718] Buffer I/O error on dev nullb0, logical block 3, lost async page write
 [  696.641455] Buffer I/O error on dev nullb0, logical block 4, lost async page write
 [  696.643151] Buffer I/O error on dev nullb0, logical block 5, lost async page write
 [  696.644821] Buffer I/O error on dev nullb0, logical block 6, lost async page write
 [  696.645827] Buffer I/O error on dev nullb0, logical block 7, lost async page write
 [  696.646828] Buffer I/O error on dev nullb0, logical block 8, lost async page write
 [  696.647843] Buffer I/O error on dev nullb0, logical block 9, lost async page write
 [  696.649017] blk_update_request: I/O error, dev nullb0, sector 192 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.650580] blk_update_request: I/O error, dev nullb0, sector 200 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.652030] blk_update_request: I/O error, dev nullb0, sector 208 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.653491] blk_update_request: I/O error, dev nullb0, sector 216 op 0x1:(WRITE) flags 0x800 phys_seg 23 prio class 0
 [  696.656347] blk_update_request: I/O error, dev nullb0, sector 400 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.658912] blk_update_request: I/O error, dev nullb0, sector 408 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 0
 [  696.661490] blk_update_request: I/O error, dev nullb0, sector 416 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
 [  696.665040] blk_update_request: I/O error, dev nullb0, sector 664 op 0x1:(WRITE) flags 0x4800 phys_seg 31 prio class 0
2.2 Read from the device with no error :- 
 # dd of=/dev/null if=/dev/nullb0 bs=4k count=100
 100+0 records in
 100+0 records out
 409600 bytes (410 kB) copied, 0.00504116 s, 81.3 MB/s
 # dmesg  -c 
 # dmesg  -c
2.3 Read from the device with no error :- 
 # dd of=/dev/null if=/dev/nullb0 bs=4k count=100
 100+0 records in
 100+0 records out
 409600 bytes (410 kB) copied, 0.00435289 s, 94.1 MB/s
 # dmesg  -c

---
 drivers/block/null_blk_main.c | 2 ++
 1 file changed, 2 insertions(+)
diff mbox series

Patch

diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
index 16510795e377..3bf9c05f9825 100644
--- a/drivers/block/null_blk_main.c
+++ b/drivers/block/null_blk_main.c
@@ -606,6 +606,7 @@  static struct nullb_cmd *__alloc_cmd(struct nullb_queue *nq)
 		cmd = &nq->cmds[tag];
 		cmd->tag = tag;
 		cmd->nq = nq;
+		cmd->error = BLK_STS_OK;
 		if (nq->dev->irqmode == NULL_IRQ_TIMER) {
 			hrtimer_init(&cmd->timer, CLOCK_MONOTONIC,
 				     HRTIMER_MODE_REL);
@@ -1385,6 +1386,7 @@  static blk_status_t null_queue_rq(struct blk_mq_hw_ctx *hctx,
 		cmd->timer.function = null_cmd_timer_expired;
 	}
 	cmd->rq = bd->rq;
+	cmd->error = BLK_STS_OK;
 	cmd->nq = nq;
 
 	blk_mq_start_request(bd->rq);