On 6/12/21 12:07 AM, Can Guo wrote: > Sigh... I also want my life and work to be easier... How about reducing the number of states and state transitions in the UFS driver? One source of complexity is that ufshcd_err_handler() is scheduled independently of the SCSI error handler and hence may run concurrently with the SCSI error handler. Has the following already been considered? - Call ufshcd_err_handler() synchronously from ufshcd_abort() and ufshcd_eh_host_reset_handler() instead of asynchronously. - Call scsi_schedule_eh() from ufshcd_uic_pwr_ctrl() and ufshcd_check_errors() instead of ufshcd_schedule_eh_work(). These changes will guarantee that all commands have completed or timed out before ufshcd_err_handler() is called. I think that would allow to remove e.g. the following code from the error handler: ufshcd_scsi_block_requests(hba); /* Drain ufshcd_queuecommand() */ down_write(&hba->clk_scaling_lock); up_write(&hba->clk_scaling_lock); Thanks, Bart.