aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mpt/mpt.c
diff options
context:
space:
mode:
authorMatt Jacob <mjacob@FreeBSD.org>2006-03-07 17:56:40 +0000
committerMatt Jacob <mjacob@FreeBSD.org>2006-03-07 17:56:40 +0000
commit7a49a0d1fbd9812df28037bb03b5bb8cf2f20c9e (patch)
treef7a56bfd0e7a2774f62bf2cd9609fbf47a21a79a /sys/dev/mpt/mpt.c
parentf09934b191a655137c6e94b4cf2e23b0f8c59125 (diff)
downloadsrc-7a49a0d1fbd9812df28037bb03b5bb8cf2f20c9e.tar.gz
src-7a49a0d1fbd9812df28037bb03b5bb8cf2f20c9e.zip
Add a serial number for requests so we don't just depend on a request pointer
to try and do forensics on what has occurred.
Notes
Notes: svn path=/head/; revision=156400
Diffstat (limited to 'sys/dev/mpt/mpt.c')
-rw-r--r--sys/dev/mpt/mpt.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/dev/mpt/mpt.c b/sys/dev/mpt/mpt.c
index adffd4444a2d..7b3e7377cd9f 100644
--- a/sys/dev/mpt/mpt.c
+++ b/sys/dev/mpt/mpt.c
@@ -1006,6 +1006,7 @@ mpt_free_request(struct mpt_softc *mpt, request_t *req)
req->chain = NULL;
mpt_free_request(mpt, nxt); /* NB: recursion */
}
+ req->serno = 0;
req->ccb = NULL;
req->state = REQ_STATE_FREE;
if (LIST_EMPTY(&mpt->ack_frames)) {
@@ -1042,6 +1043,9 @@ retry:
TAILQ_REMOVE(&mpt->request_free_list, req, links);
req->state = REQ_STATE_ALLOCATED;
req->chain = NULL;
+ if ((req->serno = ++(mpt->cmd_serno)) == 0) {
+ req->serno = ++(mpt->cmd_serno);
+ }
} else if (sleep_ok != 0) {
mpt->getreqwaiter = 1;
mpt_sleep(mpt, &mpt->request_free_list, PUSER, "mptgreq", 0);