From owner-freebsd-stable@FreeBSD.ORG Fri Apr 27 15:32:20 2007 Return-Path: X-Original-To: freebsd-stable@freebsd.org Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5A89D16A409; Fri, 27 Apr 2007 15:32:20 +0000 (UTC) (envelope-from thomas@FreeBSD.ORG) Received: from melamine.cuivre.fr.eu.org (melusine.cuivre.fr.eu.org [82.225.155.84]) by mx1.freebsd.org (Postfix) with ESMTP id CEFFB13C489; Fri, 27 Apr 2007 15:32:19 +0000 (UTC) (envelope-from thomas@FreeBSD.ORG) Received: by melamine.cuivre.fr.eu.org (Postfix, from userid 0) id 7B5625C206; Fri, 27 Apr 2007 17:32:18 +0200 (CEST) Date: Fri, 27 Apr 2007 17:32:18 +0200 From: Thomas Quinot To: "Ganbold.TS" Message-ID: <20070427153218.GA9091@melamine.cuivre.fr.eu.org> References: <20070427150134.64D3713C448@mx1.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="lrZ03NoBR/3+SXJZ" Content-Disposition: inline In-Reply-To: <20070427150134.64D3713C448@mx1.freebsd.org> X-message-flag: WARNING! Using Outlook can damage your computer. User-Agent: Mutt/1.5.11 Cc: freebsd-stable@freebsd.org, mjacob@FreeBSD.org, linimon@FreeBSD.org, bug-followup@freebsd.org Subject: Re: kern/112119: system hangs when starts k3b on RELENG_6 X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Apr 2007 15:32:20 -0000 --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--