Mike> Er. This is bad; tr_status == 2 means that the command has been
Mike> completed; it shouldn't still be on the busy queue. Can you
Mike> check to make sure you have the right queue here?
Well, it looks like I had the wrong queue before. Blush.
At least this time tr_status is 1. Not sure if that is good or bad
though! :)
Here is the debug output:
db> call twe_printqueues
twe0: status 57007310<CQEMPTY,UCREADY,RQEMPTY,>
twe0: current max
twe0: free 0099 0100
twe0: ready 0000 0000
twe0: busy 0001 0100
twe0: complete 0000 0009
twe0: bioq 0000 0021
twe0: AEN queue head 1 tail 0
ready queue: 0 entries
busy queue: 1 entries
twe0: CMD: request_id 54 opcode <WRITE> size 11 unit 0 host_id 0
twe0: status 0 flags 0x0 count 32 sgl_offset 3
twe0: lba 177770466
twe0: 0: 0xffc4000/4096
twe0: 1: 0x11f85000/4096
twe0: 2: 0x12d66000/4096
twe0: 3: 0x10e87000/4096
twe0: tr_command 0xc1520400/0x174f4400 tr_data 0xce0f4000/0xffc4000,16384
twe0: tr_status 1 tr_flags 0x2 tr_complete 0xc011f1b0 tr_private 0xc9260400
complete queue: 0 entries
This was generated with the code:
void
twe_printqueues(void)
{
struct twe_softc *sc;
struct twe_request *tr = NULL;
int i, s;
s = splbio();
for (i = 0; (sc = devclass_get_softc(twe_devclass, i)) != NULL; i++) {
twe_print_controller(sc);
printf("ready queue: %d entries\n", sc->twe_qstat[TWEQ_READY].q_length);
TAILQ_FOREACH(tr, sc->twe_ready, tr_link) twe_print_request(tr);
printf("busy queue: %d entries\n", sc->twe_qstat[TWEQ_BUSY].q_length);
TAILQ_FOREACH(tr, sc->twe_busy, tr_link) twe_print_request(tr);
printf("complete queue: %d entries\n", sc->twe_qstat[TWEQ_COMPLETE].q_length);
TAILQ_FOREACH(tr, sc->twe_complete, tr_link) twe_print_request(tr);
}
splx(s);
}
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-stable" in the body of the message