vdisk_fileio, async_mode: Fix scheduling while atomic

This patch should fix the following bug:

BUG: scheduling while atomic: ...
...
Call Trace:
 <IRQ>
 dump_stack+0x6d/0x8b
 __schedule_bug.cold.94+0x4c/0x5a
 __schedule+0x51d/0x606
 schedule+0x33/0x9a
 __lock_sock+0x7d/0xbc
 ? finish_wait+0x80/0x78
 lock_sock_nested+0x64/0x66
 do_tcp_setsockopt.isra.47+0x7d/0xbc4
 ? scst_free_cmd+0x171/0x220 [scst]
 tcp_setsockopt+0x34/0x36
 sock_common_setsockopt+0x1a/0x1c
 cmnd_tx_start+0x94/0x210 [iscsi_scst]
 iscsi_send+0x2cd/0x800 [iscsi_scst]
 iscsi_tcp_send_locally+0xe9/0x1f0 [iscsi_scst]
 ? iscsi_tcp_send_data_rsp+0x5a/0x90 [iscsi_scst]
 iscsi_xmit_response+0xfe/0x230 [iscsi_scst]
 scst_process_active_cmd+0x742/0x1740 [scst]
 ? try_to_wake_up+0x1dd/0x5ac
 scst_process_redirect_cmd+0x128/0x300 [scst]
 ? insert_work+0xa8/0xc2
 scst_cmd_done_local+0x7f/0x100 [scst]
 ? rvmio_transfer_data+0xb0/0xb0 [scst_vdisk]
 fileio_async_complete+0x46/0x100 [scst_vdisk]
 iomap_dio_complete_work+0x29/0x2e
 iomap_dio_bio_end_io+0xed/0xff
 bio_endio+0xda/0x12e
 blk_update_request+0xea/0x3a1
 scsi_end_request+0x30/0x111
 scsi_io_completion+0x7c/0x4e1
 ? virtscsi_remove+0xc0/0xc0 [virtio_scsi]
 scsi_finish_command+0xe7/0x11a
 scsi_softirq_done+0x75/0xde
 blk_done_softirq+0xa5/0xcd
 __do_softirq+0xe1/0x2e7
 ? sched_clock+0x9/0xd
 irq_exit+0xf3/0xf8
 do_IRQ+0x59/0xe0
 common_interrupt+0xf/0x1d2
 </IRQ>
RIP: 0010:native_safe_halt+0x12/0x14
...
This commit is contained in:
Chesnokov Gleb
2021-12-08 18:07:35 +03:00
committed by Gleb Chesnokov
parent 33b872d055
commit 414805bb4d

View File

@@ -3224,7 +3224,7 @@ static void fileio_async_complete(struct kiocb *iocb, long ret
}
}
cmd->completed = 1;
cmd->scst_cmd_done(cmd, SCST_CMD_STATE_DEFAULT, SCST_CONTEXT_SAME);
cmd->scst_cmd_done(cmd, SCST_CMD_STATE_DEFAULT, scst_estimate_context());
}
static enum compl_status_e fileio_exec_async(struct vdisk_cmd_params *p)