Summary of changes between versions 3.4 and 3.5
-----------------------------------------------
- Added the forward_src and forward_dst sysfs attributes. Removed
  CONFIG_SCST_FORWARD_MODE_PASS_THROUGH. In other words, forward_src mode
  is no longer global but is now configurable per target port.
- Improved forwarding of SCSI commands between H.A. nodes. The relative
  target port ID is now correct in the device identification inquiry response.
  The REPORT TARGET PORT GROUPS and SET TARGET PORT GROUPS commands are now
  processed locally instead of being forwarded.
- A subtle bug in the COMPARE AND WRITE implementation for unaligned buffers
  has been fixed (r8932).
- Support for wildcard matching for initiator names has been added to the
  copy manager.
- Unloading scst_vdisk while I/O is ongoing works again reliably.
- Support for scst_register_target(..., NULL) has been dropped. This feature
  was declared obsolete in 2011.
- The behavior of the on_alua_state_change_*() callback functions has been
  modified such that these are only invoked if the state of a local target
  port group is being modified.
- The RPM build gained support for EL mainline kernels and also for CentOSPlus.
- Performance of the ib_srpt driver has been improved by switching from a large
  number of kernel threads to one workqueue per CPU core.
- Support for MOFED 5 has been added in the isert-scst and ib_srpt drivers.
- Network namespace support has been added in the iscsi-scst driver. This makes
  it possible to run iscsi-scst inside a container that uses another network
  namespace than the default.
- Fixed a hard to trigger race condition in the iSCSI connection shutdown code.
- Fixed a memory leak in conn_free() in iscsi-scstd.
- Large RDMA transfers no longer trigger QP termination with the ib_srpt driver.
- Handling of iWARP logins has been fixed in ib_srpt.
- Added a new driver, qla2x00t-32gbit, that supports 32 Gb/s QLogic FC adapters.
- Updated the qla2x00t-32gbit to the version that is available in Linux kernel
  v5.9 from v5.4.
- The scst_user device handler has been made compatible with the ib_srpt
  zero-copy mode.
- scstadmin has been made compatible again with older Perl interpreters.

The kernel versions supported by this release are:
* Kernel.org kernel versions v2.6.31..v5.10.
* Debian / Ubuntu kernels based on upstream kernel versions v2.6.31..v5.10.
* RHEL / CentOS 6.x, 7.x and 8.0..8.3 kernels.
* UEK version 4, 5 and 6 kernels.

Summary of changes between versions 3.3 and 3.4
-----------------------------------------------
- I/O keeps running at full speed if a LUN is added or removed and also if
  a device is added or removed.
- Added support for asynchronous zero-copy file I/O. This change improves
  vdisk_fileio performance significantly. See also the documentation of the
  'async' and 'o_direct' attributes.
- Added support for the SCSI WRITE AND VERIFY command.
- Reworked the build infrastructure such that switching between debug, release
  and perf modes is now much faster.
- Dropped support for RHEL 5.
- Dropped support for procfs.
- Dropped support for I/O context sharing. This mechanism improved CFQ
  performance.
- Fixed a number of small bugs.

Summary of changes between versions 3.2 and 3.3
-----------------------------------------------
- Support for a new build method ("make dpkg").
- Support for the latest kernels has been added, up to and including
  Linux kernel v4.19.
- A much more powerful latency measurement infrastructure has been added.
- Support for asynchronous buffered and direct I/O has been added to scst_vdisk.
- H.A. support has been improved.
- SCSI pass-through support is now compatible with Linux kernel versions 4.11
  and later.
- ACA support has been added.
- The scst_user driver is now compatible with usercopy hardening.
- "make install" is now compatible with SELinux.

Summary of changes between versions 3.1 and 3.2
-----------------------------------------------
- Updated SCST to SPC-4.
- Added the CONFIG_SCST_FORWARD_MODE_PASS_THROUGH mode.
- Added support for command polling. See also the poll_us attribute.
- ib_srpt: Added link_layer and port_id sysfs attributes.
- ib_srpt: Reduced CPU load caused by stopping a large number of sessions.
- isert: Fixed multiple bugs.
- scstadmin gained support for saving and restoring copy manager attributes.
- scstadmin -attributes behavior for multiple attributes has been fixed.
- scstadmin no longer tries to save the dif_checks_failed counter.

Summary of changes between versions 3.0 and 3.1
-----------------------------------------------
- vdisk_nullio: the "read_zero" attribute has been added.
- scst_vdisk: LBPRZ now follows limits.discard_zeroes_data.
- scst core: support for 64-bit LUNs has been added. This requires a Linux
  kernel that supports 64-bit LUNs.
- A new kernel module parameter, scst_forcibly_close_sessions, controls whether
  or not attempting to remove an access control group with one or more active
  sessions succeeds or fails with -EBUSY.
- scst_vdisk: the EUI-64 and NAA IDs are now configurable.
- scst_vdisk: the device name length has been increased from 16 to 64
  characters for OpenStack.
- The SCSI-passthrough code has been reworked such that SCSI pass-through
  works with kernel versions >= 2.6.30 without patching the kernel.
- T10-PI support has been added to the SCST core.
- Counters have been added to keep track of unaligned I/O.
- The "forwarding" sysfs attribute has been added.
- Support for iSER has been added.
- SCST command thread creation has been made faster.
- Support for synchronizing persistent reservation information between cluster
  nodes via the DLM has been added.
- Explicit ALUA support has been added.
- EXTENDED COPY support has been added.

Summary of changes between versions 2.1.0 and 3.0
-------------------------------------------------

 - Update to kernels up to 3.3

 - Zero copy read side FILEIO implemented

 - New initialization scripts implemented

 - Support for rotational attribute added

 - Bug fixes and other improvements


Summary of changes between versions 2.0.0 and 2.1.0
---------------------------------------------------

 - Update to kernels up to 3.0

 - Support for implicit ALUA added

 - Change T10 ID and USN generations to get the random part be CRC32
   from the device name in the first 8 characters as many MPIO
   implementations expect

 - Assigning CPU affinity to threads and connections added

 - Splitting of read/write CDBs for pass-through devices with sg_tablesize
   and max_sectors limitations added to scst_disk

 - Support for thin provisioning commands added in scst_vdisk

 - Fix possible incorrect atomic context on exec stages

 - Limit max tasklet commands via scst_max_tasklet_cmd global attribute
   to prevent possible starvation under heavy load and in some cases
   improve performance

 - Autogenerated SCST target names made deprecated

 - Custom parse improvements

 - Logging improvements

 - Bug fixes and other improvements


Summary of changes between versions 1.0.1 and 1.0.2
---------------------------------------------------

 - Support for bidirectional transfers added

 - REQUEST SENSE now can return the most recent sense

 - READ CAPACITY(16) now reports number of logical blocks per physical
   block

 - Parameters scst_max_cmd_mem and scst_max_dev_cmd_mem as well as
   vdisk's parameters num_threads and scst_vdisk_ID made visible through
   /sys/module/scst and /sys/module/scst_vdisk correspondingly

 - Shared between devices SGV caches were implemented

 - Possibilities to operate with single size entries as well as control of
   the reclamation time added to the SGV cache

 - Issues cased by change of cdb_len to unsigned fixed.

 - INIT ELEMENT STATUS WRANGE added to the list of known commands.

 - Races on scst_user devices cleanup fixed

 - Implemented abort on timeout of stuck in tgt hardware commands

 - Automatic sessions reassignment implemented with corresponding atomic
   management commands added

 - Generation of INQUIRY DATA HAS CHANGED Unit Attention or AEN for
   changed devices during automatic sessions reassignment added

 - Requeue global Unit Attentions on delivery failure added

 - Update for 2.6.30

 - Other bug fixes and cleanups


Summary of changes between versions 1.0.0 and 1.0.1
---------------------------------------------------

 - Support for descriptor sense format added

 - Makefiles made more packager friendly (Ruben Laban)

 - Support for variable length CDB added

 - Support for Async. Event Notifications added

 - Implemented "plug-and-play" notifications about new devices in security
   groups, deleted devices from security groups and changed size of a
   device. They can be delivered either through AENs (if supported), or
   Unit Attentions.

 - New command "resync_size" added to scst_vdisk proc interface to tell
   scst_vdisk to reread size of the corresponding device after it was
   changed

 - Added pattern matching for initiator names in SCST access control
   (Gennadiy Nerubayev)

 - Now only sent for execution commands are counted to wait for in TM
   commands, which made processing of TM commands faster

 - Now devices blocked only in reset TM commands. ABORTs, etc. now done
   without devices blocking.

 - scst_unregister_session_ex() removed, since there are no users of it

 -  New functions added to scst_user interface:

    * SCST_USER_UNREGISTER_DEVICE - to unregister device, flush mem reuse
     (SGV) cache and send UCMD_STATE_ON_CACHE_FREEING notifications for all
     freed buffers to the user space handler. Simple device close doesn't
     allow that, so all the cached buffers might look as "leaked" from the
     user space handler POV.

    * SCST_USER_FLUSH_CACHE - to flush mem reuse (SGV) cache and send
      UCMD_STATE_ON_CACHE_FREEING notifications for all freed buffers to
      the user space handler

    * SCST_USER_DEVICE_CAPACITY_CHANGED - to notify SCST core that the
      corresponding device has changed its capacity

 - Clustering of scst_user pages added

 - Added autogenerated SCSI SN in vdisk handler

 - Fixed race in scst_user, which could have lead to usage of already freed
   command. A misbehaving user space handler could have made ucmd to get
   dead immediately after the lock is released and that is caught
   now.

 - Support for CentOS 5.2 added (Bart Van Assche)

 - In scst_vdisk new module parameter num_threads added to specify a
   number of threads for each vdisk/vcdrom. Default is 5.

 - Access control docs updated

 - Set memory limits according to LOWMEM, not TOTALMEM

 - Major performance increase working with disk based storage

 - Now task_mgmt_fn() callback called for TARGET RESET and NEXUS LOSS
   functions only once for tgt_dev, which belongs to the session, from
   which the corresponding request came

 - SGV cache related parameters moved from scst.h to scst_sgv.h

 - Log level mgmt_minor for messages like "Warning: expected transfer
   length X for opcode Y" changed to be disabled by default

 - Added possibility to coexist if both target driver and dev handler
   need custom memory allocation. Direct consequences: (1) scst_local
   can work with scst_user's devices and (2) scst_user now compatible
   with iscsi-scst if put_page_callback patch not applied.

 - Depecated scst_cmd_get_tgt_resp_flags() removed

 - SWP and TAS parameters made changeable in vdisk handler

 - External interface changed to fix usage of in_atomic(). Now target
   drivers and dev handlers need to explicitly supply preferred execution
   context in scst_cmd_done() and scst_tgt_cmd_done()

 - Handling of internal REQUEST SENSE fixed.

 - Fixed SAM violation (HiSup bit must be set in INQUIRY response)

 - Fixed handling of VERIFY commands that comes with BYTCHK unset

 - Handling of double reset UAs made more reliable

 - A lot of kernel style, checkpatch and sparse fixes (Bart Van Assche)

 - In-kernel build integration (Bart Van Assche)

 - Update for kernels up to 2.6.29

 - A lot of fixes and cleanups (many people)


Summary of changes between versions 0.9.5 and 1.0.0
---------------------------------------------------

 - Added per-device memory limit and new scst.ko module parameter scst_max_dev_cmd_mem

 - Sending REQUEST SENSE fixed

 - Fixed possible incorrect command's retry if double RESET UA is detected.

 - Fixed __exit misuse, when such functions called from __init functions.

 - "RECEIVE DIAGNOSTIC RESULTS" command handling fixed

 - Obtaining device queue parameters in scst_obtain_device_parameters()
   changed to handle NOT READY sense

 - Added possibility to create virtual removable devices

 - Updated to work on 2.6.25.x

 - Fixed READ POSITION command handling

 - TM processing made independent from other TM commands (before it was serialized)

 - Sense buffer made dynamic

 - Clustering statistic added

 - Updated to work on 2.6.24.x

 - Version protection added

 - Processing latency measurement facility added

 - Sessions registration/unregistration made independent from other activities

 - Major performance improvements

 - Major task management handling improvements

 - Updated to work on 2.6.23.x

 - Switching between debug<->performance<->release builds added

 - scsi_tgt renamed to scst, scsi_tgt.h renamed to scst.h

 - Updated to work on 2.6.22.x

 - Semaphores converted to mutexes

 - 64-bit platform cleanups

 - Added limit on maximum queued on a device commands

 - Threads made per-device

 - User space device handler added

 - New SGV cache low memory management backend with memory flow control
   facility was implemented, thanks to Krzysztof Blaszkowski.

 - FILEIO was renamed to VDISK. BLOCKIO added to it, thanks to Ross S. W.
   Walker and Vu Pham.

 - Updated to work on 2.6.20.x, no update for 2.6.21.x isn't needed

 - Internal locking and execution context were reimplemnted. As some of
   the results now FILEIO has >1 IO threads and implemented full support
   for SCSI task attributes (SIMPLE, ORDERED, etc.).

 - Ability to have per-target default security groups added.

 - Updated to work on 2.6.19.x, thanks to Ming Zhang.

 - Internal threads management reimplemented based on kthread*() API,
   thanks to Ming Zhang.

 - /proc implementation moved to seq_*() library, thanks to Ming Zhang.
   Target drivers need to be updated accordingly.

 - Linear search in the LUN translation routines scst_translate_lun()
   and scst_mgmt_translate_lun() was changed to a hash-based one.

 - Building from the Linux kernel tree updated, inside kernel building fixed.

 - Support for CPU cache flushing before doing DMA to target devices added.

 - A lot of cleanups, bug fixes and improvements.

Summary of changes between versions 0.9.4 and 0.9.5
---------------------------------------------------

 - Fixed many found task management related problems, especially in the
   RESETs area. CONFIG_SCST_DEBUG_TM compilation option added (see README).

 - Updated to work on kernels version 2.6.18+.

 - FILEIO_ONLY added. If it's defined, there is no need to patch the
   kernel, but pass-through modules (scst_disk, scst_tape, etc.) are not
   supported).

 - Fixed problems with big amount of LUNs (500+).

 - Timer-based retries for targets after SCST_TGT_RES_QUEUE_FULL status
   implemented.

 - More intelligent IO flow control implemented.

 - Fixed broken CDROM FILEIO. Before that it always reported
   "No medium found"

 - Data synchronization fixes and improvements in FILEIO. Added FUA
   support.

 - Fixed READ(6)/WRITE(6) CDB decoding for block devices.
   This bug prevented FreeBSD initiators from working.

 - Implemented sgv_pool. It is mempool-like interface, which caches
   built SG-vectors in order not to rebuild them again for every
   subsequent command, so saves performance price of building
   SG-vectors, including pages allocation, and of additional context
   switches.

 - For ABORTED commands xmit_response() now called. A target driver
   should recognized such commands using new function
   scst_cmd_aborted(). Also there are some other cleanups, improvements
   and interfaces changes that affect target drivers and dev handlers.
   You can find their full list by diff'ing scsi_tgt.h between versions
   0.9.4 and 0.9.5.

 - Function alloc_data_buf() added to struct scst_tgt_template as well
   as data_buf_tgt_alloc added to struct scst_cmd to allow a target
   driver implement own memory management handler (by Arne Redlich).

 - Exported symbols are now not GPL'ed

 - Various cleanups and a lot of bug fixes.

Summary of changes between versions 0.9.3 and 0.9.4
---------------------------------------------------

 - Support for 2.4 kernels has been removed

 - Added on_free_cmd() callback for dev handlers

 - Fixed BUG() on task aborts.

 - Fixed WCE (Write Cache Enabled) handling in FILEIO (by Ming Zhang)

 - Minor cleanups and bug fixes.

Summary of changes between versions 0.9.3-pre4 and 0.9.3
--------------------------------------------------------

 - Fixed IO errors on initiators (return code 20008) under considerable
   load, because of returned BUSY status. Now QUEUE FULL status returned
   instead.

 - Fixed "deadlock" on sessions creation.

 - Fixed support for > 2TB storage device in FILEIO handler (by Ming Zhang)

 - NULLIO added to FILEIO handler (by Ming Zhang)

 - Commands serialization now per-(session, device), i.e. tgt_dev.

 - Minor cleanups and bug fixes

Summary of changes between versions 0.9.3-pre2 and 0.9.3-pre4
-------------------------------------------------------------

 - Sessions registration and unregistrations reimplemented. The
   interface with target drivers changed (made much more simple, but
   incompatible).

 - Some kmalloc()'s converted to SLAB caches (by Nathaniel Clark)

 - Too low timeouts for management operations in scst_disk were
   increased

 - Cleanups and bug fixes, including several race-based crashes

Summary of changes between versions 0.9.3-pre1 and 0.9.3-pre2
-------------------------------------------------------------

 - Task management was considerably redone. Particularly, now the result
   of ABORT TASK is returned to remote initiator immediately, except if
   the result of the aborted command is already started to be sent.

 - Per-session commands serialization implemented as part of "device
   blocking" cleanup.

 - UA generating after MODE SELECT and LOG SELECT implemented

 - CONFIG_SCST_STRICT_SERIALIZING compile-time option added for those who need
   the most robust task management and willing to pay some performance cost for
   that (see README)

 - IRQ spinlocks were replaced by BH ones, where appropriate.

 - Ability to change ISO image on the fly in CDROM FILEIO module added

 - Cleanups and bug fixes

Summary of changes between versions 0.9.2 and 0.9.3-pre1
--------------------------------------------------------

 - Sophisticated per-initiator access and devices visibility management added
   (different initiators now could see different set of devices with
   different permissions)

 - FILEIO dev handler was reimplemented in most areas, including:

    * Management interface via /proc added

    * Various defects using devices/files larger 2Gb were fixed. Thanks
      to Mark Buechler.

    * New CDROM FILEIO handler added.

    * Now per-session threads created to improve concurrent performance.

    * New flags added that allow using virtual devices as read only,
      with write through caching or in O_DIRECT mode.

    * Task management support added.

 - RAID controller (type 0xC) dev handler added.

 - SCSI processor (type 3) dev handler added.

 - Sessions unregistration contexts cleanup.

 - Dev handler's on_free_cmd() was dropped. Target driver's flag
   "thread_per_session" was dropped as well.

 - Internal locking partially redone.

 - A lot of stability/bug fixes, cleanups and performance improvements.

Summary of changes between versions 0.9.1 and 0.9.2
---------------------------------------------------

 - 2.6 support, developed and tested on 2.6.7.

 - FILEIO/BLKDEV virtual disk device handler added. See main README for
   details.

 - /proc updates, "trace_log_level" entry added to change traced
   events on the fly.

 - Some internal interfaces changed, see the documentation.

 - Device handlers' source code layout changed, all device handlers
   live in one subdirectory now.

 - Crash on memory allocation failure while building SG data vector
   fixed.

 - Other minor fixes

Summary of changes between versions 0.9.0a and 0.9.1
----------------------------------------------------

 - scst_debug.* files are also installed together with scsi_tgt.h
   (required by QLA2x00 target and could be useful for other target
   drivers)

 - CDB length for unknown commands (e.g. vendor ones) is now determined
   from CDB

 - Race with the commands serialization on one drive fixed

 - Cleanup

