> static int > +transport_generic_get_mem_bidi(struct se_cmd *cmd) Except for the fields touched in struct se_cmd this is a duplication of transport_generic_get_mem. I'd suggest to factor that one into a new helper: static int target_alloc_sgl(struct scatterlist **sgl, unsigned int **nents, u32 length, gfp_t gfp_mask) { .. } and then call that one from transport_generic_new_cmd directly, including opencoding the actual BIDI case there as a first step. If we go down your proposed route for COMPARE and WRITE we'd also allocate that buffer there, although I think there is a more elegant way to do that, but more on that later. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html