Mercurial > illumos > illumos-gate
changeset 11635:2d03b93bcbc0
6922016 kernel heap corruption detected
6922193 panic[cpu21]/thread=ffffff0021494c60: mutex_enter: bad mutex, lp=ffffff0552e2c708 owner=deadbeefdead
author | Srikanth, Ramana <Ramana.Srikanth@Sun.COM> |
---|---|
date | Mon, 08 Feb 2010 17:04:51 -0500 |
parents | ae6532b08887 |
children | 92140a345a02 |
files | usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c Mon Feb 08 10:05:14 2010 -0800 +++ b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c Mon Feb 08 17:04:51 2010 -0500 @@ -1672,7 +1672,7 @@ do { xp = pwp->targets[target]; - if (xp == NULL) { + if ((xp == NULL) || (STAILQ_EMPTY(&xp->wq))) { if (++target == pwp->max_dev) { target = 0; } @@ -1681,11 +1681,12 @@ mutex_exit(&pwp->lock); rval = pmcs_scsa_wq_run_one(pwp, xp); + mutex_enter(&pwp->lock); + if (rval == B_FALSE) { - mutex_enter(&pwp->lock); break; } - mutex_enter(&pwp->lock); + if (++target == pwp->max_dev) { target = 0; } @@ -2181,6 +2182,12 @@ if (xp->dev_gone) { mutex_exit(&xp->statlock); if (!dead) { + mutex_enter(&xp->aqlock); + STAILQ_REMOVE(&xp->aq, sp, pmcs_cmd, cmd_next); + mutex_exit(&xp->aqlock); + pmcs_prt(pwp, PMCS_PRT_DEBUG1, pptr, xp, + "%s: Removing cmd 0x%p (htag 0x%x) from aq", + __func__, (void *)sp, sp->cmd_tag); mutex_enter(&pwp->cq_lock); STAILQ_INSERT_TAIL(&pwp->cq, sp, cmd_next); mutex_exit(&pwp->cq_lock); @@ -2643,6 +2650,12 @@ if (xp->dev_gone) { mutex_exit(&xp->statlock); if (!dead) { + mutex_enter(&xp->aqlock); + STAILQ_REMOVE(&xp->aq, sp, pmcs_cmd, cmd_next); + mutex_exit(&xp->aqlock); + pmcs_prt(pwp, PMCS_PRT_DEBUG1, pptr, xp, + "%s: Removing cmd 0x%p (htag 0x%x) from aq", + __func__, (void *)sp, sp->cmd_tag); mutex_enter(&pwp->cq_lock); STAILQ_INSERT_TAIL(&pwp->cq, sp, cmd_next); mutex_exit(&pwp->cq_lock);