From owner-freebsd-scsi@FreeBSD.ORG  Fri Nov  5 18:51:03 2010
Return-Path: <owner-freebsd-scsi@FreeBSD.ORG>
Delivered-To: freebsd-scsi@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7D55F106566B;
	Fri,  5 Nov 2010 18:51:03 +0000 (UTC)
	(envelope-from mavbsd@gmail.com)
Received: from mail-bw0-f54.google.com (mail-bw0-f54.google.com
	[209.85.214.54])
	by mx1.freebsd.org (Postfix) with ESMTP id A50328FC1D;
	Fri,  5 Nov 2010 18:51:02 +0000 (UTC)
Received: by bwz3 with SMTP id 3so2930031bwz.13
	for <multiple recipients>; Fri, 05 Nov 2010 11:51:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:sender:message-id:date:from
	:user-agent:mime-version:to:subject:x-enigmail-version:content-type
	:content-transfer-encoding;
	bh=TKPZQ4B/pYcWI+c0Jv3uhc3o4lpVrFV8bm/BjjSEveU=;
	b=QCooEPeu5hR2Dd1olNCcaH/t8t4A73h731tOp/KgeMPdgmwBMa0fSfNTc1TqTdfBdA
	2FjZ9HfEEOqi4moKS0yf1g8lj8FTCIBAQnnckkx1NMiEwZppuq3O9h7oezWyLXdZXC05
	+pxhgOIiYxdSJATnOxdkx5a/xlWegyJ+fkN/I=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=sender:message-id:date:from:user-agent:mime-version:to:subject
	:x-enigmail-version:content-type:content-transfer-encoding;
	b=B+hLhEM/W247tAT0gszapiOSMYEhx0HqFYsXzd8O8FVvltJNo+aoGbG1NlkSshtAUA
	X1VsuWRir7dz2t5NYzC60+k9ttbHNntrUqUfN0Un7qMIn4pLPIHPIDBpFGg1Lr7Ytsip
	r5A86otQ3zrTXNCuktb2kphe5FB6IysX55OhE=
Received: by 10.204.79.142 with SMTP id p14mr2170956bkk.175.1288983061541;
	Fri, 05 Nov 2010 11:51:01 -0700 (PDT)
Received: from mavbook2.mavhome.dp.ua (pc.mavhome.dp.ua [212.86.226.226])
	by mx.google.com with ESMTPS id d12sm1251680bkw.19.2010.11.05.11.50.59
	(version=SSLv3 cipher=RC4-MD5); Fri, 05 Nov 2010 11:51:00 -0700 (PDT)
Sender: Alexander Motin <mavbsd@gmail.com>
Message-ID: <4CD45209.5010607@FreeBSD.org>
Date: Fri, 05 Nov 2010 20:50:49 +0200
From: Alexander Motin <mav@FreeBSD.org>
User-Agent: Thunderbird 2.0.0.23 (X11/20091212)
MIME-Version: 1.0
To: FreeBSD-Current <freebsd-current@freebsd.org>, 
	FreeBSD Stable <freebsd-stable@freebsd.org>, freebsd-scsi@freebsd.org
X-Enigmail-Version: 0.96.0
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: 7bit
Cc: 
Subject: Sense fetching [Was: cdrtools /devel ...]
X-BeenThere: freebsd-scsi@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: SCSI subsystem <freebsd-scsi.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-scsi>,
	<mailto:freebsd-scsi-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-scsi>
List-Post: <mailto:freebsd-scsi@freebsd.org>
List-Help: <mailto:freebsd-scsi-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-scsi>,
	<mailto:freebsd-scsi-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 05 Nov 2010 18:51:03 -0000

Hi.

I've reviewed tests that scgcheck does to SCSI subsystem. It shown
combination of several issues in both CAM, ahci(4) and cdrtools itself.
Several small patches allow us to pass most of that tests:
http://people.freebsd.org/~mav/sense/

ahci_resid.patch: Add support for reporting residual length on data
underrun. SCSI commands often returns results shorter then expected.
Returned value allows application to know/check how much data it really
has. It is also important for sense fetching, as ATAPI and USB devices
return sense as data in response to REQUEST_SENSE command.

sense_resid.patch: When manually requesting sense data (ATAPI or USB),
request only as much data as user requested (not the fixed structure
size), and return respective sense residual length.

pass_autosence.patch: Unless CAM_DIS_AUTOSENSE is set, always fetch
sense if not done by SIM, independently of CAM_PASS_ERR_RECOVER. As soon
as device freeze released before returning to user-level, user-level
application by definition can't reliably fetch sense data if some other
application (like hald) tries to access device same time.

cdrtools.patch: Make libscg (part of cdrtools) on FreeBSD to submit
wanted sense length to CAM and do not clear sense return buffer. It is
mostly cosmetics, important probably only for scgcheck.

Testers and reviewers welcome. I am especially interested in opinion
about pass_autosence.patch -- may be we should lower sense fetching even
deeper, to make it work for all cam_periph_runccb() consumers.

-- 
Alexander Motin