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

 - Update to kernels up to 3.3

 - Bug fixes and other improvements


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

 - Update to kernels up to 3.0

 - Significant Task Management commands handling improvements and fixes

 - Assigning CPU affinity to RD/WR threads added

 - Other minor fixes and improvements


Summary of changes in iSCSI-SCST between versions 1.0.1 and 1.0.2
-----------------------------------------------------------------

 - Support bidirectional transfers added

 - Connection and session reinstatements fixes

 - Fixes in handling of initiators.allow and initiators.deny files

 - Sync with the latest IET

 - Other minor fixes and cleanups


Summary of changes in iSCSI-SCST between versions 1.0.0 and 1.0.1
-----------------------------------------------------------------

 - Support for variable length CDB added

 - Sending and receiving padding bytes as well as sesnse data
   reimplemented to make it more reliable

 - Support for SCSI Async. Event Notifications added

 - Sessions and connections reinstatement reimplemented to be conforming
   to iSCSI RFC

 - iscsi-scst-adm fixed

 - Removed artificial limitation of sg_tablesize. It isn't needed,
   because the regular iSCSI negotiated MaxRecvDataSegmentLength-related
   facilities do all the job pretty well.

 - Merge with IET r170-211:

   * Update MaxConnections documentation

   * Remove isns config description from man page

   * Check return values of chdir(), ftruncate() and write(), because
     recent versions of the glibc insist on the return value being
     checked by introducing __attribute__((warn_unused_result)) to these
     functions.

   * Fix snprintf use in isns.c

   * Take \0-termination into account when passing strings to
     isns_tlv_set() to solve incompatibility with MS iSNS 3.0 as IQN
     length is multiple of 4

   * Fix list corruption if SCST target registration fails

   * Register the target port actually used instead of the default iSCSI port.

   * Remove unused connection->pad

   * Refactor cmnd_execute()

   * Introduce min*/max*() and more list_* macros

   * Multipart PDU support for discovery sessions

   * Add support for Reject PDUs and make use of them in appropriate places.

   * Ignore SIGPIPE in iscsi-scstd

   * Allow removal of kernel target objects if the user space object does not exist

   * Use netlink_socket_release() to clean up netlink sockets correctly
     (taking care of namespaces)

   * More scalable proc seq_file implementation

   * Segfault in ietd buffer overrun in dump_line

   * Add iscsi-scst-adm support to display list of CHAP accounts and their data

   * Fixed compilation on glibc 2.8

   * Fix CHAP account handling bugs

   * Fix bugs in multi PDU handling code

 - Support for CentOS 5.2 added (Bart Van Assche)

 - Fixed NOP-Out with payload handling

 - Several minor iSCSI RFC violations fixed

 - Update for kernels up to 2.6.29

 - Zero-copy feature, introduced by put_page_callback patch made
   kernel compile time configurable via
   CONFIG_TCP_ZERO_COPY_TRANSFER_COMPLETION_NOTIFICATION option. If you
   upgrade from earlier versions, see the corresponding "[CAUTION]"
   e-mail in scst-devel mailing list about possible compatibility
   problems.

 - A lot of cleanups and minor fixes

Summary of changes in iSCSI-SCST since it was IET
-------------------------------------------------

 - Commands processing flow changed to work with SCST. Significant
   cleanup was done. Modules and config files were renamed to allow to
   run with IET on the same host.

 - In IET the iSCSI negotiation isn't fully iSCSI RFC confirmed: it doesn't
   support ranges of values and, more important, violates RFC in case
   when in the IET config file some value for some parameter is set and
   a remote initiator doesn't initiate the negotiation for this
   parameter or declare its value. According to RFC, in this case IET
   shall use the RFC-specified default value, but it uses config file
   specified one instead. Looks like the implementation confuses IET
   config file default values and iSCSI RFC ones. The default values
   handling was fixed. But support for ranges remains unfixed (see ToDo
   file).

 - All shutdown/restart problems (resource leaks, hangups, etc.), especially
   under load, were fixed.

 - Full duplex network IO implemented.

 - Threading model reimplemented.

 - Digests calculation made multi-threaded.

 - TX data digest errors handling iSCSI RFC violation was fixed. Another one
   (SNACK handling) remains unfixed.

 - Ability to send data with sense in a single response added.

 - Ability to handle initiators misbehavior a bit improved: several BUG()'s
   were replaced by the proper handling. However, there is a plenty of work in
   this area left, IET is known to have a lot of weaknesses here.

 - Task management made more robust. Particularly, possible data
   corruption scenarios were fixed.

 - Implemented SN based iSCSI IO flow control

 - Response data send timeout implemented: now if initiator doesn't
   accept data for too long (30 sec), target closes connection

 - A lot of other bugfixes and code cleanups.

