SCST vs LIO/TCM

LIO, from recently being renamed to TCM, is another independent from SCST implementation of SCSI target framework for Linux. It's started as PyX iSCSI target and then was accommodated to other transports. But it's still in many kinds iSCSI-oriented. You can find an example when people are not happy with it here.

LIO maintainer, Nicholas Bellinger, is very good in building personal relationships and promoting LIO, although often using misleading half, less-then-half and simply deceitful statements about LIO current state, capabilities and future directions as well as about its competitor, SCST. For instance, he setup LIO targets comparison page with obviously wrong statements about SCST, like that it isn't fully zero copy or it isn't a generic target engine (while LIO, of course, is fully zero-copy and fully generic target engine). Any attempts to correct it were simply ignored.

With those tricks Nicholas Bellinger was capable to attract key Linux kernel developers, and they suddenly changed their opinion about Linux SCSI target subsystem in the opposite direction. They previously asserted that in-kernel SCSI target is the wrong direction, SCSI target must be in the user space, so STGT is what everybody needed. Now their opinion is that SCSI target driver should be in the kernel space and the only target good for them is LIO, doesn't matter that:

  1. SCST is a lot more mature and advanced
  2. SCST from the beginning is a generic SCSI target
  3. SCST has a lot more features
  4. SCST has better performance
  5. SCST has a lot more users
  6. SCST has much bigger community

So, rejecting base principles of the Linux kernel community that the best code should win, the worst code was chosen.

You can find more background behind choosing LIO as the mainline kernel SCSI target subsystem if you read this thread as well as searching for targets related topics in Linux kernel and Linux SCSI mailing lists.

Particularly notable is that James Bottomley from the beginning was telling that SCST can't be merged in the mainline kernel, because it doesn't offer a drop in replacement for STGT to avoid having 2 target infrastructures in the kernel at the same time. But, since LIO can't offer user space backend drivers and doesn't have ibmvstgt driver analog, for LIO the drop in replacement wasn't a requirement, so 2.6.38+ kernels successfully have both STGT and LIO.