Even though the lk 2.4 production series is meant to be "stable" there have been a significant number of changes as well as bug fixes. The following list does not include changes to the lower level (adapter) drivers. Each item of the list is prefixed by the kernel version that it was introduced. 
[2.4.4] added the SCSI_IOCTL_GET_PCI ioctl(),
[2.4.7] the "lun" bits (3 bits representing lun values 0 through 7 in the SCSI 1 and SCSI 2 standards) are no longer masked into the second byte of SCSI commands if the INQUIRY for that devices shows a SCSI level greater than SCSI_2,
[2.4.7] the max_scsi_luns kernel (and module scsi_mod) option previously could be 1 to 7. Now the upper value can be large. [The scan algorithms are still doing a sequential scan rather than using REPORT_LUNS.]
[2.4.7] both scsi_unregister_host() and scsi_unregister_module() now return an int (previously they were void functions). They return 0 for success, -1 for failure (typically busy),
[2.4.7] the upper level drivers now report the correct scsi device name when they are attached. [The log messages that started with "Detected ..." previously sometimes reported the wrong device (e.g. sdc rather than sdb).] Kernel boot up messages will now show SCSI devices as "Attached ...",
[2.4.7] 'max_sectors' was added to the Scsi_Host structure,
[2.4.8] some mid level logic was altered to retry commands if the sense buffer indicates that logical unit is becoming ready [ASC=4, ASQ=1],
[2.4.9] a major st update,
[2.4.9] mid level changed to retry commands if lower level (adapter) driver returned DID_RESET,
[2.4.10] original result (including SCSI status) saved when mid level issues a REQUEST SENSE so it can be restored afterwards,
[2.4.10] added BLKGETSIZE64, BLKBSZSET and BLKBSZGET ioctls to sd + sr,
[2.4.10] sg update that fixes generic_unplug_device() race + bumps access_count on opens (and decrements on releases),
[2.4.11] added MODULE_LICENSE macro in most drivers, mostly MODULE_LICENSE("GPL"),
[2.4.11] scsi_pid bumped for each command (why?),
[2.4.11] st update to bump access_count. Now all upper level drivers increment access_count on opens and decrement it on releases,
[2.4.13] scatterlist structure grows (alt_address is removed, page and offset added),
[2.4.13] don't probe luns > 7 for target <= SCSI_2 ,
[2.4.14] fine tuning (bug fixes) associated with scatterlist structure changes [it broke st ?],
[2.4.15] 16 byte SCSI commands permitted [MAX_COMMAND_SIZE changes from 12 to 16]. HBA driver must set Scsi_Host::max_cmd_len to 16 for mid level to forward 16 byte SCSI commands,
[2.4.15] BLKGETSIZE + BLKGETSIZE64 ioctl() implementations moved out of SCSI subsystem (and into block subsystem),
[2.4.15] large st update,
[2.4.15] lk 2.5.0 forks off so lk2.4.15==lk2.5.0 .
[2.4.17] add generic_unplug_device() call to scsi_wait_req(). This stops long waits in SCSI_IOCTL_SEND_COMMAND.
[2.4.17] fix device scanning bug where, in some cases, the scsi_level (i.e. SCSI standard adherence) was misplaced.
[2.4.17] major sg driver update, add mmap()-ed IO
[2.4.18] permit upper level driver "init()" functions (e.g. sd_init() ) to fail gracefully. [Add Scsi_Device::detected and scsi_unregister_module() .]
[2.4.18] Fix for clustering (SCSI commands) on MO devices.
[2.4.18] st driver update (compression algorithms).
[2.4.18] update Documentation/scsi.txt and scsi-generic.txt .
[2.4.18] Revamp scsi_debug driver .
[2.4.19] Scsi reservation and reset capability added. Reservations allow multiple machines to share the same device (via a reserve/release mechanism). Scsi reset (via sg) is needed to "break" a reservation held by a non-responding machine.
[2.4.19] Introduce BLIST_LARGELUN to handle LUNs larger than 7 despite reporting SCSI 2.
[2.4.19] Change sd and sr so RECOVERED_ERROR is not treated as a hard error. Send warning to log/console.
[2.4.19] Zero out sg's buffers before use. [Sg version upgraded from 3.1.22 to 3.1.24 but this is not reflected in sg.h (supeficial).]
[2.4.20] Support for highmem I/O added. Used by aic7xxx, 3w-xxxx, esp, megaraid, qlogicfc and sym53c8xx_2 LLDs.
[2.4.20] "blocking_open" boot time, module load time parameter added to st.
[2.4.21] Give new HBAs a new host number (higher than any previously used) unless there is a "scsihosts" match. Host numbering sequence "holes" are only re-used if there is a "scsihosts" match.
[2.4.21] stop the SCSI status RECOVERED ERROR being treated as an error by the mid level (complements a change in 2.4.19).
[2.4.21] use the TEST_UNIT_READY command (rather than START_STOP) to determine if removable media has changed (in sd driver).
[2.4.21] major work on ide-scsi driver.
[2.4.21] add aic79xx driver for Adaptec Ultra 320 controllers.
[2.4.22] Extend timeout of SEND DIAGNOSTIC command to 2 hours. This is for foreground extended self tests.
[2.4.26] Add 'scsi_allow_ghost_devices' kernel boot time and scsi_mod module option.
[2.4.27] SATA support via "libata" library introduced. SATA disks appear with SCSI subsystem names (e.g. "/dev/sdb) and respond to SCSI commands (via a command translation facility).
This list has been compiled from the official 2.4 series kernels released at www.kernel.org. Distributions are free to tailor the official kernels and this may impact what is supported (or changed) in the SCSI subsystem. For example this machine reports this kernel: "2.4.18-27.8.0". So that is roughly based on the official 2.4.18 kernel which the vendor has "modded" 27 times for the "8.0" level of their distribution. As an example of the type of changes, the aic7xxx driver in the official 2.4.18 does not support Adaptec's Ultra 320 series of PCI adapters; however that vendor's version does.