2.5.31 qlogic error "this should not happen"
While running bonnie++ with 2.5.31 and 2.5.31-mm1, a quad xeon with QLogic Corp. QLA2200 (rev 05) stopped responding. These were the last lines in /var/log/messages before the box was rebooted.
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 7d
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 18
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 33
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 33
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 69
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 69
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 4
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 1f
kernel: qlogicfc0 : no handle slots, this should not happen.
kernel: hostdata->queued is 6, in_ptr: 3a
This is the qlogic config:
# CONFIG_SCSI_QLOGIC_FAS is not setCONFIG_SCSI_QLOGIC_ISP=yCONFIG_SCSI_QLOGIC_FC=y
# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
The same config works fine on 2.4.
Anyone know if the newer qlogic driver compatible with 2.5?
http://marc.theaimsgroup.com/?l=linux-kernel&m=102919565520122&w=2
Signature · 2 lines
Randy Hron http://home.earthlink.net/~rwhron/kernel/bigbox.html
Quoted 3 lines
Anyone know if the newer qlogic driver compatible with 2.5?
http://marc.theaimsgroup.com/?l=linux-kernel&m=102919565520122&w=2
i forward-ported their (beta) driver to 2.5 and posted the diff to l-k at the time.
cheers,
lincoln.
Quoted 7 lines · On Thu, Aug 22, 2002 at 06:39:16PM -0400, [email protected] wrote:
While running bonnie++ with 2.5.31 and 2.5.31-mm1, a quad xeon with QLogic Corp. QLA2200 (rev 05) stopped responding. These were the last lines in
/var/log/messagesbefore the box was rebooted.kernel: qlogicfc0 : no handle slots, this should not happen.
kernel:hostdata->queuedis 6,in_ptr: 7d
Hmmm...sounds like no one bothered to correct the lock usage in this driver after the 2.5 kernel switched to per device queue locks instead of the global io_request_lock usage that this driver depended on to be safe. Try applying the attached patch and see if it helps you out any.
Signature · 4 lines
Doug Ledford <[email protected]> 919-754-3700 x44233 Red Hat, Inc. 1801 Varsity Dr. Raleigh, NC 27606
drivers/scsi/qlogicfc.c +2 -15
@@ -1343,18 +1343,11 @@ num_free =QLOGICFC_REQ_QUEUE_LEN -REQ_QUEUE_DEPTH (in_ptr, out_ptr); num_free = (num_free >2 ) ? num_free -2 :0 ; - host->can_queue = hostdata->queued + num_free; + host->can_queue = host->host_busy + num_free;if (host->can_queue >QLOGICFC_REQ_QUEUE_LEN ) host->can_queue =QLOGICFC_REQ_QUEUE_LEN ; host->sg_tablesize =QLOGICFC_MAX_SG (num_free); -/* this is really gross */ -if (host->can_queue <= host->host_busy){ -if (host->can_queue+2 < host->host_busy) -DEBUG (printk ("qlogicfc%d.c crosses its fingers.\n" , hostdata->host_id)); - host->can_queue = host->host_busy +1 ; - } -LEAVE ("isp2x00_queuecommand" );return 0 ;
@@ -1623,17 +1616,11 @@ num_free =QLOGICFC_REQ_QUEUE_LEN -REQ_QUEUE_DEPTH (in_ptr, out_ptr); num_free = (num_free >2 ) ? num_free -2 :0 ; - host->can_queue = hostdata->queued + num_free; + host->can_queue = host->host_busy + num_free;if (host->can_queue >QLOGICFC_REQ_QUEUE_LEN ) host->can_queue =QLOGICFC_REQ_QUEUE_LEN ; host->sg_tablesize =QLOGICFC_MAX_SG (num_free); -if (host->can_queue <= host->host_busy){ -if (host->can_queue+2 < host->host_busy) -DEBUG (printk ("qlogicfc%d : crosses its fingers.\n" , hostdata->host_id)); - host->can_queue = host->host_busy +1 ; - } -outw (HCCR_CLEAR_RISC_INTR , host->io_port +HOST_HCCR );LEAVE_INTR ("isp2x00_intr_handler" ); }