kern/112119: system hangs when starts k3b on RELENG_6

Thomas Quinot thomas at FreeBSD.ORG
Fri Apr 27 15:40:14 UTC 2007


The following reply was made to PR kern/112119; it has been noted by GNATS.

From: Thomas Quinot <thomas at FreeBSD.ORG>
To: "Ganbold.TS" <ganbold at micom.mng.net>
Cc: scottl at samsco.org, mjacob at FreeBSD.org, linimon at FreeBSD.org,
	bug-followup at freebsd.org, freebsd-stable at freebsd.org
Subject: Re: kern/112119: system hangs when starts k3b on RELENG_6
Date: Fri, 27 Apr 2007 17:32:18 +0200

 --lrZ03NoBR/3+SXJZ
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 * Ganbold.TS, 2007-04-27 :
 
 > I tried your patch at
 > http://www.freebsd.org/cgi/query-pr.cgi?pr=103602&getpatch=12 and the
 > problem is still the same. Ssytem freezes upon start of k3b.
 > 
 > I also tried your attached patch, which reverts part of rev. 1.42.2.3
 > and the problem is still the same, system hangs when starts k3b.
 
 Thanks, that's useful info. Please try the attached patch instead, which
 reverts another part of 1.42.2.3 (I'm trying to figure out exactly
 *which* part of this change is causing the problem).
 
 Also, were you able to capture system console output at the point where
 the crash occurs? We might have some indications there.
 
 Thomas.
 
 
 --lrZ03NoBR/3+SXJZ
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename=d
 
 Index: atapi-cam.c
 ===================================================================
 RCS file: /space/mirror/ncvs/src/sys/dev/ata/atapi-cam.c,v
 retrieving revision 1.42.2.3
 retrieving revision 1.42.2.2
 diff -u -r1.42.2.3 -r1.42.2.2
 --- atapi-cam.c	29 Mar 2007 20:08:32 -0000	1.42.2.3
 +++ atapi-cam.c	6 Mar 2007 16:56:50 -0000	1.42.2.2
 @@ -697,39 +680,32 @@
  	    csio->ccb_h.status |= CAM_AUTOSNS_VALID;
  	}
      } else if (request->result != 0) {
 -	if ((request->flags & ATA_R_TIMEOUT) != 0) {
 -	    rc = CAM_CMD_TIMEOUT;
 -	} else {
 -	    rc = CAM_SCSI_STATUS_ERROR;
 -	    csio->scsi_status = SCSI_STATUS_CHECK_COND;
 +	rc = CAM_SCSI_STATUS_ERROR;
 +	csio->scsi_status = SCSI_STATUS_CHECK_COND;
  
 -	    if ((csio->ccb_h.flags & CAM_DIS_AUTOSENSE) == 0) {
 +	if ((csio->ccb_h.flags & CAM_DIS_AUTOSENSE) == 0) {
  #if 0
 -		static const int8_t ccb[16] = { ATAPI_REQUEST_SENSE, 0, 0, 0,
 -		    sizeof(struct atapi_sense), 0, 0, 0, 0, 0, 0,
 -		    0, 0, 0, 0, 0 };
 -
 -		bcopy (ccb, request->u.atapi.ccb, sizeof ccb);
 -		request->data = (caddr_t)&csio->sense_data;
 -		request->bytecount = sizeof(struct atapi_sense);
 -		request->transfersize = min(request->bytecount, 65534);
 -		request->timeout = csio->ccb_h.timeout / 1000;
 -		request->retries = 2;
 -		request->flags = ATA_R_QUIET|ATA_R_ATAPI|ATA_R_IMMEDIATE;
 -		hcb->flags |= AUTOSENSE;
 +	    static const int8_t ccb[16] = { ATAPI_REQUEST_SENSE, 0, 0, 0,
 +		sizeof(struct atapi_sense), 0, 0, 0, 0, 0, 0,
 +		0, 0, 0, 0, 0 };
 +
 +	    bcopy (ccb, request->u.atapi.ccb, sizeof ccb);
 +	    request->data = (caddr_t)&csio->sense_data;
 +	    request->bytecount = sizeof(struct atapi_sense);
 +	    request->transfersize = min(request->bytecount, 65534);
 +	    request->timeout = csio->ccb_h.timeout / 1000;
 +	    request->retries = 2;
 +	    request->flags = ATA_R_QUIET|ATA_R_ATAPI|ATA_R_IMMEDIATE;
 +	    hcb->flags |= AUTOSENSE;
  
 -		ata_queue_request(request);
 -		return;
 +	    ata_queue_request(request);
 +	    return;
  #else
 -		/*
 -		 * Use auto-sense data from the ATA layer, if it has
 -		 * issued a REQUEST SENSE automatically and that operation
 -		 * returned without error.
 -		 */
 -		if (request->u.atapi.saved_cmd != 0 && request->error == 0) {
 -		    bcopy (&request->u.atapi.sense, &csio->sense_data, sizeof(struct atapi_sense));
 -		    csio->ccb_h.status |= CAM_AUTOSNS_VALID;
 -		}
 +	    /* The ATA driver has already requested sense for us. */
 +	    if (request->error == 0) {
 +		/* The ATA autosense suceeded. */
 +		bcopy (&request->u.atapi.sense, &csio->sense_data, sizeof(struct atapi_sense));
 +		csio->ccb_h.status |= CAM_AUTOSNS_VALID;
  	    }
  #endif
  	}
 
 --lrZ03NoBR/3+SXJZ--


More information about the freebsd-bugs mailing list