On 01/09/2012 02:22 PM, Nicholas A. Bellinger wrote: > By default sg_persist is using a 8192 byte allocation length, and is > hitting the following code from > target_core_transport.c:transport_generic_cmd_sequencer(): > > /* Let's limit control cdbs to a page, for simplicity's sake. */ > if ((cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB) && > size > PAGE_SIZE) > goto out_invalid_cdb_field; > A simple sg_persist work-around is to reduce the allocation length to > sub PAGE_SIZE like so using '-l 512': <snip> > So aside from a work-around here, I'll have to think a bit more about > how to properly address this in TCM v4.1 code in lio-core.git and > mainline. I'm still catching up on a number of items, so this will take > a few days. So much for simplicity's sake... Most commands define a 16 bit allocation length field, so we need to handle up to 65K. And "4.3.5.6 Allocation length" says nothing about the target limiting allowed values. Sorry I broke this (or more precisely, punted instead of finishing the scatterlist conversion.) To remove that test, we need all 19 functions that use transport_kmap_first_data_page() modified to handle multiple pages. I still think this is better than going back to linear buffers. nab why don't you let me take this one, hopefully it won't be too bad, and I'll try to have a patch ready for review by Wednesday. Regards -- Andy -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html