target: Add target_submit_cmd() for process context fabric submission
commita63607855224702ea17e6016ecf3f7d544e83625
authorNicholas Bellinger <nab@linux-iscsi.org>
Sat, 19 Nov 2011 04:36:22 +0000 (18 20:36 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Wed, 14 Dec 2011 11:40:56 +0000 (14 11:40 +0000)
tree844d9a7dbdc636ba657763f04945b91ca8da9ba7
parent7481deb413be132a22193e8a0bce88b311ecb3c2
target: Add target_submit_cmd() for process context fabric submission

This patch adds a target_submit_cmd() caller that can be used by fabrics
to submit an uninitialized se_cmd descriptor to an struct se_session +
unpacked_lun from workqueue process context.  This call will invoke the
following steps:

- transport_init_se_cmd() to setup se_cmd specific pointers
- Obtain se_cmd->cmd_kref references with target_get_sess_cmd()
- set se_cmd->t_tasks_bidi
- transport_lookup_cmd_lun() to setup struct se_cmd->se_lun from
  the passed unpacked_lun
- transport_generic_allocate_tasks() to setup the passed *cdb, and
- transport_handle_cdb_direct() handle READ dispatch or WRITE
  ready-to-transfer callback to fabric

v2 changes from hch feedback:

*) Add target_sc_flags_table for target_submit_cmd flags
*) Rename bidi parameter to flags, add TARGET_SCF_BIDI_OP
*) Convert checks to BUG_ON
*) Add out_check_cond for transport_send_check_condition_and_sense
   usage

v3 changes:

*) Add TARGET_SCF_ACK_KREF for target_submit_cmd into
   target_get_sess_cmd to determine when the fabric caller is expecting
   a second kref_put() from fabric packet acknowledgement.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_transport.c
include/target/target_core_base.h
include/target/target_core_fabric.h