The author of sg3_utils would like to thank the following people who
have made contributions:


Andries Brouwer <aebr at win dot tue dot nl> rewrite of isosize (original
        written by Joerg Schilling). isosize is now found in the util-linux
        package and in the archive directory of this package.

Bart Van Assche <bart dot vanassche at sandisk dot com>
        harden (improve) code in rescan-scsi-bus.sh [20160224]
        configure.ac and Makefile.am cleanup plus sgp_dd code
        to replace pthread_cancel with pthread_kill [20180102]
        sg_xcopy: fix identification CSCD descriptor's designator
        length, fix CSCD descriptor mask [20210902]

Bean Huo <beanhuo dot micron dot com>
        sg_write_buffer: patch to allow comma or period separated bytes
        (in decimal or hex) to be decoded when given as standard input.

Brian Bunker <Brian dot Bunker at netapp dot com> contributed
        sg_read_block_limits and the target reset addition to sg_reset
        [20090615]

Christophe Varoqui <christophe dot varoqui at free dot fr> original sg_rtpg
        [20041229]

Clayton Weaver <cgweav at email dot com> contributed safe_strerror().

Dan Horak <dhorak at redhat dot com> website support for this package and
        others. Lot of fixes, recently man pages [20140128]

Dave Johnson <ddj at ccv dot brown dot edu> improved disk defect list
        handling [20051218]

Dave Williams <dave at opensourcesolutions dot co dot uk> help with
        sgp_dd especially and "> 0x7fffffff" with sg*_dd [20060303]

Eric Schwartz <emschwar at debian dot org> who wrote these man pages:
        sg_readcap, sg_reset, sg_scan, sg_start, sg_test_rwbuf,
        sg_turs and sginfo

Eric Seppanen <eric @ purestorage dot com> borrowed ideas from alternate
        implementation of sg_compare_and_write [20130823]

Eric Youngdale <eric at andante dot org> author of scsi_info on which sginfo
        is based.

Fabrice Fontaine <fontaine dot fabrice at gmail dot com>
        various build fixes [20211116]

Frank Jansen <fjansen at egenera dot com>: additions to sg_scan; contributed
        code for '--alloc-length=' option in sg_persist [20090402]

Grant Grundler <grundler at parisc-linux dot org> co-author of blk512-linux
        that has become sg_format [20050201]

Greg Inozemtsev <greg at purestorage dot com>
        extensions to sg_xcopy [20130207+20130816]

Hannes Reinecke <hare at suse dot de>
        contributed sg_rdac, (and some corresponding VPD entries to
        sg_vpd_vendor), sg_stpg and sg_safte [20071013+20130110]
        sg_referrals [20100906]
        sg_inq --export option [20120220+20130109]
        sg_xcopy+sg_copy_results [20120322]
        rescan-scsi-bus.sh patches to Kurt Garloff's v1.57 [20130715]
        55-scsi-sg3_id.rules + 58-scsi-sg3_symlink.rules [20140527]
        sg_sat_read_gplog [20141107]
        sg_inq --only option plus --inhex fixes [20180102]

Hayashi Naoyuki <titan at culzean dot org>
        port to Tru64 [20060127]

Heiko Eissfeldt <heiko at colossus dot escape dot de> sg based example
        programs for the original sg driver

Ilan Steinberg <ilan dot steinberg at kaminario dot com>
        sg_xcopy: contributed --on_src and --on_dst options [20130505]

Ingo van Lil <inguin at gmx dot de>
        contributed sg_raw [20070331]

James Bottomley <jejb at parisc-linux dot org> co-author of blk512-linux
        that has become sg_format [20050201]

Jan Engelhardt <jengelh at inai dot de>
        autotools clean-up [20150216]

Joe Krahn <krahn at niehs dot nih dot gov> help with int64_t cleanup
        [20071219]

Kai Makisara <Kai dot Makisara at kolumbus dot fi> help with tape
        minor numbers in lk 2.6 plus earlier advice [20081008]

Kurt Garloff: original sg_start and sg_test_rwbuf.
        Additions to sginfo and sg_map. Author of rescan-scsi-bus.sh with
        latest update to v1.57 [20130331]

Lars Marowsky-Brée <lmb at suse dot de> contributed Unit Path Report VPD
        page decoding in sg_inq (vendor specific: EMC) and sg_emc_trespass
        utility

Luben Tuikov <ltuikov at yahoo dot com>
        help with documentation and other suggestions [20061014]
        contribution sg_read_buffer and sg_write_buffer [20061103]

Marius Konitzer <marius dot konitzer at ruhr-uni-bochum dot de
        log pages on IBM LTO Ultrium drives [20100225]

Mark Knibbs <markk at clara dot co dot uk>
        suggested and tested oflag=sparse for sg_dd

Martin Schwenke <martin at meltin dot net> added the raw switch "-r" to sg_inq

Martin Wilck <mwilck at suse dot com> contributed script files [20190425]

Nate Dailey < Nate dot Dailey at stratus dot com > extended sg_map for sparse
        disk node names (e.g. /dev/sdaaa) [20050511]

Nitin U. Yewale < nyewale at redhat dot com> sent patch via github:
        https://github.com/doug-gilbert/sg3_utils/pull/10/ to fix crash with
        rescan-scsi-bus.sh -r due to rev 867 change to sg_inq [20220103]

Pat LaVarre <p.lavarre at ieee dot org> pointed out danger of negative bpt
        values in sg_dd (and friends); also problems when reading /dev/null

Peter Allworth <linsol at zeta dot org dot au> original dd clone design used
        by sg3_utils's dd variants (e.g. sg_dd).

Roland Dreier <roland at purestorage dot com>
        extension and correction to sg_xcopy [20120205]

Ronnie Sahlberg <ronniesahlberg at gmail dot com> has written libiscsi and a
        set of external patches to add direct iSCSI support to this package.
        See README.iscsi [20110518]

Saeed Bishara contributed sg_write_long

Sean Stewart <Sean dot Stewart at netapp dot com> various improvements
        to rescan-scsi-bush.sh script [20130827]

Shahar Salzman <shahar dot salzman at kaminario dot com> contributed
        sg_compare_and_write [20121205]

Thomas Kolbe <tkolbe at partnersdata dot com>
        Solaris port help and testing [20070503]

Tim Hunt <tim at timhunt dot net> increased number of (sd and sg) devices
        that sginfo could detect.

Tom Steudten <steudten at gmx dot ch> sginfo addition: add '-Fhead' option
        to sort defect list by head.

Trent Piepho <xyzzy at speakeasy dot org> print out some "sense key specific"
        data and "-6" switch for sg_modes

Xose Vazquez Perez <xose dot vazquez at gmail dot com>
        documentation corrections [20200117]


Douglas Gilbert
3rd January 2022
