mbox series

[v2,0/9] scsi_debug: collection of additions

Message ID 20220109012853.301953-1-dgilbert@interlog.com
Headers show
Series scsi_debug: collection of additions | expand

Message

Douglas Gilbert Jan. 9, 2022, 1:28 a.m. UTC
The first patch is to address possible modprobe rmmod races.

The second patch adds READ_ONCE and WRITE_ONCE on several
high frequency variables.

See the headers of patches 3 and 4.

In patch 5 use different asc/ascq codes to distiguish between
a newly added LU and a reset of an existing LU.

In patch 6 add a no_rwlock module option to bypass the
read-write locks around user data reads and writes.

Patch 7 adds sdeb_sgl_copy_sgl, sdeb_sgl_compare_sgl_idx,
sdeb_sgl_compare_sgl and sdeb_sgl_memset functions for
performing sgl to sgl copy and compare operations currently
unsupported by scatterlist.h . This patch was originally
put forward as an enhancement of scatterlist.h but failed
to gain traction. So that patch is redirected to this driver
with the "sdeb_" prefix on each function. Compiling the
driver after this patch will result in warnings that those
newly introduced static functions are not used. Since LLDs
receive and send data "up" the stack via sgl_s, using
sgl_s as the storage medium for this driver bypasses one
level of conversions (i.e. bypasses using a 'flat' array).

Patch 8 uses the new functions introduced in patch 7 to
change the internal store(s) used by this driver from big
vmalloc() allocations to sgl_s. The biggest improvement
is with the VERIFY(BYTCHK=1) performance that went from
about 20% slower than a copy operation to 50% faster (up
to a compare rate of 15 GB/s on my equipment). Before
this patch VERIFY(BYTCHK=1) needed a temporary,
potentially large, buffer for the incoming data-out
transfer. The COMPARE AND WRITE (CAW) command also benefits
from stores made of sgl_s. In addition CAW needs to know
the index of the first mismatched byte (if any).

Finally some issues have arisen in smartmontools with
SCSI log subpages. To aid in fixing this, the last patch
adds this driver's first log subpage (Environmental
Reporting).

This patchset is based on lk 5.16.0-rc8 rather than MKP's
repository (based on rc1). Fixes have been added to this
driver between rc1 and rc8 that would break a patchset
trying to target both. So the most recent rc was chosen.

Changes since v1 [sent to linux-scsi list on 20211230]
  - in the first patch replace READ_ONCE() and WRITE_ONCE()
    with smp_load_acquire() and smp_store_release() as
    suggested by Bart
  - add Tested-by: Shin'ichiro Kawasaki on patch 8
  - rework prot_verify_read() to remove heap allocation;
    if it failed previously the code return '-1' which
    Dan Carpenter termed as "sloppy"
  - rebase on rc8 (was rc7)


Douglas Gilbert (9):
  scsi_debug: address races following module load
  scsi_debug: strengthen defer_t accesses
  scsi_debug: use task set full more
  scsi_debug: refine sdebug_blk_mq_poll
  scsi_debug: divide power on reset unit attention
  scsi_debug: add no_rwlock parameter
  scsi_debug: add sdeb_sgl_copy_sgl and friends
  scsi_debug: change store from vmalloc to sgl
  scsi_debug: add environmental reporting log subpage

 drivers/scsi/Kconfig      |    3 +-
 drivers/scsi/scsi_debug.c | 1104 +++++++++++++++++++++++++++----------
 2 files changed, 823 insertions(+), 284 deletions(-)

Comments

Martin K. Petersen Feb. 1, 2022, 2:04 a.m. UTC | #1
On Sat, 8 Jan 2022 20:28:44 -0500, Douglas Gilbert wrote:

> The first patch is to address possible modprobe rmmod races.
> 
> The second patch adds READ_ONCE and WRITE_ONCE on several
> high frequency variables.
> 
> See the headers of patches 3 and 4.
> 
> [...]

Applied to 5.18/scsi-queue, thanks!

[1/9] scsi_debug: address races following module load
      https://git.kernel.org/mkp/scsi/c/2aad3cd85370
[2/9] scsi_debug: strengthen defer_t accesses
      https://git.kernel.org/mkp/scsi/c/d9d23a5a34bd
[3/9] scsi_debug: use task set full more
      https://git.kernel.org/mkp/scsi/c/7d5a129b86b3
[4/9] scsi_debug: refine sdebug_blk_mq_poll
      https://git.kernel.org/mkp/scsi/c/b05d4e481eff
[5/9] scsi_debug: divide power on reset unit attention
      https://git.kernel.org/mkp/scsi/c/500d0d248081
[6/9] scsi_debug: add no_rwlock parameter
      https://git.kernel.org/mkp/scsi/c/7109f3701a4a
[9/9] scsi_debug: add environmental reporting log subpage
      https://git.kernel.org/mkp/scsi/c/0790797aca03