Re: [PATCH v2 0/7] scsi: scsi_debug: Add more tape support

John Meneghini
2025-02-13T16:12:53Z

Thanks for all the patches Kai.

I will work on reviewing and testing these patches ASAP.

BTW, the st driver fixes you delivered in v6.13 and v6.14-rc1 are all working.

We have already resolved some customer reported tape issues and regressions with these
patches and I'm shipping them in RHEL-8.10z and RHEL-9.*.

John A. Meneghini
Senior Principal Platform Storage Engineer
RHEL SST - Platform Storage Group
jmeneghi@redhat.com

On 2/13/25 4:26 AM, Kai Mäkisara wrote:
> Currently, the scsi_debug driver can create tape devices and the st
> driver attaches to those. Nothing much can be done with the tape devices
> because scsi_debug does not have support for the tape-specific commands
> and features. These patches add some more tape support to the scsi_debug
> driver. The end result is simulated drives with a tape having one or two
> partitions (one partition is created initially).
>
> The tape is implemented as fixed number (10 000) of 8-byte units.
> The first four bytes of a unit contain the type of the unit (data
> block, filemark or end-of-data mark). If the units is a data block,
> the first four bytes also contain the block length and the remaining
> four bytes the first bytes of written data. This allows the user
> to use tags to see that the read block is what it was supposed to be.
>
> The following SCSI operations are added or modified:
> FORMAT MEDIUM
> - added
> LOCATE
> - added
> MODE SELECT
> - modified to allow use without page(s) (just header and block descriptor)
> - store density and block size
> - partition page added
> MODE SENSE
> - modified to allow use without page(s) (just header and block descriptor)
> - set density and block size
> - partition page added
> READ BLOCK LIMITS
> - added
> READ POSITION
> - added
> READ
> - added tape support for READ (6)
> REWIND
> - modified to set the tape position
> SPACE
> - added
> START STOP (LOAD)
> - modified to return New Medium Unit Attention if tape loaded (not
> according to the standard, but enables testing this UA)
> WRITE
> - added tape support for WRITE (6)
> WRITE FILEMARKS
> - added
>
> Changes RFC -> v1:
> - rebased to v6.14-rc1
> - virtual tape initialization is rewritten and the tape is made shorter
> (10 000 units)
> - only one partition is created initially
> - tape block allocation is moved to sdev_configure()
> - tape blocks are freed in sdev_destroy()
> - block size must be multiple of four (SSC standard)
> - granularity set to four in READ BLOCK LIMITS
> - long LBA not allowed for tapes in MODE SELECT/SENSE
> - READ POSITION checks allocation length
> - new patch 7 adds support for re-partitioning the tape
>
> Changes v1 -> v2:
> - Fixes for bugs reported by the Kernel Test Robot:
> 2/7: changed 'len +=' to 'len =' in resp_mode_sense()
> 3/7: changed 'for (;' to 'for (i = 0;' in partition_tape()
> 4/7: initialized i to zero in resp_space()
>
> Kai Mäkisara (7):
> scsi: scsi_debug: First fixes for tapes
> scsi: scsi_debug: Add READ BLOCK LIMITS and modify LOAD for tapes
> scsi: scsi_debug: Add write support with block lengths and 4 bytes of
> data
> scsi: scsi_debug: Add read support and update locate for tapes
> scsi: scsi_debug: Add compression mode page for tapes
> scsi: scsi_debug: Reset tape setting at device reset
> scsi: scsi_debug: Add support for partitioning the tape
>
> drivers/scsi/scsi_debug.c | 775 +++++++++++++++++++++++++++++++++++++-
> 1 file changed, 761 insertions(+), 14 deletions(-)
>