target_core module set for the Linux kernel (in mainline 2.6.38) is pretty solid. I deployed a solution using that, but with an earlier kernel, a couple of months ago for an iSCSI network. I found it to be superior to the
linux_iscsi modules in overall support. I found performance to be limited more on hardware spec than software power, which is as it should be a for a storage system. I can't speak to reliability as I hadn't run it long enough, and it's only now going mainline.
Target_core can run on top of LVM, which means you can also use LVM for snapshots and overall volume management.
Performance tracks very closely with hardware performance. I was able to saturate a 1GbE network with I/O to this system and sufficient back-end storage. Running the benchmarks locally gave the true performance of the system (able to pump right up to the 3Gb SAS limit, which is what the system was built on).
As target_core can also present RAM-drive LUNs, even pounding the snot out of one of those did not raise CPU loading very significantly even doing heavily random I/O. This tells me that target_core is built very efficiently.
Target_core can present as a Fibre Channel Target, but I didn't do that as this system was designed for cheap iSCSI not FC. The target_core web-site shows some testing cases they did with 10GbE interlinks, so it worked for them at least once.
If you're looking for a tutorial, I wrote one for OpenSUSE 11.3 (now on 11.4 version, so already out of date). Which you can find here if you are interested. That goes even MORE out of date once 2.6.38 releases. It's a fast moving environment right now, so any tutorials will be dated, perhaps unworkably dated, pretty quickly.