freebsd-nq/sbin
Kenneth D. Merry a1736be349 Improve camcontrol(8) handling of drive defect data.
This includes a new summary mode (-s) for camcontrol defects that
quickly tells the user the most important thing: how many defects
are in the requested list.  The actual location of the defects is
less important.

Modern drives frequently have more than the 8191 defects that can
be reported by the READ DEFECT DATA (10) command.  If they don't
have that many grown defects, they certainly have more than 8191
defects in the primary (i.e. factory) defect list.

The READ DEFECT DATA (12) command allows for longer parameter
lists, as well as indexing into the list of defects, and so allows
reporting many more defects.

This has been tested with HGST drives and Seagate drives, but
does not fully work with Seagate drives.  Once I have a Seagate
spec I may be able to determine whether it is possible to make it
work with Seagate drives.

scsi_da.h:	Add a definition for the new long block defect
		format.

		Add bit and mask definitions for the new extended
		physical sector and bytes from index defect
		formats.

		Add a prototype for the new scsi_read_defects() CDB
		building function.

scsi_da.c:	Add a new scsi_read_defects() CDB building function.
		camcontrol(8) was previously composing CDBs manually.
		This is long overdue.

camcontrol.c:	Revamp the camcontrol defects subcommand.  We now
		go through multiple stages in trying to get defect
		data off the drive while avoiding various drive
		firmware quirks.

		We start off by requesting the defect header with
		the 10 byte command.  If we're in summary mode (-s)
		and the drive reports fewer defects than can be
		represented in the 10 byte header, we're done.
		Otherwise, we know that we need to issue the
		12 byte command if the drive reports the maximum
		number of defects.

		If we're in summary mode, we're done if we get a
		good response back when asking for the 12 byte header.

		If the user has asked for the full list, then we
		use the address descriptor index field in the 12
		byte CDB to step through the list in 64K chunks.
		64K is small enough to work with most any ancient
		or modern SCSI controller.

		Add support for printing the new long block defect
		format, as well as the extended physical sector and
		bytes from index formats.  I don't have any drives
		that support the new formats.

		Add a hexadecimal output format that can be turned
		on with -X.

		Add a quiet mode (-q) that can be turned on with
		the summary mode (-s) to just print out a number.

		Revamp the error detection and recovery code for
		the defects command to work with HGST drives.

		Call the new scsi_read_defects() CDB building
		function instead of rolling the CDB ourselves.

		Pay attention to the residual from the defect list
		request when printing it out, so we don't run off
		the end of the list.

		Use the new scsi_nv library routines to convert
		from strings to numbers and back.

camcontrol.8:	Document the new defect formats (longblock, extbfi,
		extphys) and command line options (-q, -s, -S and
		-X) for the defects subcommand.

		Explain a little more about what drives generally
		do and don't support.

Sponsored by:	Spectra Logic
MFC after:	1 week
2015-01-08 16:58:40 +00:00
..
adjkerntz
atm Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
badsect Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
bsdlabel mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
camcontrol Improve camcontrol(8) handling of drive defect data. 2015-01-08 16:58:40 +00:00
casperd Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ccdconfig Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
clri
comcontrol
conscontrol
ddb Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
devd Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
devfs
dhclient mdoc: improvements to SEE ALSO. 2014-12-27 08:22:58 +00:00
dmesg Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
dump
dumpfs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
dumpon
etherswitchcfg
fdisk Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
fdisk_pc98 Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ffsinfo Adjust printf format specifiers for dev_t and ino_t in user space. 2014-12-17 07:10:48 +00:00
fsck Recommit r274750. 2014-11-21 01:43:55 +00:00
fsck_ffs Remove old ioctl use and support, once and for all. 2015-01-06 05:28:37 +00:00
fsck_msdosfs
fsdb Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
fsirand Remove old ioctl use and support, once and for all. 2015-01-06 05:28:37 +00:00
gbde Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
geom mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
ggate Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
growfs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
gvinum Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
hastctl Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
hastd mdoc: paragraph improvements. 2015-01-04 12:49:24 +00:00
ifconfig Integrate sbin/ifconfig/tests from NetBSD into atf/kyua 2015-01-04 22:25:16 +00:00
init Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ipf Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ipfw mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
iscontrol mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
kldconfig
kldload
kldstat
kldunload
ldconfig
md5 Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
mdconfig Convert sbin/mdconfig/tests from prove format tests to ATF format tests 2014-11-27 06:04:00 +00:00
mdmfs
mknod
mksnap_ffs
mount mdoc: improvements to SEE ALSO. 2014-12-27 08:22:58 +00:00
mount_cd9660 Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
mount_fusefs mdoc: improvements to SEE ALSO. 2014-12-27 08:22:58 +00:00
mount_msdosfs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
mount_nfs mdoc: remove EOL whitespace. 2014-12-29 13:50:59 +00:00
mount_nullfs
mount_udf Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
mount_unionfs
nandfs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
natd Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
newfs Remove old ioctl use and support, once and for all. 2015-01-06 05:28:37 +00:00
newfs_msdos Remove old ioctl use and support, once and for all. 2015-01-06 05:28:37 +00:00
newfs_nandfs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
nfsiod
nos-tun
nvmecontrol
pfctl Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
pflogd Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ping Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
ping6 Add ability to not specify a zone identifier twice, when both source and 2014-12-16 14:59:20 +00:00
quotacheck Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
rcorder Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
reboot Reference uefi(8) from i386 boot(8) 2014-11-14 20:12:33 +00:00
recoverdisk
resolvconf
restore
route Finish r274175: do control plane MTU tracking. 2014-11-17 01:05:29 +00:00
routed Belatedly commit the patch for SA-14:21 to head. It was not committed to 2015-01-03 01:52:06 +00:00
rtsol
savecore Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
sconfig
setkey Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
shutdown sbin/shutdown: Support time units as in 'shutdown -r +5sec' 2014-12-16 08:29:02 +00:00
spppcontrol
sunlabel Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
swapon Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
sysctl Fix inverted logic introduced in r272154. 2014-12-01 20:51:01 +00:00
tests
tunefs Convert sbin/ to LIBADD 2014-11-25 11:23:12 +00:00
umount Cross-reference autounmountd(8) from umount(8). 2014-11-22 16:46:00 +00:00
Makefile
Makefile.amd64
Makefile.arm
Makefile.i386
Makefile.inc
Makefile.mips
Makefile.pc98
Makefile.sparc64