This patchset extends the SCSI generic (sg) driver found in lk 5.2 . The sg driver has a version number which is visible via an ioctl() and is bumped from 3.5.36 to 4.0.12 by this patchset. The additions and changes are described in some detail on this long webpage: http://sg.danny.cz/sg/sg_v40.html and references are made in various patches to relevant sections in that document. This patchset restores some functionality that was in the v2 driver version and has been broken by some external patch in the interim period (20 years). That functionality (NO_DXFER) has found new uses in request sharing. Also functionality that has been dropped from the bsg driver over the last year is added to this driver in this patchset (e.g. async/non-blocking v4 interface usage, and multiple request support). This patchset is big and can be regarded as a driver rewrite. The number of lines increases from around 3000 to over 6000. The size of the module doubles although that can be reduced by turning off SCSI logging. TODO: during development, this driver had its own version of tracing which has been removed from the final patchset. Curiously that tracing code was never used in anger for its intended purpose, but the revamped SG_LOG macro was used a lot. The intention is to add tracing via the 'standard' kernel code. The addition is somewhat invasive, both to the sg driver (e.g. some otherwise private structures need to be made public) and to the tracing subsystem. Testing: The sg3_utils package has several extensions in sg3_utils-1.45 beta (revision 824) to support and test the version 4 sg driver presented in this patchset. The new and revised testing utilities are outlined on the same webpage as above in the second half of the section titled: "15 Downloads and testing". This patchset is against Martin Petersen's 5.3/scsi-queue branch. It will also apply to lk 5.1 and probably lk 5.0 . Douglas Gilbert (19): sg: move functions around sg: remove typedefs, type+formatting cleanup sg: sg_log and is_enabled sg: move header to uapi section sg: replace rq array with lists sg: sense buffer cleanup sg: add sg v4 interface support sg: add 8 byte SCSI LUN to sg_scsi_id sg: expand sg_comm_wr_t sg: add sg_ioabort ioctl sg: add sg_iosubmit_v3 and sg_ioreceive_v3 ioctls sg: add sg_set_get_extended ioctl sg: sgat_elem_sz and sum_fd_dlens sg: tag and more_async sg: add fd sharing , change, unshare sg: add shared requests sg: add multiple request support sg: add slave wait capability sg: table of error numbers with meanings drivers/scsi/sg.c | 6790 ++++++++++++++++++++++++++++++---------- include/scsi/sg.h | 268 +- include/uapi/scsi/sg.h | 475 +++ 3 files changed, 5682 insertions(+), 1851 deletions(-) create mode 100644 include/uapi/scsi/sg.h -- 2.17.1