Notify CAM on state* change to a logical volume not status. This resolves

the issues reported regarding camcontrol devlist not showing the rebuild
states of volumes unless an explicit camcontrol rescan was executed.

PR:	kern/171650
Reviewed by:	scottl@freebsd.org
Obtained from:	Yahoo! Inc.
MFC after:	2 weeks
This commit is contained in:
sbruno 2013-04-05 21:13:39 +00:00
parent 49b5e1ded6
commit 26c6d60005

View File

@ -3959,7 +3959,8 @@ static void
ciss_notify_logical(struct ciss_softc *sc, struct ciss_notify *cn)
{
struct ciss_ldrive *ld;
int ostatus, bus, target;
int bus, target;
int rescan_ld;
debug_called(2);
@ -3982,7 +3983,6 @@ 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;
@ -3990,7 +3990,9 @@ ciss_notify_logical(struct ciss_softc *sc, struct ciss_notify *cn)
/*
* Have CAM rescan the drive if its status has changed.
*/
if (ostatus != ld->cl_status) {
rescan_ld = (cn->data.logical_status.previous_state !=
cn->data.logical_status.new_state) ? 1 : 0;
if (rescan_ld) {
ld->cl_update = 1;
ciss_notify_rescan_logical(sc);
}