4c1cdd4a7c
commands have completed. It's not OK to force complete any pending commands before we send the REMOVE_DEVICE. Instead, make sure that all pending commands are complete before sending that. By trying to second guess the firmware here, we run the risk of completing commands twice, which leads to corruption. This removes the forced completion of commands introduced in r218811. So it's a partial backout of that commit, but replaces it with a more rebust mechanism. Either these commands will complete due to the TARGET RESET, or they will timeout and be aborted, but they will all complete. Add assert that all commands are complete to REMOVE_DEVICE completion routine. We attempt to assure this programatically, so we shouldn't have any commands in the queue because we've waited for them all. Any commands that make it into our action routine after we mark the target in removal will complete immediately with an error. When we're removing a target that's not a volume, advertise up the stack that it's actually gone, as opposed to having a transient selection error we should retry. Do this both in the action routine, and when we get a notification of an aborted command. We don't do this for volumes because the driver tries hard not to advertise to the OS a volume has disappeared. Apply these changes to both mpr and mps since they are based on quite similar designs. Discussed with: scottl@ Differential Revision: https://reviews.freebsd.org/D23768 |
||
---|---|---|
.. | ||
mpi | ||
mpr_config.c | ||
mpr_ioctl.h | ||
mpr_mapping.c | ||
mpr_mapping.h | ||
mpr_pci.c | ||
mpr_sas_lsi.c | ||
mpr_sas.c | ||
mpr_sas.h | ||
mpr_table.c | ||
mpr_table.h | ||
mpr_user.c | ||
mpr.c | ||
mprvar.h |