1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-03 09:00:21 +00:00

r249170 was just plain wrong. The effect of the change is to always

delete a logic volume on status change which is NOT what we want here.

The original code is correct in that when the volume changes status
the driver will only delete the volume if the status is one of the
fatal errors.  A drive failure in a mirrored volume is NOT a situtation
where the volume should dissapear.

Reported on freebsd-scsi@:
https://lists.freebsd.org/pipermail/freebsd-scsi/2015-September/006800.html

MFC after:	3 days
This commit is contained in:
Sean Bruno 2015-09-03 17:46:57 +00:00
parent 880c41ba36
commit e6aa141248
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=287437

View File

@ -4016,8 +4016,7 @@ static void
ciss_notify_logical(struct ciss_softc *sc, struct ciss_notify *cn)
{
struct ciss_ldrive *ld;
int bus, target;
int rescan_ld;
int ostatus, bus, target;
debug_called(2);
@ -4040,6 +4039,7 @@ ciss_notify_logical(struct ciss_softc *sc, struct ciss_notify *cn)
/*
* Update our idea of the drive's status.
*/
ostatus = ciss_decode_ldrive_status(cn->data.logical_status.previous_state);
ld->cl_status = ciss_decode_ldrive_status(cn->data.logical_status.new_state);
if (ld->cl_lstatus != NULL)
ld->cl_lstatus->status = cn->data.logical_status.new_state;
@ -4047,9 +4047,7 @@ ciss_notify_logical(struct ciss_softc *sc, struct ciss_notify *cn)
/*
* Have CAM rescan the drive if its status has changed.
*/
rescan_ld = (cn->data.logical_status.previous_state !=
cn->data.logical_status.new_state) ? 1 : 0;
if (rescan_ld) {
if (ostatus != ld->cl_status) {
ld->cl_update = 1;
ciss_notify_rescan_logical(sc);
}