mbox series

[v6,00/10] scsi:scsi_debug: Add error injection for single device

Message ID 20231010092051.608007-1-haowenchao2@huawei.com (mailing list archive)
Headers show
Series scsi:scsi_debug: Add error injection for single device | expand

Message

Wenchao Hao Oct. 10, 2023, 9:20 a.m. UTC
The original error injection mechanism was based on scsi_host which
could not inject fault for a single SCSI device.

This patchset provides the ability to inject errors for a single
SCSI device. Now we support inject timeout errors, queuecommand
errors, and hostbyte, driverbyte, statusbyte, and sense data for
specific SCSI Command. Two new error injection is defined to make
abort command or reset LUN failed.

Besides error injection for single device, this patchset add a
new interface to make reset target failed for each scsi_target.

The first two patch add a debugfs interface to add and inquiry single
device's error injection info; the third patch defined how to remove
an injection which has been added. The following 5 patches use the
injection info and generate the related error type. The last two just
add a new interface to make reset target failed and control
scsi_device's allow_restart flag.

V6:
  - Check return value of debugfs_create_xxx() and print error log
    if debugfs_create_xxx() return error
  - Fix typo in description of patch7 and patch8
  - Update the description of patch10

V5:
  - Using rcu list to sync between error inject add, remove and check
  - Add module parameter "allow_restart" to control scsi_device's
    allow_restart flag

V4:
  - Fix BUG_ON triggered by schedule in atomic context when rmmod scsi_debug
    Closes: https://lore.kernel.org/oe-lkp/202308031027.5941ce5f-oliver.sang@intel.com

V3:
  - Add two more error types to fail abort command and lun reset
  - Fix memleak when rmmod scsi_debug without clearing errors injected
  - Fix memkeak because did not implement release in sdebug_error_fops
  - Fix possible NULL point access in scsi_debug_slave_destroy
  - Move specific error type's description to each single patch which
    implement this error type
  - Add interface to make target reset fail

V2:
  - Using debugfs rather than sysfs attribute interface to manage error

Wenchao Hao (10):
  scsi: scsi_debug: create scsi_debug directory in the debugfs filesystem
  scsi: scsi_debug: Add interface to manage single device's error inject
  scsi: scsi_debug: Define grammar to remove added error injection
  scsi: scsi_debug: timeout command if the error is injected
  scsi: scsi_debug: Return failed value if the error is injected
  scsi: scsi_debug: set command's result and sense data if the error is injected
  scsi: scsi_debug: Add new error injection abort failed
  scsi: scsi_debug: Add new error injection reset lun failed
  scsi: scsi_debug: Add debugfs interface to fail target reset
  scsi: scsi_debug: Add param to control sdev's allow_restart

 drivers/scsi/scsi_debug.c | 575 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 570 insertions(+), 5 deletions(-)

Comments

Wenchao Hao Oct. 16, 2023, 2:09 a.m. UTC | #1
On 2023/10/10 17:20, Wenchao Hao wrote:
> The original error injection mechanism was based on scsi_host which
> could not inject fault for a single SCSI device.
> 
> This patchset provides the ability to inject errors for a single
> SCSI device. Now we support inject timeout errors, queuecommand
> errors, and hostbyte, driverbyte, statusbyte, and sense data for
> specific SCSI Command. Two new error injection is defined to make
> abort command or reset LUN failed.
> 
> Besides error injection for single device, this patchset add a
> new interface to make reset target failed for each scsi_target.
> 
> The first two patch add a debugfs interface to add and inquiry single
> device's error injection info; the third patch defined how to remove
> an injection which has been added. The following 5 patches use the
> injection info and generate the related error type. The last two just
> add a new interface to make reset target failed and control
> scsi_device's allow_restart flag.
> 

Friendly ping...

> V6:
>    - Check return value of debugfs_create_xxx() and print error log
>      if debugfs_create_xxx() return error
>    - Fix typo in description of patch7 and patch8
>    - Update the description of patch10
> 
> V5:
>    - Using rcu list to sync between error inject add, remove and check
>    - Add module parameter "allow_restart" to control scsi_device's
>      allow_restart flag
> 
> V4:
>    - Fix BUG_ON triggered by schedule in atomic context when rmmod scsi_debug
>      Closes: https://lore.kernel.org/oe-lkp/202308031027.5941ce5f-oliver.sang@intel.com
> 
> V3:
>    - Add two more error types to fail abort command and lun reset
>    - Fix memleak when rmmod scsi_debug without clearing errors injected
>    - Fix memkeak because did not implement release in sdebug_error_fops
>    - Fix possible NULL point access in scsi_debug_slave_destroy
>    - Move specific error type's description to each single patch which
>      implement this error type
>    - Add interface to make target reset fail
> 
> V2:
>    - Using debugfs rather than sysfs attribute interface to manage error
> 
> Wenchao Hao (10):
>    scsi: scsi_debug: create scsi_debug directory in the debugfs filesystem
>    scsi: scsi_debug: Add interface to manage single device's error inject
>    scsi: scsi_debug: Define grammar to remove added error injection
>    scsi: scsi_debug: timeout command if the error is injected
>    scsi: scsi_debug: Return failed value if the error is injected
>    scsi: scsi_debug: set command's result and sense data if the error is injected
>    scsi: scsi_debug: Add new error injection abort failed
>    scsi: scsi_debug: Add new error injection reset lun failed
>    scsi: scsi_debug: Add debugfs interface to fail target reset
>    scsi: scsi_debug: Add param to control sdev's allow_restart
> 
>   drivers/scsi/scsi_debug.c | 575 +++++++++++++++++++++++++++++++++++++-
>   1 file changed, 570 insertions(+), 5 deletions(-)
>
Martin K. Petersen Oct. 17, 2023, 12:53 a.m. UTC | #2
Wenchao,

> The original error injection mechanism was based on scsi_host which
> could not inject fault for a single SCSI device.

Applied to 6.7/scsi-staging, thanks!
Martin K. Petersen Oct. 25, 2023, 2:19 a.m. UTC | #3
On Tue, 10 Oct 2023 17:20:41 +0800, Wenchao Hao wrote:

> The original error injection mechanism was based on scsi_host which
> could not inject fault for a single SCSI device.
> 
> This patchset provides the ability to inject errors for a single
> SCSI device. Now we support inject timeout errors, queuecommand
> errors, and hostbyte, driverbyte, statusbyte, and sense data for
> specific SCSI Command. Two new error injection is defined to make
> abort command or reset LUN failed.
> 
> [...]

Applied to 6.7/scsi-queue, thanks!

[01/10] scsi: scsi_debug: create scsi_debug directory in the debugfs filesystem
        https://git.kernel.org/mkp/scsi/c/6e2d15f59b1c
[02/10] scsi: scsi_debug: Add interface to manage single device's error inject
        https://git.kernel.org/mkp/scsi/c/a9996d722b11
[03/10] scsi: scsi_debug: Define grammar to remove added error injection
        https://git.kernel.org/mkp/scsi/c/962d77cd4c85
[04/10] scsi: scsi_debug: timeout command if the error is injected
        https://git.kernel.org/mkp/scsi/c/32be8b6e22eb
[05/10] scsi: scsi_debug: Return failed value if the error is injected
        https://git.kernel.org/mkp/scsi/c/33bccf55c20b
[06/10] scsi: scsi_debug: set command's result and sense data if the error is injected
        https://git.kernel.org/mkp/scsi/c/33592274321e
[07/10] scsi: scsi_debug: Add new error injection abort failed
        https://git.kernel.org/mkp/scsi/c/5551ce928805
[08/10] scsi: scsi_debug: Add new error injection reset lun failed
        https://git.kernel.org/mkp/scsi/c/0267811625e1
[09/10] scsi: scsi_debug: Add debugfs interface to fail target reset
        https://git.kernel.org/mkp/scsi/c/f084fe52c640
[10/10] scsi: scsi_debug: Add param to control sdev's allow_restart
        https://git.kernel.org/mkp/scsi/c/573c2d066eb9