This patchset doesn't actually implement the sg v4 interface but does preparatory work to reach that goal in a later pathset. The goal of this patchset is to collect more reviews. A major sticking point in the last patchset seems to be the size and complexity of this item: [PATCH v4 11/22] sg: replace rq array with lists Patches 13/23 through 22/23 in this series break down some of that complexity. Rather than implement the rest of "[PATCH v4 11/22] sg: replace rq array with lists" now in this patchset, the author has decided to experiment with replacing the doubly linked lists that hold together the sg_fd and sg_request objects with XArrays. One earlier reviewer commented that this may be a worthwhile direction to pursue. So while that is happening, this abridged patchset, with more but smaller patches, is being presented. The full patchset, currently containing 34 patches on top of the 23 presented here, is described here: http://sg.danny.cz/sg/sg_v40.html The full 57 part patchset can be downloaded soon from there. Changes since v4 (sent to linux-scsi list on 20190829) - remove much of the logic in the previous patchset series from and including: [PATCH v4 11/22] sg: replace rq array with lists to [PATCH v4 22/22] sg: bump version to 4.0.03 - bump the driver version number from 3.5.36 to 3.9.01 [20190606] reflecting that the v4 interface has not been implemented (in this patchset) - patches 13/23 through to 22/23 reduce the complexity of "[PATCH v4 11/22] sg: replace rq array with lists" measured in KiloBytes from about 130 KB to 80 KB. - various changes suggested by reviewers of the v4 patchset have been implemented - change all %p descriptors (mainly in SG_LOG() macros) to %pK so that the debug output remains useful in recent kernels. Evidently sys admins can selectively turn on pointer obfuscation on %pK as required on secure systems. Changes since v3 (sent to linux-scsi list on 20190807): - move __must_hold attributes into separate patch - move procfs and debugfs file scope definitions toward the end of sg.c to avoid forward declarations - move module_param* and MODULE_* macros to end of sg.c - expand debugfs support with snapshot_devs which allows filtering of snapshot output by sg device(s) - add a WARN_ONCE when write(2) is used with the sg v3 interface. Suggest using SG_IOSUBMIT_V3 instead. - address more of the review comments from Hannes Reinecke and Christoph Hellwig - add various reviewed-by tags where appropriate Changes since v2 (sent to linux-scsi list on 20190727): - address issues "Reported-by: kbuild test robot <lkp@xxxxxxxxx>". The main one was to change the bsg header included to: include/uapi/linux/bsg.h rather than include/linux/bsg.h - address some of the review comments from Hannes Reinecke; email responses have been sent for review comments that did not result in code changes Changes since v1 (sent to linux-scsi list on 20190616): - change ktime_get_boot_ns() to ktime_get_boottime_ns() to reflect kernel API change first seen in lk 5.3.0-rc1 Douglas Gilbert (23): sg: move functions around sg: remove typedefs, type+formatting cleanup sg: sg_log and is_enabled sg: rework sg_poll(), minor changes sg: bitops in sg_device sg: make open count an atomic sg: move header to uapi section sg: speed sg_poll and sg_get_num_waiting sg: sg_allow_if_err_recovery and renames sg: remove access_ok functions sg: improve naming sg: change rwlock to spinlock sg: ioctl handling sg: split sg_read sg: sg_common_write add structure for arguments sg: rework sg_vma_fault sg: rework sg_mmap sg: replace sg_allow_access sg: rework scatter gather handling sg: introduce request state machine sg: sg_find_srp_by_id sg: sg_fill_request_element sg: printk change %p to %pK drivers/scsi/sg.c | 2843 +++++++++++++++++++++++----------------- include/scsi/sg.h | 268 +--- include/uapi/scsi/sg.h | 329 +++++ 3 files changed, 1995 insertions(+), 1445 deletions(-) create mode 100644 include/uapi/scsi/sg.h -- 2.23.0