Message ID | 20200409101026.17872-1-bstroesser@ts.fujitsu.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 066f79a5fd6d1b9a5cc57b5cd445b3e4bb68a5b2 |
Headers | show |
Series | target: tcmu: reset_ring should reset TCMU_DEV_BIT_BROKEN | expand |
On 04/09/2020 05:10 AM, Bodo Stroesser wrote: > In case command ring buffer becomes inconsistent, tcmu > sets device flag TCMU_DEV_BIT_BROKEN. > If the bit is set, tcmu rejects new commands from lio core > with TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, and no longer > processes completions from the ring. > The reset_ring attribute can be used to completely clean up > the command ring, so after reset_ring the ring no longer is > inconsistent. > > Therefore reset_ring also should reset bit TCMU_DEV_BIT_BROKEN > to allow normal processing. > > Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com> > --- > drivers/target/target_core_user.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c > index 0b9dfa6b17bc..f769bb1e3735 100644 > --- a/drivers/target/target_core_user.c > +++ b/drivers/target/target_core_user.c > @@ -2073,6 +2073,7 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level) > mb->cmd_tail = 0; > mb->cmd_head = 0; > tcmu_flush_dcache_range(mb, sizeof(*mb)); > + clear_bit(TCMU_DEV_BIT_BROKEN, &udev->flags); > > del_timer(&udev->cmd_timer); > > Acked-by: Mike Christie <mchristi@redhat.com>
Bodo, > In case command ring buffer becomes inconsistent, tcmu sets device > flag TCMU_DEV_BIT_BROKEN. If the bit is set, tcmu rejects new > commands from lio core with TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, > and no longer processes completions from the ring. The reset_ring > attribute can be used to completely clean up the command ring, so > after reset_ring the ring no longer is inconsistent. > > Therefore reset_ring also should reset bit TCMU_DEV_BIT_BROKEN to > allow normal processing. Applied to 5.7/scsi-fixes, thanks!
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c index 0b9dfa6b17bc..f769bb1e3735 100644 --- a/drivers/target/target_core_user.c +++ b/drivers/target/target_core_user.c @@ -2073,6 +2073,7 @@ static void tcmu_reset_ring(struct tcmu_dev *udev, u8 err_level) mb->cmd_tail = 0; mb->cmd_head = 0; tcmu_flush_dcache_range(mb, sizeof(*mb)); + clear_bit(TCMU_DEV_BIT_BROKEN, &udev->flags); del_timer(&udev->cmd_timer);
In case command ring buffer becomes inconsistent, tcmu sets device flag TCMU_DEV_BIT_BROKEN. If the bit is set, tcmu rejects new commands from lio core with TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, and no longer processes completions from the ring. The reset_ring attribute can be used to completely clean up the command ring, so after reset_ring the ring no longer is inconsistent. Therefore reset_ring also should reset bit TCMU_DEV_BIT_BROKEN to allow normal processing. Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com> --- drivers/target/target_core_user.c | 1 + 1 file changed, 1 insertion(+)