SCST vs STGT

STGT is alternative, independent from SCST implementation of SCSI target framework for Linux. It has different architecture, where SCSI target state machine is placed in the user space, while in SCST all the processing done in the kernel. Such architecture as STGT has was acknowledged at the moment by the Linux SCSI subsystem maintainers as a "right" one, so kernel's part of STGT quickly found its way to the kernel.

But such architecture has several inherent problems. Among them performance and complexity. See description for the set of patches, submitted for the first iteration of in-kernel inclusion review and comments http://lkml.org/lkml/2008/12/10/245

See also the following important discussions:

Also you shouldn't be deceived by the fact that some (small) part of STGT was accepted into the kernel.
It doesn't mean that STGT has the "kernel quality". In fact, STGT as a whole similarly to any other out-of-tree project lives on its own, hence has its own quality level, which isn't necessary better, than the quality level of SCST. Actually, from such important aspect of quality as simplicity, it might be quite contrary: e.g. SCST isn't required to support HIGHMEM (nowadays it isn't necessary, but required for all in-kernel components), which allowed to simplify memory management a lot.

Interesting, on 2008 Linux Storage & Filesystem Workshop, namely in "Storage Track" and "Linux/iSCSI and a Generic Target Mode Storage Engine for Linux v2.6" documents, a special emphasis was put on the fact that SCST has "older" design, while STGT has the "current" design. Well, this seems to be a good sign, because SCST opponents have come to so little to say against it, so they started to use psychological arguments, exploiting the fact that most people think that "newer" is always better.