DragonFly BSD
DragonFly bugs List (threaded) for 2004-03
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: More umass problems.


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Thu, 11 Mar 2004 12:12:47 -0800 (PST)

:> Here's that backtrace you wanted:
:
:> http://memory.visualtech.com/dbsd-boot-log.txt
:
:Was that any help in tracking down the bug?
:
:Adam

    Sorry, I'm now officially overloaded with work :-)

    Lets see... yes, that sure does.  It's a case of a timeout being
    installed and the device going away before the timeout occurs.

    Could you please try the follow patch?  It fixes one bug, but the bug
    is not likely responsible for your panic, and it adds a debugging 
    printf that will help me diagnose the problem if the panic still occurs.

					-Matt
					Matthew Dillon 
					<dillon@xxxxxxxxxxxxx>

Index: cam_xpt.c
===================================================================
RCS file: /cvs/src/sys/bus/cam/cam_xpt.c,v
retrieving revision 1.9
diff -u -r1.9 cam_xpt.c
--- cam_xpt.c	30 Jan 2004 05:42:09 -0000	1.9
+++ cam_xpt.c	11 Mar 2004 20:11:24 -0000
@@ -4768,6 +4768,9 @@
 	int s;
 
 	s = splcam();
+	printf("xpt_release_device: %d %08x\n", device->refcount,
+		device->flags);
+
 	if ((--device->refcount == 0)
 	 && ((device->flags & CAM_DEV_UNCONFIGURED) != 0)) {
 		struct cam_devq *devq;
@@ -4776,9 +4779,11 @@
 		 || device->send_ccb_entry.pinfo.index != CAM_UNQUEUED_INDEX)
 			panic("Removing device while still queued for ccbs");
 
-		if ((device->flags & CAM_DEV_REL_TIMEOUT_PENDING) != 0)
-				untimeout(xpt_release_devq_timeout, device,
-					  device->c_handle);
+		if ((device->flags & CAM_DEV_REL_TIMEOUT_PENDING) != 0) {
+			device->flags &= ~CAM_DEV_REL_TIMEOUT_PENDING;
+			untimeout(xpt_release_devq_timeout, device,
+				  device->c_handle);
+		}
 
 		TAILQ_REMOVE(&target->ed_entries, device,links);
 		target->generation++;



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]