sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/targetmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/driver-api/targetmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h!target and iSCSI Interfaces Guideh]h!target and iSCSI Interfaces Guide}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/target.rsthKubh)}(hhh](h)}(hIntroduction and Overviewh]hIntroduction and Overview}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hTBDh]hTBD}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]introduction-and-overviewah ]h"]introduction and overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTarget core device interfacesh]hTarget core device interfaces}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hkThis section is blank because no kerneldoc comments have been added to drivers/target/target_core_device.c.h]hkThis section is blank because no kerneldoc comments have been added to drivers/target/target_core_device.c.}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]target-core-device-interfacesah ]h"]target core device interfacesah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Target core transport interfacesh]h Target core transport interfaces}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single#transport_init_session (C function)c.transport_init_sessionhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h8void transport_init_session (struct se_session *se_sess)h]hdesc_signature_line)}(h7void transport_init_session(struct se_session *se_sess)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hhhj<hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j:hj6hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubhdesc_sig_space)}(h h]h }(hhhjNhhhNhNubah}(h]h ]wah"]h$]h&]uh1jLhj6hhhjKhMubh desc_name)}(htransport_init_sessionh]h desc_sig_name)}(htransport_init_sessionh]htransport_init_session}(hhhjehhhNhNubah}(h]h ]nah"]h$]h&]uh1jchj_ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j]hj6hhhjKhMubhdesc_parameterlist)}(h(struct se_session *se_sess)h]hdesc_parameter)}(hstruct se_session *se_sessh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjgsbc.transport_init_sessionasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubhdesc_sig_punctuation)}(h*h]h*}(hhhjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hj6hhhjKhMubeh}(h]h ]h"]h$]h&]j|j} add_permalinkuh1j4sphinx_line_type declaratorhj0hhhjKhMubah}(h]j'ah ](sig sig-objecteh"]h$]h&] is_multilineuh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj+hhubh desc_content)}(hhh]h)}(hinitialize a session objecth]hinitialize a session object}(hj)hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj$hhubah}(h]h ]h"]h$]h&]uh1j"hj+hhhjKhMubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypej?desctypej?noindexuh1j)hhhjhNhNubh container)}(h**Parameters** ``struct se_session *se_sess`` Session object pointer. **Description** The caller must have zero-initialized **se_sess** before calling this function.h](h)}(h**Parameters**h]hstrong)}(hjOh]h Parameters}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjMubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjIubhdefinition_list)}(hhh]hdefinition_list_item)}(h7``struct se_session *se_sess`` Session object pointer. h](hterm)}(h``struct se_session *se_sess``h]hliteral)}(hjvh]hstruct se_session *se_sess}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjtubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjnubh definition)}(hhh]h)}(hSession object pointer.h]hSession object pointer.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjiubah}(h]h ]h"]h$]h&]uh1jghjIubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjIubh)}(hOThe caller must have zero-initialized **se_sess** before calling this function.h](h&The caller must have zero-initialized }(h&The caller must have zero-initialized hjhhhNhNubjR)}(h **se_sess**h]hse_sess}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubh before calling this function.}(h before calling this function.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$transport_alloc_session (C function)c.transport_alloc_sessionhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hNstruct se_session * transport_alloc_session (enum target_prot_op sup_prot_ops)h]j5)}(hLstruct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops)h](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhMubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhj-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j)}jtransport_alloc_sessionsbc.transport_alloc_sessionasbuh1hhj hhhjhMubjM)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhMubj)}(hjh]h*}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj^)}(htransport_alloc_sessionh]jd)}(hjKh]htransport_alloc_session}(hhhjmhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjiubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj hhhjhMubj)}(h"(enum target_prot_op sup_prot_ops)h]j)}(h enum target_prot_op sup_prot_opsh](j)}(henumh]henum}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(htarget_prot_oph]htarget_prot_op}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jIc.transport_alloc_sessionasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h sup_prot_opsh]h sup_prot_ops}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hj hhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM!hjhhubj#)}(hhh]h)}(h+allocate a session object and initialize ith]h+allocate a session object and initialize it}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjhNhNubjH)}(hm**Parameters** ``enum target_prot_op sup_prot_ops`` bitmask that defines which T10-PI modes are supported.h](h)}(h**Parameters**h]jR)}(hj h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM"hjubjh)}(hhh]jm)}(h[``enum target_prot_op sup_prot_ops`` bitmask that defines which T10-PI modes are supported.h](js)}(h$``enum target_prot_op sup_prot_ops``h]jy)}(hj?h]h enum target_prot_op sup_prot_ops}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj=ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM$hj9ubj)}(hhh]h)}(h6bitmask that defines which T10-PI modes are supported.h]h6bitmask that defines which T10-PI modes are supported.}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jlhjThM$hj6ubah}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%)transport_alloc_session_tags (C function)c.transport_alloc_session_tagshNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hjint transport_alloc_session_tags (struct se_session *se_sess, unsigned int tag_num, unsigned int tag_size)h]j5)}(hiint transport_alloc_session_tags(struct se_session *se_sess, unsigned int tag_num, unsigned int tag_size)h](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM4ubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhM4ubj^)}(htransport_alloc_session_tagsh]jd)}(htransport_alloc_session_tagsh]htransport_alloc_session_tags}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhM4ubj)}(hI(struct se_session *se_sess, unsigned int tag_num, unsigned int tag_size)h](j)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.transport_alloc_session_tagsasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hhhj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned int tag_numh](j;)}(hunsignedh]hunsigned}(hhhjHhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hhhjVhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubj;)}(hinth]hint}(hhhjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubjd)}(htag_numh]htag_num}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned int tag_sizeh](j;)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(htag_sizeh]htag_size}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhM4ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhM4ubah}(h]jah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM9hjhhubj#)}(hhh]h)}(h#allocate target driver private datah]h#allocate target driver private data}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM3hjhhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjhNhNubjH)}(hX**Parameters** ``struct se_session *se_sess`` Session pointer. ``unsigned int tag_num`` Maximum number of in-flight commands between initiator and target. ``unsigned int tag_size`` Size in bytes of the private data a target driver associates with each command.h](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM7hjubjh)}(hhh](jm)}(h0``struct se_session *se_sess`` Session pointer. h](js)}(h``struct se_session *se_sess``h]jy)}(hj=h]hstruct se_session *se_sess}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj;ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM4hj7ubj)}(hhh]h)}(hSession pointer.h]hSession pointer.}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhM4hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jlhjRhM4hj4ubjm)}(h\``unsigned int tag_num`` Maximum number of in-flight commands between initiator and target. h](js)}(h``unsigned int tag_num``h]jy)}(hjvh]hunsigned int tag_num}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjtubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM5hjpubj)}(hhh]h)}(hBMaximum number of in-flight commands between initiator and target.h]hBMaximum number of in-flight commands between initiator and target.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jlhjhM5hj4ubjm)}(hi``unsigned int tag_size`` Size in bytes of the private data a target driver associates with each command.h](js)}(h``unsigned int tag_size``h]jy)}(hjh]hunsigned int tag_size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM6hjubj)}(hhh]h)}(hOSize in bytes of the private data a target driver associates with each command.h]hOSize in bytes of the private data a target driver associates with each command.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhM6hj4ubeh}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_init_cmd (C function)c.target_init_cmdhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hint target_init_cmd (struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h]j5)}(hint target_init_cmd(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMubj^)}(htarget_init_cmdh]jd)}(htarget_init_cmdh]htarget_init_cmd}(hhhj)hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj%ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhMubj)}(h(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjM)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhjchhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j)}jj+sbc.target_init_cmdasbuh1hhjAubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjd)}(hse_cmdh]hse_cmd}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_init_cmdasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hhhj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubjM)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj#ubj;)}(hcharh]hchar}(hhhjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubjM)}(h h]h }(hhhjQhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj#ubj)}(hjh]h*}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjd)}(hsenseh]hsense}(hhhjlhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj#ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_init_cmdasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(hu32 data_lengthh](h)}(hhh]jd)}(hu32h]hu32}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_init_cmdasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h data_lengthh]h data_length}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(h int task_attrh](j;)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubjM)}(h h]h }(hhhj# hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubjd)}(h task_attrh]h task_attr}(hhhj1 hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(h int data_dirh](j;)}(hinth]hint}(hhhjJ hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjF ubjM)}(h h]h }(hhhjX hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjF ubjd)}(hdata_dirh]hdata_dir}(hhhjf hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjF ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubj)}(h int flagsh](j;)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{ ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{ ubjd)}(hflagsh]hflags}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{ ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj=ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjhhubj#)}(hhh]h)}(hinitialize se_cmdh]hinitialize se_cmd}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj hhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj jEj jFuh1j)hhhjhNhNubjH)}(hXD**Parameters** ``struct se_cmd *se_cmd`` command descriptor to init ``struct se_session *se_sess`` associated se_sess for endpoint ``unsigned char *sense`` pointer to SCSI sense buffer ``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun ``u32 data_length`` fabric expected data transfer length ``int task_attr`` SAM task attribute ``int data_dir`` DMA data direction ``int flags`` flags for command submission from target_sc_flags_tables **Description** Task tags are supported if the caller has set **se_cmd->tag**. If the fabric driver calls target_stop_session, then it must check the return code and handle failures. This will never fail for other drivers, and the return code can be ignored. **Return** - less than zero to signal active I/O shutdown failure. - zero on success.h](h)}(h**Parameters**h]jR)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubjh)}(hhh](jm)}(h5``struct se_cmd *se_cmd`` command descriptor to init h](js)}(h``struct se_cmd *se_cmd``h]jy)}(hj h]hstruct se_cmd *se_cmd}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(hcommand descriptor to inith]hcommand descriptor to init}(hj" hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj hMhj ubjm)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](js)}(h``struct se_session *se_sess``h]jy)}(hj@ h]hstruct se_session *se_sess}(hhhjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj> ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj: ubj)}(hhh]h)}(hassociated se_sess for endpointh]hassociated se_sess for endpoint}(hj[ hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU hMhjV ubah}(h]h ]h"]h$]h&]uh1jhj: ubeh}(h]h ]h"]h$]h&]uh1jlhjU hMhj ubjm)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](js)}(h``unsigned char *sense``h]jy)}(hjy h]hunsigned char *sense}(hhhj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjw ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjs ubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjs ubeh}(h]h ]h"]h$]h&]uh1jlhj hMhj ubjm)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](js)}(h``u64 unpacked_lun``h]jy)}(hj h]hu64 unpacked_lun}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(h+unpacked LUN to reference for struct se_lunh]h+unpacked LUN to reference for struct se_lun}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj hMhj ubjm)}(h9``u32 data_length`` fabric expected data transfer length h](js)}(h``u32 data_length``h]jy)}(hj h]hu32 data_length}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(h$fabric expected data transfer lengthh]h$fabric expected data transfer length}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj hMhj ubjm)}(h%``int task_attr`` SAM task attribute h](js)}(h``int task_attr``h]jy)}(hj$ h]h int task_attr}(hhhj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj" ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(hSAM task attributeh]hSAM task attribute}(hj? hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9 hMhj: ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj9 hMhj ubjm)}(h$``int data_dir`` DMA data direction h](js)}(h``int data_dir``h]jy)}(hj] h]h int data_dir}(hhhj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj[ ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjW ubj)}(hhh]h)}(hDMA data directionh]hDMA data direction}(hjx hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr hMhjs ubah}(h]h ]h"]h$]h&]uh1jhjW ubeh}(h]h ]h"]h$]h&]uh1jlhjr hMhj ubjm)}(hG``int flags`` flags for command submission from target_sc_flags_tables h](js)}(h ``int flags``h]jy)}(hj h]h int flags}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(h8flags for command submission from target_sc_flags_tablesh]h8flags for command submission from target_sc_flags_tables}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jghj ubh)}(h**Description**h]jR)}(hj h]h Description}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubh)}(h>Task tags are supported if the caller has set **se_cmd->tag**.h](h.Task tags are supported if the caller has set }(h.Task tags are supported if the caller has set hj hhhNhNubjR)}(h**se_cmd->tag**h]h se_cmd->tag}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj ubh.}(h.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubh)}(hIf the fabric driver calls target_stop_session, then it must check the return code and handle failures. This will never fail for other drivers, and the return code can be ignored.h]hIf the fabric driver calls target_stop_session, then it must check the return code and handle failures. This will never fail for other drivers, and the return code can be ignored.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubh)}(h **Return**h]jR)}(hj h]hReturn}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubh block_quote)}(hhh]h bullet_list)}(hhh](h list_item)}(h5less than zero to signal active I/O shutdown failure.h]h)}(hj? h]h5less than zero to signal active I/O shutdown failure.}(hj? hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj= ubah}(h]h ]h"]h$]h&]uh1j; hj8 ubj< )}(hzero on success.h]h)}(hjW h]hzero on success.}(hjW hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjU ubah}(h]h ]h"]h$]h&]uh1j; hj8 ubeh}(h]h ]h"]h$]h&]bullet-uh1j6 hjN hMhj3 ubah}(h]h ]h"]h$]h&]uh1j1 hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_submit_prep (C function)c.target_submit_prephNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hint target_submit_prep (struct se_cmd *se_cmd, unsigned char *cdb, struct scatterlist *sgl, u32 sgl_count, struct scatterlist *sgl_bidi, u32 sgl_bidi_count, struct scatterlist *sgl_prot, u32 sgl_prot_count, gfp_t gfp)h]j5)}(hint target_submit_prep(struct se_cmd *se_cmd, unsigned char *cdb, struct scatterlist *sgl, u32 sgl_count, struct scatterlist *sgl_bidi, u32 sgl_bidi_count, struct scatterlist *sgl_prot, u32 sgl_prot_count, gfp_t gfp)h](j;)}(hinth]hint}(hhhj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhj hMubj^)}(htarget_submit_preph]jd)}(htarget_submit_preph]htarget_submit_prep}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj hhhj hMubj)}(h(struct se_cmd *se_cmd, unsigned char *cdb, struct scatterlist *sgl, u32 sgl_count, struct scatterlist *sgl_bidi, u32 sgl_bidi_count, struct scatterlist *sgl_prot, u32 sgl_prot_count, gfp_t gfp)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.target_submit_prepasbuh1hhj ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hhhj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hse_cmdh]hse_cmd}(hhhj1 hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hunsigned char *cdbh](j;)}(hunsignedh]hunsigned}(hhhjJ hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjF ubjM)}(h h]h }(hhhjX hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjF ubj;)}(hcharh]hchar}(hhhjf hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjF ubjM)}(h h]h }(hhhjt hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjF ubj)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubjd)}(hcdbh]hcdb}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjF ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sglh](j)}(hjh]hstruct}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhj ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hsglh]hsgl}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(h u32 sgl_counth](h)}(hhh]jd)}(hu32h]hu32}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h sgl_counth]h sgl_count}(hhhjGhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sgl_bidih](j)}(hjh]hstruct}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjM)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj\ubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hhhj~hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhj\ubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj\ubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjd)}(hsgl_bidih]hsgl_bidi}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj\ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hu32 sgl_bidi_counth](h)}(hhh]jd)}(hu32h]hu32}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hsgl_bidi_counth]hsgl_bidi_count}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sgl_proth](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hhhj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hhhjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsgl_proth]hsgl_prot}(hhhjohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hu32 sgl_prot_counth](h)}(hhh]jd)}(hu32h]hu32}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hsgl_prot_counth]hsgl_prot_count}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(h gfp_t gfph](h)}(hhh]jd)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj hhhj hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj hhubj#)}(hhh]h)}(hprepare cmd for submissionh]hprepare cmd for submission}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj'hhubah}(h]h ]h"]h$]h&]uh1j"hj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjBjEjBjFuh1j)hhhjhNhNubjH)}(hX$**Parameters** ``struct se_cmd *se_cmd`` command descriptor to prep ``unsigned char *cdb`` pointer to SCSI CDB ``struct scatterlist *sgl`` struct scatterlist memory for unidirectional mapping ``u32 sgl_count`` scatterlist count for unidirectional mapping ``struct scatterlist *sgl_bidi`` struct scatterlist memory for bidirectional READ mapping ``u32 sgl_bidi_count`` scatterlist count for bidirectional READ mapping ``struct scatterlist *sgl_prot`` struct scatterlist memory protection information ``u32 sgl_prot_count`` scatterlist count for protection information ``gfp_t gfp`` gfp allocation type **Return** - less than zero to signal failure. - zero on success. **Description** If failure is returned, lio will the callers queue_status to complete the cmd.h](h)}(h**Parameters**h]jR)}(hjLh]h Parameters}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjJubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubjh)}(hhh](jm)}(h5``struct se_cmd *se_cmd`` command descriptor to prep h](js)}(h``struct se_cmd *se_cmd``h]jy)}(hjkh]hstruct se_cmd *se_cmd}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjiubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjeubj)}(hhh]h)}(hcommand descriptor to preph]hcommand descriptor to prep}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h+``unsigned char *cdb`` pointer to SCSI CDB h](js)}(h``unsigned char *cdb``h]jy)}(hjh]hunsigned char *cdb}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hpointer to SCSI CDBh]hpointer to SCSI CDB}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(hQ``struct scatterlist *sgl`` struct scatterlist memory for unidirectional mapping h](js)}(h``struct scatterlist *sgl``h]jy)}(hjh]hstruct scatterlist *sgl}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h4struct scatterlist memory for unidirectional mappingh]h4struct scatterlist memory for unidirectional mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h?``u32 sgl_count`` scatterlist count for unidirectional mapping h](js)}(h``u32 sgl_count``h]jy)}(hjh]h u32 sgl_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h,scatterlist count for unidirectional mappingh]h,scatterlist count for unidirectional mapping}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhj+hMhjbubjm)}(hZ``struct scatterlist *sgl_bidi`` struct scatterlist memory for bidirectional READ mapping h](js)}(h ``struct scatterlist *sgl_bidi``h]jy)}(hjOh]hstruct scatterlist *sgl_bidi}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjMubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjIubj)}(hhh]h)}(h8struct scatterlist memory for bidirectional READ mappingh]h8struct scatterlist memory for bidirectional READ mapping}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jlhjdhMhjbubjm)}(hH``u32 sgl_bidi_count`` scatterlist count for bidirectional READ mapping h](js)}(h``u32 sgl_bidi_count``h]jy)}(hjh]hu32 sgl_bidi_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h0scatterlist count for bidirectional READ mappingh]h0scatterlist count for bidirectional READ mapping}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(hR``struct scatterlist *sgl_prot`` struct scatterlist memory protection information h](js)}(h ``struct scatterlist *sgl_prot``h]jy)}(hjh]hstruct scatterlist *sgl_prot}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h0struct scatterlist memory protection informationh]h0struct scatterlist memory protection information}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(hD``u32 sgl_prot_count`` scatterlist count for protection information h](js)}(h``u32 sgl_prot_count``h]jy)}(hjh]hu32 sgl_prot_count}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h,scatterlist count for protection informationh]h,scatterlist count for protection information}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h"``gfp_t gfp`` gfp allocation type h](js)}(h ``gfp_t gfp``h]jy)}(hj3h]h gfp_t gfp}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj1ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj-ubj)}(hhh]h)}(hgfp allocation typeh]hgfp allocation type}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jlhjHhMhjbubeh}(h]h ]h"]h$]h&]uh1jghjFubh)}(h **Return**h]jR)}(hjnh]hReturn}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjlubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubj2 )}(hhh]j7 )}(hhh](j< )}(h!less than zero to signal failure.h]h)}(hjh]h!less than zero to signal failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubah}(h]h ]h"]h$]h&]uh1j; hjubj< )}(hzero on success. h]h)}(hzero on success.h]hzero on success.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubah}(h]h ]h"]h$]h&]uh1j; hjubeh}(h]h ]h"]h$]h&]js jt uh1j6 hjhMhjubah}(h]h ]h"]h$]h&]uh1j1 hjFubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubh)}(hNIf failure is returned, lio will the callers queue_status to complete the cmd.h]hNIf failure is returned, lio will the callers queue_status to complete the cmd.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_submit_cmd (C function)c.target_submit_cmdhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hvoid target_submit_cmd (struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *cdb, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h]j5)}(hvoid target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *cdb, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h](j;)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhMubj^)}(htarget_submit_cmdh]jd)}(htarget_submit_cmdh]htarget_submit_cmd}(hhhj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj+ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj hhhjhMubj)}(h(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *cdb, unsigned char *sense, u64 unpacked_lun, u32 data_length, int task_attr, int data_dir, int flags)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjM)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjGubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhjihhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j)}jj1sbc.target_submit_cmdasbuh1hhjGubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjGubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjd)}(hse_cmdh]hse_cmd}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjGubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(hunsigned char *cdbh](j;)}(hunsignedh]hunsigned}(hhhj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)ubjM)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)ubj;)}(hcharh]hchar}(hhhjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)ubjM)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)ubj)}(hjh]h*}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjd)}(hcdbh]hcdb}(hhhjrhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj)ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsenseh]hsense}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhjubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(hu32 data_lengthh](h)}(hhh]jd)}(hu32h]hu32}(hhhj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhj-ubjM)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubjd)}(h data_lengthh]h data_length}(hhhj`hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(h int task_attrh](j;)}(hinth]hint}(hhhjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjuubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjuubjd)}(h task_attrh]h task_attr}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjuubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(h int data_dirh](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hdata_dirh]hdata_dir}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubj)}(h int flagsh](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hflagsh]hflags}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj hhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM&hjhhubj#)}(hhh]h)}(h3lookup unpacked lun and submit uninitialized se_cmdh]h3lookup unpacked lun and submit uninitialized se_cmd}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj'hhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjBjEjBjFuh1j)hhhjhNhNubjH)}(hX**Parameters** ``struct se_cmd *se_cmd`` command descriptor to submit ``struct se_session *se_sess`` associated se_sess for endpoint ``unsigned char *cdb`` pointer to SCSI CDB ``unsigned char *sense`` pointer to SCSI sense buffer ``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun ``u32 data_length`` fabric expected data transfer length ``int task_attr`` SAM task attribute ``int data_dir`` DMA data direction ``int flags`` flags for command submission from target_sc_flags_tables **Description** Task tags are supported if the caller has set **se_cmd->tag**. This may only be called from process context, and also currently assumes internal allocation of fabric payload buffer by target-core. It also assumes interal target core SGL memory allocation. This function must only be used by drivers that do their own sync during shutdown and does not use target_stop_session. If there is a failure this function will call into the fabric driver's queue_status with a CHECK_CONDITION.h](h)}(h**Parameters**h]jR)}(hjLh]h Parameters}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjJubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubjh)}(hhh](jm)}(h7``struct se_cmd *se_cmd`` command descriptor to submit Jh](js)}(h``struct se_cmd *se_cmd``h]jy)}(hjkh]hstruct se_cmd *se_cmd}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjiubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjeubj)}(hhh]h)}(hcommand descriptor to submith]hcommand descriptor to submit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](js)}(h``struct se_session *se_sess``h]jy)}(hjh]hstruct se_session *se_sess}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hassociated se_sess for endpointh]hassociated se_sess for endpoint}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h+``unsigned char *cdb`` pointer to SCSI CDB h](js)}(h``unsigned char *cdb``h]jy)}(hjh]hunsigned char *cdb}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hpointer to SCSI CDBh]hpointer to SCSI CDB}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](js)}(h``unsigned char *sense``h]jy)}(hjh]hunsigned char *sense}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhj+hMhjbubjm)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](js)}(h``u64 unpacked_lun``h]jy)}(hjOh]hu64 unpacked_lun}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjMubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjIubj)}(hhh]h)}(h+unpacked LUN to reference for struct se_lunh]h+unpacked LUN to reference for struct se_lun}(hjjhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jlhjdhMhjbubjm)}(h9``u32 data_length`` fabric expected data transfer length h](js)}(h``u32 data_length``h]jy)}(hjh]hu32 data_length}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h$fabric expected data transfer lengthh]h$fabric expected data transfer length}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h%``int task_attr`` SAM task attribute h](js)}(h``int task_attr``h]jy)}(hjh]h int task_attr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hSAM task attributeh]hSAM task attribute}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(h$``int data_dir`` DMA data direction h](js)}(h``int data_dir``h]jy)}(hjh]h int data_dir}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hDMA data directionh]hDMA data direction}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjbubjm)}(hG``int flags`` flags for command submission from target_sc_flags_tables h](js)}(h ``int flags``h]jy)}(hj3h]h int flags}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj1ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj-ubj)}(hhh]h)}(h8flags for command submission from target_sc_flags_tablesh]h8flags for command submission from target_sc_flags_tables}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jlhjHhMhjbubeh}(h]h ]h"]h$]h&]uh1jghjFubh)}(h**Description**h]jR)}(hjnh]h Description}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjlubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubh)}(h>Task tags are supported if the caller has set **se_cmd->tag**.h](h.Task tags are supported if the caller has set }(h.Task tags are supported if the caller has set hjhhhNhNubjR)}(h**se_cmd->tag**h]h se_cmd->tag}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubh.}(hj hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubh)}(hThis may only be called from process context, and also currently assumes internal allocation of fabric payload buffer by target-core.h]hThis may only be called from process context, and also currently assumes internal allocation of fabric payload buffer by target-core.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubh)}(h:It also assumes interal target core SGL memory allocation.h]h:It also assumes interal target core SGL memory allocation.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjFubh)}(hThis function must only be used by drivers that do their own sync during shutdown and does not use target_stop_session. If there is a failure this function will call into the fabric driver's queue_status with a CHECK_CONDITION.h]hThis function must only be used by drivers that do their own sync during shutdown and does not use target_stop_session. If there is a failure this function will call into the fabric driver’s queue_status with a CHECK_CONDITION.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM!hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_submit (C function)c.target_submithNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h)int target_submit (struct se_cmd *se_cmd)h]j5)}(h(int target_submit(struct se_cmd *se_cmd)h](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMubj^)}(h target_submith]jd)}(h target_submith]h target_submit}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhMubj)}(h(struct se_cmd *se_cmd)h]j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjM)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj,ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhjNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j)}jjsbc.target_submitasbuh1hhj,ubjM)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj,ubj)}(hjh]h*}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjd)}(hse_cmdh]hse_cmd}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj,ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj(ubah}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjhhubj#)}(hhh]h)}(h7perform final initialization and submit cmd to LIO coreh]h7perform final initialization and submit cmd to LIO core}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjhNhNubjH)}(h**Parameters** ``struct se_cmd *se_cmd`` command descriptor to submit **Description** target_submit_prep or something similar must have been called on the cmd, and this must be called from process context.h](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubjh)}(hhh]jm)}(h7``struct se_cmd *se_cmd`` command descriptor to submit h](js)}(h``struct se_cmd *se_cmd``h]jy)}(hjh]hstruct se_cmd *se_cmd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hcommand descriptor to submith]hcommand descriptor to submit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhj hMhjubah}(h]h ]h"]h$]h&]uh1jghjubh)}(h**Description**h]jR)}(hj0h]h Description}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj.ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubh)}(hwtarget_submit_prep or something similar must have been called on the cmd, and this must be called from process context.h]hwtarget_submit_prep or something similar must have been called on the cmd, and this must be called from process context.}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_submit_tmr (C function)c.target_submit_tmrhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hint target_submit_tmr (struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, void *fabric_tmr_ptr, unsigned char tm_type, gfp_t gfp, u64 tag, int flags)h]j5)}(hint target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, void *fabric_tmr_ptr, unsigned char tm_type, gfp_t gfp, u64 tag, int flags)h](j;)}(hinth]hint}(hhhjuhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjqhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjqhhhjhMubj^)}(htarget_submit_tmrh]jd)}(htarget_submit_tmrh]htarget_submit_tmr}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjqhhhjhMubj)}(h(struct se_cmd *se_cmd, struct se_session *se_sess, unsigned char *sense, u64 unpacked_lun, void *fabric_tmr_ptr, unsigned char tm_type, gfp_t gfp, u64 tag, int flags)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_cmdh]hse_cmd}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhjBhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhj ubjM)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hhhjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hse_sessh]hse_sess}(hhhj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsenseh]hsense}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hhhj!hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hvoid *fabric_tmr_ptrh](j;)}(hvoidh]hvoid}(hhhj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubjM)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj6ubj)}(hjh]h*}(hhhjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjd)}(hfabric_tmr_ptrh]hfabric_tmr_ptr}(hhhjchhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned char tm_typeh](j;)}(hunsignedh]hunsigned}(hhhj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjxubj;)}(hcharh]hchar}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjxubjd)}(htm_typeh]htm_type}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjxubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(h gfp_t gfph](h)}(hhh]jd)}(hgfp_th]hgfp_t}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hgfph]hgfp}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hu64 tagh](h)}(hhh]jd)}(hu64h]hu64}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(htagh]htag}(hhhjDhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(h int flagsh](j;)}(hinth]hint}(hhhj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubjM)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjYubjd)}(hflagsh]hflags}(hhhjyhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjYubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjqhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjmhhhjhMubah}(h]jhah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjjhhubj#)}(hhh]h)}(h@lookup unpacked lun and submit uninitialized se_cmd for TMR CDBsh]h@lookup unpacked lun and submit uninitialized se_cmd for TMR CDBs}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hjjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjhNhNubjH)}(hX**Parameters** ``struct se_cmd *se_cmd`` command descriptor to submit ``struct se_session *se_sess`` associated se_sess for endpoint ``unsigned char *sense`` pointer to SCSI sense buffer ``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun ``void *fabric_tmr_ptr`` fabric context for TMR req ``unsigned char tm_type`` Type of TM request ``gfp_t gfp`` gfp type for caller ``u64 tag`` referenced task tag for TMR_ABORT_TASK ``int flags`` submit cmd flags **Description** Callable from all contexts.h](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubjh)}(hhh](jm)}(h7``struct se_cmd *se_cmd`` command descriptor to submit h](js)}(h``struct se_cmd *se_cmd``h]jy)}(hjh]hstruct se_cmd *se_cmd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hcommand descriptor to submith]hcommand descriptor to submit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](js)}(h``struct se_session *se_sess``h]jy)}(hjh]hstruct se_session *se_sess}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hassociated se_sess for endpointh]hassociated se_sess for endpoint}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhj3hMhjubjm)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](js)}(h``unsigned char *sense``h]jy)}(hjWh]hunsigned char *sense}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjUubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjQubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jlhjlhMhjubjm)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](js)}(h``u64 unpacked_lun``h]jy)}(hjh]hu64 unpacked_lun}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(h+unpacked LUN to reference for struct se_lunh]h+unpacked LUN to reference for struct se_lun}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h4``void *fabric_tmr_ptr`` fabric context for TMR req h](js)}(h``void *fabric_tmr_ptr``h]jy)}(hjh]hvoid *fabric_tmr_ptr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hfabric context for TMR reqh]hfabric context for TMR req}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h-``unsigned char tm_type`` Type of TM request h](js)}(h``unsigned char tm_type``h]jy)}(hjh]hunsigned char tm_type}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hType of TM requesth]hType of TM request}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h"``gfp_t gfp`` gfp type for caller h](js)}(h ``gfp_t gfp``h]jy)}(hj;h]h gfp_t gfp}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj9ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj5ubj)}(hhh]h)}(hgfp type for callerh]hgfp type for caller}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jlhjPhMhjubjm)}(h3``u64 tag`` referenced task tag for TMR_ABORT_TASK h](js)}(h ``u64 tag``h]jy)}(hjth]hu64 tag}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjrubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjnubj)}(hhh]h)}(h&referenced task tag for TMR_ABORT_TASKh]h&referenced task tag for TMR_ABORT_TASK}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h``int flags`` submit cmd flags h](js)}(h ``int flags``h]jy)}(hjh]h int flags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hsubmit cmd flagsh]hsubmit cmd flags}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubeh}(h]h ]h"]h$]h&]uh1jghjubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubh)}(hCallable from all contexts.h]hCallable from all contexts.}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% target_get_sess_cmd (C function)c.target_get_sess_cmdhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h>int target_get_sess_cmd (struct se_cmd *se_cmd, bool ack_kref)h]j5)}(h=int target_get_sess_cmd(struct se_cmd *se_cmd, bool ack_kref)h](j;)}(hinth]hint}(hhhj- hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj) hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hhhj< hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj) hhhj; hM ubj^)}(htarget_get_sess_cmdh]jd)}(htarget_get_sess_cmdh]htarget_get_sess_cmd}(hhhjN hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjJ ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj) hhhj; hM ubj)}(h&(struct se_cmd *se_cmd, bool ack_kref)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hhhjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubjM)}(h h]h }(hhhjw hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjf ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjP sbc.target_get_sess_cmdasbuh1hhjf ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjf ubj)}(hjh]h*}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubjd)}(hse_cmdh]hse_cmd}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjf ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjb ubj)}(h bool ack_krefh](j;)}(hboolh]hbool}(hhhj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubjd)}(hack_krefh]hack_kref}(hhhj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjb ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj) hhhj; hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj% hhhj; hM ubah}(h]j ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj" hhubj#)}(hhh]h)}(h1Verify the session is accepting cmds and take refh]h1Verify the session is accepting cmds and take ref}(hj%!hj#!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj !hhubah}(h]h ]h"]h$]h&]uh1j"hj" hhhj; hM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj;!jEj;!jFuh1j)hhhjhNhNubjH)}(h**Parameters** ``struct se_cmd *se_cmd`` command descriptor to add ``bool ack_kref`` Signal that fabric will perform an ack target_put_sess_cmd()h](h)}(h**Parameters**h]jR)}(hjE!h]h Parameters}(hhhjG!hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjC!ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj?!ubjh)}(hhh](jm)}(h4``struct se_cmd *se_cmd`` command descriptor to add h](js)}(h``struct se_cmd *se_cmd``h]jy)}(hjd!h]hstruct se_cmd *se_cmd}(hhhjf!hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjb!ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj^!ubj)}(hhh]h)}(hcommand descriptor to addh]hcommand descriptor to add}(hj!hj}!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy!hM hjz!ubah}(h]h ]h"]h$]h&]uh1jhj^!ubeh}(h]h ]h"]h$]h&]uh1jlhjy!hM hj[!ubjm)}(hN``bool ack_kref`` Signal that fabric will perform an ack target_put_sess_cmd()h](js)}(h``bool ack_kref``h]jy)}(hj!h]h bool ack_kref}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj!ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj!ubj)}(hhh]h)}(hvoid target_wait_for_cmds (struct target_cmd_counter *cmd_cnt)h]j5)}(h=void target_wait_for_cmds(struct target_cmd_counter *cmd_cnt)h](j;)}(hvoidh]hvoid}(hhhj1&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-&hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hhhj@&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-&hhhj?&hM ubj^)}(htarget_wait_for_cmdsh]jd)}(htarget_wait_for_cmdsh]htarget_wait_for_cmds}(hhhjR&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjN&ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj-&hhhj?&hM ubj)}(h$(struct target_cmd_counter *cmd_cnt)h]j)}(h"struct target_cmd_counter *cmd_cnth](j)}(hjh]hstruct}(hhhjn&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj&ubjM)}(h h]h }(hhhj{&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjj&ubh)}(hhh]jd)}(htarget_cmd_counterh]htarget_cmd_counter}(hhhj&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjT&sbc.target_wait_for_cmdsasbuh1hhjj&ubjM)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjj&ubj)}(hjh]h*}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj&ubjd)}(hcmd_cnth]hcmd_cnt}(hhhj&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjj&ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjf&ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj-&hhhj?&hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj)&hhhj?&hM ubah}(h]j$&ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj&&hhubj#)}(hhh]h)}(hWait for outstanding cmds.h]hWait for outstanding cmds.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj&hhubah}(h]h ]h"]h$]h&]uh1j"hj&&hhhj?&hM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj 'jEj 'jFuh1j)hhhjhNhNubjH)}(h\**Parameters** ``struct target_cmd_counter *cmd_cnt`` counter to wait for active I/O for.h](h)}(h**Parameters**h]jR)}(hj'h]h Parameters}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj'ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj'ubjh)}(hhh]jm)}(hJ``struct target_cmd_counter *cmd_cnt`` counter to wait for active I/O for.h](js)}(h&``struct target_cmd_counter *cmd_cnt``h]jy)}(hj3'h]h"struct target_cmd_counter *cmd_cnt}(hhhj5'hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj1'ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj-'ubj)}(hhh]h)}(h#counter to wait for active I/O for.h]h#counter to wait for active I/O for.}(hjN'hjL'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hjI'ubah}(h]h ]h"]h$]h&]uh1jhj-'ubeh}(h]h ]h"]h$]h&]uh1jlhjH'hM hj*'ubah}(h]h ]h"]h$]h&]uh1jghj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%&target_wait_for_sess_cmds (C function)c.target_wait_for_sess_cmdshNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h;void target_wait_for_sess_cmds (struct se_session *se_sess)h]j5)}(h:void target_wait_for_sess_cmds(struct se_session *se_sess)h](j;)}(hvoidh]hvoid}(hhhj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'hhhj'hM ubj^)}(htarget_wait_for_sess_cmdsh]jd)}(htarget_wait_for_sess_cmdsh]htarget_wait_for_sess_cmds}(hhhj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj'hhhj'hM ubj)}(h(struct se_session *se_sess)h]j)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjM)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubh)}(hhh]jd)}(h se_sessionh]h se_session}(hhhj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jj'sbc.target_wait_for_sess_cmdsasbuh1hhj'ubjM)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubj)}(hjh]h*}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjd)}(hse_sessh]hse_sess}(hhhj#(hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj'ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj'hhhj'hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj'hhhj'hM ubah}(h]j'ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj'hhubj#)}(hhh]h)}(hWait for outstanding commandsh]hWait for outstanding commands}(hjP(hjN(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hjK(hhubah}(h]h ]h"]h$]h&]uh1j"hj'hhhj'hM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjf(jEjf(jFuh1j)hhhjhNhNubjH)}(hO**Parameters** ``struct se_session *se_sess`` session to wait for active I/Oh](h)}(h**Parameters**h]jR)}(hjp(h]h Parameters}(hhhjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjn(ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hjj(ubjh)}(hhh]jm)}(h=``struct se_session *se_sess`` session to wait for active I/Oh](js)}(h``struct se_session *se_sess``h]jy)}(hj(h]hstruct se_session *se_sess}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj(ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj(ubj)}(hhh]h)}(hsession to wait for active I/Oh]hsession to wait for active I/O}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jlhj(hM hj(ubah}(h]h ]h"]h$]h&]uh1jghjj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%%transport_wait_for_tasks (C function)c.transport_wait_for_taskshNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h2bool transport_wait_for_tasks (struct se_cmd *cmd)h]j5)}(h1bool transport_wait_for_tasks(struct se_cmd *cmd)h](j;)}(hj h]hbool}(hhhj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hhhj(hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj(hhhj(hM ubj^)}(htransport_wait_for_tasksh]jd)}(htransport_wait_for_tasksh]htransport_wait_for_tasks}(hhhj )hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj)ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj(hhhj(hM ubj)}(h(struct se_cmd *cmd)h]j)}(hstruct se_cmd *cmdh](j)}(hjh]hstruct}(hhhj%)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!)ubjM)}(h h]h }(hhhj2)hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj!)ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhjC)hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj@)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE)modnameN classnameNjj)}j]j)}jj )sbc.transport_wait_for_tasksasbuh1hhj!)ubjM)}(h h]h }(hhhjc)hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj!)ubj)}(hjh]h*}(hhhjq)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!)ubjd)}(hcmdh]hcmd}(hhhj~)hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj!)ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj)ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj(hhhj(hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj(hhhj(hM ubah}(h]j(ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj(hhubj#)}(hhh]h)}(h1set CMD_T_STOP and wait for t_transport_stop_comph]h1set CMD_T_STOP and wait for t_transport_stop_comp}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj)hhubah}(h]h ]h"]h$]h&]uh1j"hj(hhhj(hM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj)jEj)jFuh1j)hhhjhNhNubjH)}(h;**Parameters** ``struct se_cmd *cmd`` command to wait onh](h)}(h**Parameters**h]jR)}(hj)h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj)ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj)ubjh)}(hhh]jm)}(h)``struct se_cmd *cmd`` command to wait onh](js)}(h``struct se_cmd *cmd``h]jy)}(hj)h]hstruct se_cmd *cmd}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj)ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj)ubj)}(hhh]h)}(hcommand to wait onh]hcommand to wait on}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jlhj)hM hj)ubah}(h]h ]h"]h$]h&]uh1jghj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%target_send_busy (C function)c.target_send_busyhNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h)int target_send_busy (struct se_cmd *cmd)h]j5)}(h(int target_send_busy(struct se_cmd *cmd)h](j;)}(hinth]hint}(hhhjD*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@*hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hhhjS*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@*hhhjR*hM ubj^)}(htarget_send_busyh]jd)}(htarget_send_busyh]htarget_send_busy}(hhhje*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchja*ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj@*hhhjR*hM ubj)}(h(struct se_cmd *cmd)h]j)}(hstruct se_cmd *cmdh](j)}(hjh]hstruct}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}*ubjM)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj}*ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hhhj*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}jjg*sbc.target_send_busyasbuh1hhj}*ubjM)}(h h]h }(hhhj*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj}*ubj)}(hjh]h*}(hhhj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}*ubjd)}(hcmdh]hcmd}(hhhj*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj}*ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjy*ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj@*hhhjR*hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj<*hhhjR*hM ubah}(h]j7*ah ](jjeh"]h$]h&]j uh1j.hh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj9*hhubj#)}(hhh]h)}(h+Send SCSI BUSY status back to the initiatorh]h+Send SCSI BUSY status back to the initiator}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj+hhubah}(h]h ]h"]h$]h&]uh1j"hj9*hhhjR*hM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj+jEj+jFuh1j)hhhjhNhNubjH)}(h**Parameters** ``struct se_cmd *cmd`` SCSI command for which to send a BUSY reply. **Note** Only call this function if target_submit_cmd*() failed.h](h)}(h**Parameters**h]jR)}(hj'+h]h Parameters}(hhhj)+hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj%+ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj!+ubjh)}(hhh]jm)}(hD``struct se_cmd *cmd`` SCSI command for which to send a BUSY reply. h](js)}(h``struct se_cmd *cmd``h]jy)}(hjF+h]hstruct se_cmd *cmd}(hhhjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjD+ubah}(h]h ]h"]h$]h&]uh1jrhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj@+ubj)}(hhh]h)}(h,SCSI command for which to send a BUSY reply.h]h,SCSI command for which to send a BUSY reply.}(hja+hj_+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[+hM hj\+ubah}(h]h ]h"]h$]h&]uh1jhj@+ubeh}(h]h ]h"]h$]h&]uh1jlhj[+hM hj=+ubah}(h]h ]h"]h$]h&]uh1jghj!+ubh)}(h**Note**h]jR)}(hj+h]hNote}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj+ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj!+ubh)}(h7Only call this function if target_submit_cmd*() failed.h]h7Only call this function if target_submit_cmd*() failed.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj!+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjhhhNhNubeh}(h] target-core-transport-interfacesah ]h"] target core transport interfacesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hTarget-supported userspace I/Oh]hTarget-supported userspace I/O}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhhhKubh)}(hhh](h)}(h Userspace I/Oh]h Userspace I/O}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hNhNubh)}(hDefine a shared-memory interface for LIO to pass SCSI commands and data to userspace for processing. This is to allow backends that are too complex for in-kernel support to be possible.h]hDefine a shared-memory interface for LIO to pass SCSI commands and data to userspace for processing. This is to allow backends that are too complex for in-kernel support to be possible.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/target:25: ./drivers/target/target_core_user.chK%hj+ubh)}(h[It uses the UIO framework to do a lot of the device-creation and introspection work for us.h]h[It uses the UIO framework to do a lot of the device-creation and introspection work for us.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/target:25: ./drivers/target/target_core_user.chK)hj+ubh)}(hXSee the .h file for how the ring is laid out. Note that while the command ring is defined, the particulars of the data area are not. Offset values in the command entry point to other locations internal to the mmap-ed area. There is separate space outside the command ring for data buffers. This leaves maximum flexibility for moving buffer allocations, or even page flipping or other allocation techniques, without altering the command ring layout.h]hXSee the .h file for how the ring is laid out. Note that while the command ring is defined, the particulars of the data area are not. Offset values in the command entry point to other locations internal to the mmap-ed area. There is separate space outside the command ring for data buffers. This leaves maximum flexibility for moving buffer allocations, or even page flipping or other allocation techniques, without altering the command ring layout.}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/target:25: ./drivers/target/target_core_user.chK,hj+ubh)}(hXpSECURITY: The user process must be assumed to be malicious. There's no way to prevent it breaking the command ring protocol if it wants, but in order to prevent other issues we must only ever read *data* from the shared memory area, not offsets or sizes. This applies to command ring entries as well as the mailbox. Extra code needed for this may have a 'UAM' comment.h](hSECURITY: The user process must be assumed to be malicious. There’s no way to prevent it breaking the command ring protocol if it wants, but in order to prevent other issues we must only ever read }(hSECURITY: The user process must be assumed to be malicious. There's no way to prevent it breaking the command ring protocol if it wants, but in order to prevent other issues we must only ever read hj,hhhNhNubhemphasis)}(h*data*h]hdata}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j ,hj,ubh from the shared memory area, not offsets or sizes. This applies to command ring entries as well as the mailbox. Extra code needed for this may have a ‘UAM’ comment.}(h from the shared memory area, not offsets or sizes. This applies to command ring entries as well as the mailbox. Extra code needed for this may have a 'UAM' comment.hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/target:25: ./drivers/target/target_core_user.chK4hj+ubeh}(h] userspace-i-oah ]h"] userspace i/oah$]h&]uh1hhj+hhhNhNubh)}(hhh](h)}(h Ring Designh]h Ring Design}(hj6,hj4,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1,hNhNubh)}(hThe mmaped area is divided into three parts: 1) The mailbox (struct tcmu_mailbox, below); 2) The command ring; 3) Everything beyond the command ring (data).h]hThe mmaped area is divided into three parts: 1) The mailbox (struct tcmu_mailbox, below); 2) The command ring; 3) Everything beyond the command ring (data).}(hjD,hjB,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj1,ubh)}(hThe mailbox tells userspace the offset of the command ring from the start of the shared memory region, and how big the command ring is.h]hThe mailbox tells userspace the offset of the command ring from the start of the shared memory region, and how big the command ring is.}(hjS,hjQ,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj1,ubh)}(hThe kernel passes SCSI commands to userspace by putting a struct tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking userspace via UIO's interrupt mechanism.h]hThe kernel passes SCSI commands to userspace by putting a struct tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking userspace via UIO’s interrupt mechanism.}(hjb,hj`,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj1,ubh)}(htcmu_cmd_entry contains a header. If the header type is PAD, userspace should skip hdr->length bytes (mod cmdr_size) to find the next cmd_entry.h]htcmu_cmd_entry contains a header. If the header type is PAD, userspace should skip hdr->length bytes (mod cmdr_size) to find the next cmd_entry.}(hjq,hjo,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj1,ubh)}(hOtherwise, the entry will contain offsets into the mmaped area that contain the cdb and data buffers -- the latter accessible via the iov array. iov addresses are also offsets into the shared area.h]hOtherwise, the entry will contain offsets into the mmaped area that contain the cdb and data buffers -- the latter accessible via the iov array. iov addresses are also offsets into the shared area.}(hj,hj~,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhK hj1,ubh)}(hX/When userspace is completed handling the command, set entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate, and also set mailbox->cmd_tail equal to the old cmd_tail plus hdr->length, mod cmdr_size. If cmd_tail doesn't equal cmd_head, it should process the next packet the same way, and so on.h]hX1When userspace is completed handling the command, set entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate, and also set mailbox->cmd_tail equal to the old cmd_tail plus hdr->length, mod cmdr_size. If cmd_tail doesn’t equal cmd_head, it should process the next packet the same way, and so on.}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhK$hj1,ubeh}(h] ring-designah ]h"] ring designah$]h&]uh1hhj+hhhNhNubeh}(h]target-supported-userspace-i-oah ]h"]target-supported userspace i/oah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hiSCSI helper functionsh]hiSCSI helper functions}(hj,hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hhhhhK ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$iscsi_prep_data_out_pdu (C function)c.iscsi_prep_data_out_pduhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hjvoid iscsi_prep_data_out_pdu (struct iscsi_task *task, struct iscsi_r2t_info *r2t, struct iscsi_data *hdr)h]j5)}(hivoid iscsi_prep_data_out_pdu(struct iscsi_task *task, struct iscsi_r2t_info *r2t, struct iscsi_data *hdr)h](j;)}(hvoidh]hvoid}(hhhj,hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKubjM)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj,hhhj,hKubj^)}(hiscsi_prep_data_out_pduh]jd)}(hiscsi_prep_data_out_pduh]hiscsi_prep_data_out_pdu}(hhhj,hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj,ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj,hhhj,hKubj)}(hM(struct iscsi_task *task, struct iscsi_r2t_info *r2t, struct iscsi_data *hdr)h](j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjM)}(h h]h }(hhhj -hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhj1-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj.-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3-modnameN classnameNjj)}j]j)}jj,sbc.iscsi_prep_data_out_pduasbuh1hhj-ubjM)}(h h]h }(hhhjQ-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubj)}(hjh]h*}(hhhj_-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjd)}(htaskh]htask}(hhhjl-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj -ubj)}(hstruct iscsi_r2t_info *r2th](j)}(hjh]hstruct}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjM)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubh)}(hhh]jd)}(hiscsi_r2t_infoh]hiscsi_r2t_info}(hhhj-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jM-c.iscsi_prep_data_out_pduasbuh1hhj-ubjM)}(h h]h }(hhhj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubj)}(hjh]h*}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjd)}(hr2th]hr2t}(hhhj-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj -ubj)}(hstruct iscsi_data *hdrh](j)}(hjh]hstruct}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjM)}(h h]h }(hhhj.hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubh)}(hhh]jd)}(h iscsi_datah]h iscsi_data}(hhhj.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]jM-c.iscsi_prep_data_out_pduasbuh1hhj-ubjM)}(h h]h }(hhhj1.hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubj)}(hjh]h*}(hhhj?.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjd)}(hhdrh]hhdr}(hhhjL.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj -ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj,hhhj,hKubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj,hhhj,hKubah}(h]j,ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj,hhubj#)}(hhh]h)}(hinitialize Data-Outh]hinitialize Data-Out}(hjy.hjw.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhjt.hhubah}(h]h ]h"]h$]h&]uh1j"hj,hhhj,hKubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj.jEj.jFuh1j)hhhj,hNhNubjH)}(hXP**Parameters** ``struct iscsi_task *task`` scsi command task ``struct iscsi_r2t_info *r2t`` R2T info ``struct iscsi_data *hdr`` iscsi data in pdu **Notes** Initialize Data-Out within this R2T sequence and finds proper data_offset within this SCSI command. This function is called with connection lock taken.h](h)}(h**Parameters**h]jR)}(hj.h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj.ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubjh)}(hhh](jm)}(h.``struct iscsi_task *task`` scsi command task h](js)}(h``struct iscsi_task *task``h]jy)}(hj.h]hstruct iscsi_task *task}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj.ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj)}(hhh]h)}(hscsi command taskh]hscsi command task}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jlhj.hKhj.ubjm)}(h(``struct iscsi_r2t_info *r2t`` R2T info h](js)}(h``struct iscsi_r2t_info *r2t``h]jy)}(hj.h]hstruct iscsi_r2t_info *r2t}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj.ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj)}(hhh]h)}(hR2T infoh]hR2T info}(hj /hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jlhj/hKhj.ubjm)}(h-``struct iscsi_data *hdr`` iscsi data in pdu h](js)}(h``struct iscsi_data *hdr``h]jy)}(hj*/h]hstruct iscsi_data *hdr}(hhhj,/hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj(/ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj$/ubj)}(hhh]h)}(hiscsi data in pduh]hiscsi data in pdu}(hjE/hjC/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?/hKhj@/ubah}(h]h ]h"]h$]h&]uh1jhj$/ubeh}(h]h ]h"]h$]h&]uh1jlhj?/hKhj.ubeh}(h]h ]h"]h$]h&]uh1jghj.ubh)}(h **Notes**h]jR)}(hje/h]hNotes}(hhhjg/hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjc/ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj2 )}(hhh](h)}(hcInitialize Data-Out within this R2T sequence and finds proper data_offset within this SCSI command.h]hcInitialize Data-Out within this R2T sequence and finds proper data_offset within this SCSI command.}(hj/hj~/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj{/ubh)}(h3This function is called with connection lock taken.h]h3This function is called with connection lock taken.}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj{/ubeh}(h]h ]h"]h$]h&]uh1j1 hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%__iscsi_put_task (C function)c.__iscsi_put_taskhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h/void __iscsi_put_task (struct iscsi_task *task)h]j5)}(h.void __iscsi_put_task(struct iscsi_task *task)h](j;)}(hvoidh]hvoid}(hhhj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/hhhj/hMubj^)}(h__iscsi_put_taskh]jd)}(h__iscsi_put_taskh]h__iscsi_put_task}(hhhj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj/hhhj/hMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjM)}(h h]h }(hhhj 0hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhj0hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj/sbc.__iscsi_put_taskasbuh1hhj/ubjM)}(h h]h }(hhhj=0hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/ubj)}(hjh]h*}(hhhjK0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjd)}(htaskh]htask}(hhhjX0hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj/ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj/hhhj/hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj/hhhj/hMubah}(h]j/ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj/hhubj#)}(hhh]h)}(hdrop the refcount on a taskh]hdrop the refcount on a task}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0hhubah}(h]h ]h"]h$]h&]uh1j"hj/hhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj0jEj0jFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_task *task`` iscsi_task to drop the refcount on **Description** The back_lock must be held when calling in case it frees the task.h](h)}(h**Parameters**h]jR)}(hj0h]h Parameters}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0ubjh)}(hhh]jm)}(h?``struct iscsi_task *task`` iscsi_task to drop the refcount on h](js)}(h``struct iscsi_task *task``h]jy)}(hj0h]hstruct iscsi_task *task}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj0ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0ubj)}(hhh]h)}(h"iscsi_task to drop the refcount onh]h"iscsi_task to drop the refcount on}(hj0hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jlhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jghj0ubh)}(h**Description**h]jR)}(hj0h]h Description}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0ubh)}(hBThe back_lock must be held when calling in case it frees the task.h]hBThe back_lock must be held when calling in case it frees the task.}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%%iscsi_complete_scsi_task (C function)c.iscsi_complete_scsi_taskhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h_void iscsi_complete_scsi_task (struct iscsi_task *task, uint32_t exp_cmdsn, uint32_t max_cmdsn)h]j5)}(h^void iscsi_complete_scsi_task(struct iscsi_task *task, uint32_t exp_cmdsn, uint32_t max_cmdsn)h](j;)}(hvoidh]hvoid}(hhhjD1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@1hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM%ubjM)}(h h]h }(hhhjS1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@1hhhjR1hM%ubj^)}(hiscsi_complete_scsi_taskh]jd)}(hiscsi_complete_scsi_taskh]hiscsi_complete_scsi_task}(hhhje1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchja1ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj@1hhhjR1hM%ubj)}(hA(struct iscsi_task *task, uint32_t exp_cmdsn, uint32_t max_cmdsn)h](j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}1ubjM)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj}1ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jjg1sbc.iscsi_complete_scsi_taskasbuh1hhj}1ubjM)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj}1ubj)}(hjh]h*}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}1ubjd)}(htaskh]htask}(hhhj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj}1ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjy1ubj)}(huint32_t exp_cmdsnh](h)}(hhh]jd)}(huint32_th]huint32_t}(hhhj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j1c.iscsi_complete_scsi_taskasbuh1hhj1ubjM)}(h h]h }(hhhj2hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj1ubjd)}(h exp_cmdsnh]h exp_cmdsn}(hhhj"2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjy1ubj)}(huint32_t max_cmdsnh](h)}(hhh]jd)}(huint32_th]huint32_t}(hhhj>2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@2modnameN classnameNjj)}j]j1c.iscsi_complete_scsi_taskasbuh1hhj72ubjM)}(h h]h }(hhhj\2hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj72ubjd)}(h max_cmdsnh]h max_cmdsn}(hhhjj2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj72ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjy1ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj@1hhhjR1hM%ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj<1hhhjR1hM%ubah}(h]j71ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM.hj91hhubj#)}(hhh]h)}(hfinish scsi task normallyh]hfinish scsi task normally}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM$hj2hhubah}(h]h ]h"]h$]h&]uh1j"hj91hhhjR1hM%ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj2jEj2jFuh1j)hhhj,hNhNubjH)}(hX5**Parameters** ``struct iscsi_task *task`` iscsi task for scsi cmd ``uint32_t exp_cmdsn`` expected cmd sn in cpu format ``uint32_t max_cmdsn`` max cmd sn in cpu format **Description** This is used when drivers do not need or cannot perform lower level pdu processing. Called with session back_lockh](h)}(h**Parameters**h]jR)}(hj2h]h Parameters}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM(hj2ubjh)}(hhh](jm)}(h4``struct iscsi_task *task`` iscsi task for scsi cmd h](js)}(h``struct iscsi_task *task``h]jy)}(hj2h]hstruct iscsi_task *task}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj2ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM%hj2ubj)}(hhh]h)}(hiscsi task for scsi cmdh]hiscsi task for scsi cmd}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM%hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jlhj2hM%hj2ubjm)}(h5``uint32_t exp_cmdsn`` expected cmd sn in cpu format h](js)}(h``uint32_t exp_cmdsn``h]jy)}(hj3h]huint32_t exp_cmdsn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj 3ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM&hj 3ubj)}(hhh]h)}(hexpected cmd sn in cpu formath]hexpected cmd sn in cpu format}(hj*3hj(3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$3hM&hj%3ubah}(h]h ]h"]h$]h&]uh1jhj 3ubeh}(h]h ]h"]h$]h&]uh1jlhj$3hM&hj2ubjm)}(h0``uint32_t max_cmdsn`` max cmd sn in cpu format h](js)}(h``uint32_t max_cmdsn``h]jy)}(hjH3h]huint32_t max_cmdsn}(hhhjJ3hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjF3ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM'hjB3ubj)}(hhh]h)}(hmax cmd sn in cpu formath]hmax cmd sn in cpu format}(hjc3hja3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]3hM'hj^3ubah}(h]h ]h"]h$]h&]uh1jhjB3ubeh}(h]h ]h"]h$]h&]uh1jlhj]3hM'hj2ubeh}(h]h ]h"]h$]h&]uh1jghj2ubh)}(h**Description**h]jR)}(hj3h]h Description}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj3ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM)hj2ubh)}(hSThis is used when drivers do not need or cannot perform lower level pdu processing.h]hSThis is used when drivers do not need or cannot perform lower level pdu processing.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM)hj2ubh)}(hCalled with session back_lockh]hCalled with session back_lock}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM,hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_itt_to_task (C function)c.iscsi_itt_to_taskhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hJstruct iscsi_task * iscsi_itt_to_task (struct iscsi_conn *conn, itt_t itt)h]j5)}(hHstruct iscsi_task *iscsi_itt_to_task(struct iscsi_conn *conn, itt_t itt)h](j)}(hjh]hstruct}(hhhj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj3hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3hhhj3hMubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhj3hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jiscsi_itt_to_tasksbc.iscsi_itt_to_taskasbuh1hhj3hhhj3hMubjM)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3hhhj3hMubj)}(hjh]h*}(hhhj%4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubj^)}(hiscsi_itt_to_taskh]jd)}(hj4h]hiscsi_itt_to_task}(hhhj64hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj24ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj3hhhj3hMubj)}(h$(struct iscsi_conn *conn, itt_t itt)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhjQ4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM4ubjM)}(h h]h }(hhhj^4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjM4ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjo4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjl4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq4modnameN classnameNjj)}j]j4c.iscsi_itt_to_taskasbuh1hhjM4ubjM)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjM4ubj)}(hjh]h*}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM4ubjd)}(hconnh]hconn}(hhhj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjM4ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjI4ubj)}(h itt_t itth](h)}(hhh]jd)}(hitt_th]hitt_t}(hhhj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j4c.iscsi_itt_to_taskasbuh1hhj4ubjM)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj4ubjd)}(hitth]hitt}(hhhj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjI4ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj3hhhj3hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj3hhubj#)}(hhh]h)}(hlook up task by itth]hlook up task by itt}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj5hhubah}(h]h ]h"]h$]h&]uh1j"hj3hhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj35jEj35jFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_conn *conn`` iscsi connection ``itt_t itt`` itt **Description** This should be used for mgmt tasks like login and nops, or if the LDD's itt space does not include the session age. The session back_lock must be held.h](h)}(h**Parameters**h]jR)}(hj=5h]h Parameters}(hhhj?5hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj;5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj75ubjh)}(hhh](jm)}(h-``struct iscsi_conn *conn`` iscsi connection h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj\5h]hstruct iscsi_conn *conn}(hhhj^5hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjZ5ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjV5ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjw5hju5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq5hMhjr5ubah}(h]h ]h"]h$]h&]uh1jhjV5ubeh}(h]h ]h"]h$]h&]uh1jlhjq5hMhjS5ubjm)}(h``itt_t itt`` itt h](js)}(h ``itt_t itt``h]jy)}(hj5h]h itt_t itt}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj5ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj5ubj)}(hhh]h)}(hitth]hitt}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jlhj5hMhjS5ubeh}(h]h ]h"]h$]h&]uh1jghj75ubh)}(h**Description**h]jR)}(hj5h]h Description}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj75ubh)}(hsThis should be used for mgmt tasks like login and nops, or if the LDD's itt space does not include the session age.h]huThis should be used for mgmt tasks like login and nops, or if the LDD’s itt space does not include the session age.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj75ubh)}(h#The session back_lock must be held.h]h#The session back_lock must be held.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj75ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%!__iscsi_complete_pdu (C function)c.__iscsi_complete_pduhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hbint __iscsi_complete_pdu (struct iscsi_conn *conn, struct iscsi_hdr *hdr, char *data, int datalen)h]j5)}(haint __iscsi_complete_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, char *data, int datalen)h](j;)}(hinth]hint}(hhhj$6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj 6hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj36hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj 6hhhj26hMubj^)}(h__iscsi_complete_pduh]jd)}(h__iscsi_complete_pduh]h__iscsi_complete_pdu}(hhhjE6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjA6ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj 6hhhj26hMubj)}(hI(struct iscsi_conn *conn, struct iscsi_hdr *hdr, char *data, int datalen)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhja6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubjM)}(h h]h }(hhhjn6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj]6ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jjG6sbc.__iscsi_complete_pduasbuh1hhj]6ubjM)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj]6ubj)}(hjh]h*}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]6ubjd)}(hconnh]hconn}(hhhj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj]6ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjY6ubj)}(hstruct iscsi_hdr *hdrh](j)}(hjh]hstruct}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjM)}(h h]h }(hhhj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj6ubh)}(hhh]jd)}(h iscsi_hdrh]h iscsi_hdr}(hhhj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j6c.__iscsi_complete_pduasbuh1hhj6ubjM)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj6ubj)}(hjh]h*}(hhhj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjd)}(hhdrh]hhdr}(hhhj*7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjY6ubj)}(h char *datah](j;)}(hcharh]hchar}(hhhjC7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?7ubjM)}(h h]h }(hhhjQ7hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj?7ubj)}(hjh]h*}(hhhj_7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?7ubjd)}(hdatah]hdata}(hhhjl7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj?7ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjY6ubj)}(h int datalenh](j;)}(hinth]hint}(hhhj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubjM)}(h h]h }(hhhj7hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj7ubjd)}(hdatalenh]hdatalen}(hhhj7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj7ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjY6ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj 6hhhj26hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj6hhhj26hMubah}(h]j6ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj6hhubj#)}(hhh]h)}(h complete pduh]h complete pdu}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7hhubah}(h]h ]h"]h$]h&]uh1j"hj6hhhj26hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj7jEj7jFuh1j)hhhj,hNhNubjH)}(hXZ**Parameters** ``struct iscsi_conn *conn`` iscsi conn ``struct iscsi_hdr *hdr`` iscsi header ``char *data`` data buffer ``int datalen`` len of data buffer **Description** Completes pdu processing by freeing any resources allocated at queuecommand or send generic. session back_lock must be held and verify itt must have been called.h](h)}(h**Parameters**h]jR)}(hj7h]h Parameters}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7ubjh)}(hhh](jm)}(h'``struct iscsi_conn *conn`` iscsi conn h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj 8h]hstruct iscsi_conn *conn}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj 8ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj8ubj)}(hhh]h)}(h iscsi connh]h iscsi conn}(hj(8hj&8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"8hMhj#8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jlhj"8hMhj8ubjm)}(h'``struct iscsi_hdr *hdr`` iscsi header h](js)}(h``struct iscsi_hdr *hdr``h]jy)}(hjF8h]hstruct iscsi_hdr *hdr}(hhhjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjD8ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@8ubj)}(hhh]h)}(h iscsi headerh]h iscsi header}(hja8hj_8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[8hMhj\8ubah}(h]h ]h"]h$]h&]uh1jhj@8ubeh}(h]h ]h"]h$]h&]uh1jlhj[8hMhj8ubjm)}(h``char *data`` data buffer h](js)}(h``char *data``h]jy)}(hj8h]h char *data}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj}8ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjy8ubj)}(hhh]h)}(h data bufferh]h data buffer}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjy8ubeh}(h]h ]h"]h$]h&]uh1jlhj8hMhj8ubjm)}(h#``int datalen`` len of data buffer h](js)}(h``int datalen``h]jy)}(hj8h]h int datalen}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj8ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj8ubj)}(hhh]h)}(hlen of data bufferh]hlen of data buffer}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jlhj8hMhj8ubeh}(h]h ]h"]h$]h&]uh1jghj7ubh)}(h**Description**h]jR)}(hj8h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7ubh)}(hCompletes pdu processing by freeing any resources allocated at queuecommand or send generic. session back_lock must be held and verify itt must have been called.h]hCompletes pdu processing by freeing any resources allocated at queuecommand or send generic. session back_lock must be held and verify itt must have been called.}(hj 9hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_itt_to_ctask (C function)c.iscsi_itt_to_ctaskhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hKstruct iscsi_task * iscsi_itt_to_ctask (struct iscsi_conn *conn, itt_t itt)h]j5)}(hIstruct iscsi_task *iscsi_itt_to_ctask(struct iscsi_conn *conn, itt_t itt)h](j)}(hjh]hstruct}(hhhj89hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj49hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMwubjM)}(h h]h }(hhhjF9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj49hhhjE9hMwubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhjW9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjT9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY9modnameN classnameNjj)}j]j)}jiscsi_itt_to_ctasksbc.iscsi_itt_to_ctaskasbuh1hhj49hhhjE9hMwubjM)}(h h]h }(hhhjx9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj49hhhjE9hMwubj)}(hjh]h*}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj49hhhjE9hMwubj^)}(hiscsi_itt_to_ctaskh]jd)}(hju9h]hiscsi_itt_to_ctask}(hhhj9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj9ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj49hhhjE9hMwubj)}(h$(struct iscsi_conn *conn, itt_t itt)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjM)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhj9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]js9c.iscsi_itt_to_ctaskasbuh1hhj9ubjM)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9ubj)}(hjh]h*}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjd)}(hconnh]hconn}(hhhj :hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj9ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9ubj)}(h itt_t itth](h)}(hhh]jd)}(hitt_th]hitt_t}(hhhj%:hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj":ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj':modnameN classnameNjj)}j]js9c.iscsi_itt_to_ctaskasbuh1hhj:ubjM)}(h h]h }(hhhjC:hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj:ubjd)}(hitth]hitt}(hhhjQ:hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj:ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj49hhhjE9hMwubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj09hhhjE9hMwubah}(h]j+9ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM~hj-9hhubj#)}(hhh]h)}(hlook up ctask by itth]hlook up ctask by itt}(hj~:hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMvhjy:hhubah}(h]h ]h"]h$]h&]uh1j"hj-9hhhjE9hMwubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj:jEj:jFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_conn *conn`` iscsi connection ``itt_t itt`` itt **Description** This should be used for cmd tasks. The session back_lock must be held.h](h)}(h**Parameters**h]jR)}(hj:h]h Parameters}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMzhj:ubjh)}(hhh](jm)}(h-``struct iscsi_conn *conn`` iscsi connection h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj:h]hstruct iscsi_conn *conn}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj:ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMwhj:ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMwhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jlhj:hMwhj:ubjm)}(h``itt_t itt`` itt h](js)}(h ``itt_t itt``h]jy)}(hj:h]h itt_t itt}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj:ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMxhj:ubj)}(hhh]h)}(hitth]hitt}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ;hMxhj ;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jlhj ;hMxhj:ubeh}(h]h ]h"]h$]h&]uh1jghj:ubh)}(h**Description**h]jR)}(hj1;h]h Description}(hhhj3;hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj/;ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMzhj:ubh)}(h"This should be used for cmd tasks.h]h"This should be used for cmd tasks.}(hjI;hjG;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMzhj:ubh)}(h#The session back_lock must be held.h]h#The session back_lock must be held.}(hjX;hjV;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM|hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_requeue_task (C function)c.iscsi_requeue_taskhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h1void iscsi_requeue_task (struct iscsi_task *task)h]j5)}(h0void iscsi_requeue_task(struct iscsi_task *task)h](j;)}(hvoidh]hvoid}(hhhj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj;hhhj;hMubj^)}(hiscsi_requeue_taskh]jd)}(hiscsi_requeue_taskh]hiscsi_requeue_task}(hhhj;hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj;hhhj;hMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjM)}(h h]h }(hhhj;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj;ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhj;hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j)}jj;sbc.iscsi_requeue_taskasbuh1hhj;ubjM)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj;ubj)}(hjh]h*}(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjd)}(htaskh]htask}(hhhj<hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj;ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj;hhhj;hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj};hhhj;hMubah}(h]jx;ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjz;hhubj#)}(hhh]h)}(h*requeue task to run from session workqueueh]h*requeue task to run from session workqueue}(hjH<hjF<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjC<hhubah}(h]h ]h"]h$]h&]uh1j"hjz;hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj^<jEj^<jFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_task *task`` task to requeue **Description** Callers must have taken a ref to the task that is going to be requeued.h](h)}(h**Parameters**h]jR)}(hjh<h]h Parameters}(hhhjj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjf<ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjb<ubjh)}(hhh]jm)}(h,``struct iscsi_task *task`` task to requeue h](js)}(h``struct iscsi_task *task``h]jy)}(hj<h]hstruct iscsi_task *task}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj<ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj<ubj)}(hhh]h)}(htask to requeueh]htask to requeue}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jlhj<hMhj~<ubah}(h]h ]h"]h$]h&]uh1jghjb<ubh)}(h**Description**h]jR)}(hj<h]h Description}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj<ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjb<ubh)}(hGCallers must have taken a ref to the task that is going to be requeued.h]hGCallers must have taken a ref to the task that is going to be requeued.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjb<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% iscsi_suspend_queue (C function)c.iscsi_suspend_queuehNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h2void iscsi_suspend_queue (struct iscsi_conn *conn)h]j5)}(h1void iscsi_suspend_queue(struct iscsi_conn *conn)h](j;)}(hvoidh]hvoid}(hhhj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj=hhhj=hMubj^)}(hiscsi_suspend_queueh]jd)}(hiscsi_suspend_queueh]hiscsi_suspend_queue}(hhhj(=hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$=ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj=hhhj=hMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhjD=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@=ubjM)}(h h]h }(hhhjQ=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@=ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjb=hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj_=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjd=modnameN classnameNjj)}j]j)}jj*=sbc.iscsi_suspend_queueasbuh1hhj@=ubjM)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@=ubj)}(hjh]h*}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@=ubjd)}(hconnh]hconn}(hhhj=hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj@=ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<=ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj=hhhj=hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj<hhhj=hMubah}(h]j<ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj<hhubj#)}(hhh]h)}(hsuspend iscsi_queuecommandh]hsuspend iscsi_queuecommand}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj=hhubah}(h]h ]h"]h$]h&]uh1j"hj<hhhj=hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj=jEj=jFuh1j)hhhj,hNhNubjH)}(hX**Parameters** ``struct iscsi_conn *conn`` iscsi conn to stop queueing IO on **Description** This grabs the session frwd_lock to make sure no one is in xmit_task/queuecommand, and then sets suspend to prevent new commands from being queued. This only needs to be called by offload drivers that need to sync a path like ep disconnect with the iscsi_queuecommand/xmit_task. To start IO again libiscsi will call iscsi_start_tx and iscsi_unblock_session when in FFP.h](h)}(h**Parameters**h]jR)}(hj=h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj=ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj=ubjh)}(hhh]jm)}(h>``struct iscsi_conn *conn`` iscsi conn to stop queueing IO on h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj >h]hstruct iscsi_conn *conn}(hhhj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj>ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj>ubj)}(hhh]h)}(h!iscsi conn to stop queueing IO onh]h!iscsi conn to stop queueing IO on}(hj$>hj">hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jlhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jghj=ubh)}(h**Description**h]jR)}(hjD>h]h Description}(hhhjF>hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjB>ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj=ubh)}(hXqThis grabs the session frwd_lock to make sure no one is in xmit_task/queuecommand, and then sets suspend to prevent new commands from being queued. This only needs to be called by offload drivers that need to sync a path like ep disconnect with the iscsi_queuecommand/xmit_task. To start IO again libiscsi will call iscsi_start_tx and iscsi_unblock_session when in FFP.h]hXqThis grabs the session frwd_lock to make sure no one is in xmit_task/queuecommand, and then sets suspend to prevent new commands from being queued. This only needs to be called by offload drivers that need to sync a path like ep disconnect with the iscsi_queuecommand/xmit_task. To start IO again libiscsi will call iscsi_start_tx and iscsi_unblock_session when in FFP.}(hj\>hjZ>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_suspend_tx (C function)c.iscsi_suspend_txhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h/void iscsi_suspend_tx (struct iscsi_conn *conn)h]j5)}(h.void iscsi_suspend_tx(struct iscsi_conn *conn)h](j;)}(hvoidh]hvoid}(hhhj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>hhhj>hMubj^)}(hiscsi_suspend_txh]jd)}(hiscsi_suspend_txh]hiscsi_suspend_tx}(hhhj>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj>ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj>hhhj>hMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjM)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhj>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j)}jj>sbc.iscsi_suspend_txasbuh1hhj>ubjM)}(h h]h }(hhhj?hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>ubj)}(hjh]h*}(hhhj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjd)}(hconnh]hconn}(hhhj?hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj>ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj>ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj>hhhj>hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj>hhhj>hMubah}(h]j|>ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj~>hhubj#)}(hhh]h)}(hsuspend iscsi_data_xmith]hsuspend iscsi_data_xmit}(hjL?hjJ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjG?hhubah}(h]h ]h"]h$]h&]uh1j"hj~>hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjb?jEjb?jFuh1j)hhhj,hNhNubjH)}(hX**Parameters** ``struct iscsi_conn *conn`` iscsi conn to stop processing IO on. **Description** This function sets the suspend bit to prevent iscsi_data_xmit from sending new IO, and if work is queued on the xmit thread it will wait for it to be completed.h](h)}(h**Parameters**h]jR)}(hjl?h]h Parameters}(hhhjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjj?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjf?ubjh)}(hhh]jm)}(hA``struct iscsi_conn *conn`` iscsi conn to stop processing IO on. h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj?h]hstruct iscsi_conn *conn}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj?ubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj?ubj)}(hhh]h)}(h$iscsi conn to stop processing IO on.h]h$iscsi conn to stop processing IO on.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jlhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jghjf?ubh)}(h**Description**h]jR)}(hj?h]h Description}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjf?ubh)}(hThis function sets the suspend bit to prevent iscsi_data_xmit from sending new IO, and if work is queued on the xmit thread it will wait for it to be completed.h]hThis function sets the suspend bit to prevent iscsi_data_xmit from sending new IO, and if work is queued on the xmit thread it will wait for it to be completed.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjf?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_suspend_rx (C function)c.iscsi_suspend_rxhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h/void iscsi_suspend_rx (struct iscsi_conn *conn)h]j5)}(h.void iscsi_suspend_rx(struct iscsi_conn *conn)h](j;)}(hvoidh]hvoid}(hhhj @hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@hhhj@hMubj^)}(hiscsi_suspend_rxh]jd)}(hiscsi_suspend_rxh]hiscsi_suspend_rx}(hhhj,@hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj(@ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj@hhhj@hMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhjH@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD@ubjM)}(h h]h }(hhhjU@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjD@ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjf@hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjc@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjh@modnameN classnameNjj)}j]j)}jj.@sbc.iscsi_suspend_rxasbuh1hhjD@ubjM)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjD@ubj)}(hjh]h*}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD@ubjd)}(hconnh]hconn}(hhhj@hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjD@ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@@ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj@hhhj@hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj@hhhj@hMubah}(h]j?ah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@hhubj#)}(hhh]h)}(h$Prevent recvwork from running again.h]h$Prevent recvwork from running again.}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@hhubah}(h]h ]h"]h$]h&]uh1j"hj@hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj@jEj@jFuh1j)hhhj,hNhNubjH)}(hA**Parameters** ``struct iscsi_conn *conn`` iscsi conn to stop.h](h)}(h**Parameters**h]jR)}(hj@h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj@ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@ubjh)}(hhh]jm)}(h/``struct iscsi_conn *conn`` iscsi conn to stop.h](js)}(h``struct iscsi_conn *conn``h]jy)}(hj Ah]hstruct iscsi_conn *conn}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj Aubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjAubj)}(hhh]h)}(hiscsi conn to stop.h]hiscsi conn to stop.}(hj(Ahj&AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj#Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jlhj"AhMhjAubah}(h]h ]h"]h$]h&]uh1jghj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_conn_unbind (C function)c.iscsi_conn_unbindhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hHvoid iscsi_conn_unbind (struct iscsi_cls_conn *cls_conn, bool is_active)h]j5)}(hGvoid iscsi_conn_unbind(struct iscsi_cls_conn *cls_conn, bool is_active)h](j;)}(hvoidh]hvoid}(hhhjgAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcAhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hhhjvAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjcAhhhjuAhMubj^)}(hiscsi_conn_unbindh]jd)}(hiscsi_conn_unbindh]hiscsi_conn_unbind}(hhhjAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjcAhhhjuAhMubj)}(h1(struct iscsi_cls_conn *cls_conn, bool is_active)h](j)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjM)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubh)}(hhh]jd)}(hiscsi_cls_connh]hiscsi_cls_conn}(hhhjAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j)}jjAsbc.iscsi_conn_unbindasbuh1hhjAubjM)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubj)}(hjh]h*}(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjd)}(hcls_connh]hcls_conn}(hhhjAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjAubj)}(hbool is_activeh](j;)}(hj h]hbool}(hhhjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubjM)}(h h]h }(hhhj#BhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjBubjd)}(h is_activeh]h is_active}(hhhj1BhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjBubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjAubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjcAhhhjuAhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj_AhhhjuAhMubah}(h]jZAah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj\Ahhubj#)}(hhh]h)}(hprevent queueing to conn.h]hprevent queueing to conn.}(hj^Bhj\BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjYBhhubah}(h]h ]h"]h$]h&]uh1j"hj\AhhhjuAhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjtBjEjtBjFuh1j)hhhj,hNhNubjH)}(hXX**Parameters** ``struct iscsi_cls_conn *cls_conn`` iscsi conn ep is bound to. ``bool is_active`` is the conn in use for boot or is this for EH/termination **Description** This must be called by drivers implementing the ep_disconnect callout. It disables queueing to the connection from libiscsi in preparation for an ep_disconnect call.h](h)}(h**Parameters**h]jR)}(hj~Bh]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj|Bubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjxBubjh)}(hhh](jm)}(h?``struct iscsi_cls_conn *cls_conn`` iscsi conn ep is bound to. h](js)}(h#``struct iscsi_cls_conn *cls_conn``h]jy)}(hjBh]hstruct iscsi_cls_conn *cls_conn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjBubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjBubj)}(hhh]h)}(hiscsi conn ep is bound to.h]hiscsi conn ep is bound to.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jlhjBhMhjBubjm)}(hM``bool is_active`` is the conn in use for boot or is this for EH/termination h](js)}(h``bool is_active``h]jy)}(hjBh]hbool is_active}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjBubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjBubj)}(hhh]h)}(h9is the conn in use for boot or is this for EH/terminationh]h9is the conn in use for boot or is this for EH/termination}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jlhjBhMhjBubeh}(h]h ]h"]h$]h&]uh1jghjxBubh)}(h**Description**h]jR)}(hjCh]h Description}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjCubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjxBubh)}(hThis must be called by drivers implementing the ep_disconnect callout. It disables queueing to the connection from libiscsi in preparation for an ep_disconnect call.h]hThis must be called by drivers implementing the ep_disconnect callout. It disables queueing to the connection from libiscsi in preparation for an ep_disconnect call.}(hj)Chj'ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjxBubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_eh_session_reset (C function)c.iscsi_eh_session_resethNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h1int iscsi_eh_session_reset (struct scsi_cmnd *sc)h]j5)}(h0int iscsi_eh_session_reset(struct scsi_cmnd *sc)h](j;)}(hinth]hint}(hhhjVChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRChhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM& ubjM)}(h h]h }(hhhjeChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjRChhhjdChM& ubj^)}(hiscsi_eh_session_reseth]jd)}(hiscsi_eh_session_reseth]hiscsi_eh_session_reset}(hhhjwChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjsCubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjRChhhjdChM& ubj)}(h(struct scsi_cmnd *sc)h]j)}(hstruct scsi_cmnd *sch](j)}(hjh]hstruct}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjM)}(h h]h }(hhhjChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjCubh)}(hhh]jd)}(h scsi_cmndh]h scsi_cmnd}(hhhjChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j)}jjyCsbc.iscsi_eh_session_resetasbuh1hhjCubjM)}(h h]h }(hhhjChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjCubj)}(hjh]h*}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjd)}(hsch]hsc}(hhhjChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjCubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjCubah}(h]h ]h"]h$]h&]j|j}uh1j~hjRChhhjdChM& ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjNChhhjdChM& ubah}(h]jICah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM+ hjKChhubj#)}(hhh]h)}(h drop session and attempt reloginh]h drop session and attempt relogin}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM% hjDhhubah}(h]h ]h"]h$]h&]uh1j"hjKChhhjdChM& ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj/DjEj/DjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct scsi_cmnd *sc`` scsi command **Description** This function will wait for a relogin, session termination from userspace, or a recovery/replacement timeout.h](h)}(h**Parameters**h]jR)}(hj9Dh]h Parameters}(hhhj;DhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj7Dubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM) hj3Dubjh)}(hhh]jm)}(h&``struct scsi_cmnd *sc`` scsi command h](js)}(h``struct scsi_cmnd *sc``h]jy)}(hjXDh]hstruct scsi_cmnd *sc}(hhhjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjVDubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM& hjRDubj)}(hhh]h)}(h scsi commandh]h scsi command}(hjsDhjqDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmDhM& hjnDubah}(h]h ]h"]h$]h&]uh1jhjRDubeh}(h]h ]h"]h$]h&]uh1jlhjmDhM& hjODubah}(h]h ]h"]h$]h&]uh1jghj3Dubh)}(h**Description**h]jR)}(hjDh]h Description}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM( hj3Dubh)}(hmThis function will wait for a relogin, session termination from userspace, or a recovery/replacement timeout.h]hmThis function will wait for a relogin, session termination from userspace, or a recovery/replacement timeout.}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM( hj3Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$iscsi_eh_recover_target (C function)c.iscsi_eh_recover_targethNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h2int iscsi_eh_recover_target (struct scsi_cmnd *sc)h]j5)}(h1int iscsi_eh_recover_target(struct scsi_cmnd *sc)h](j;)}(hinth]hint}(hhhjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM ubjM)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDhhhjDhM ubj^)}(hiscsi_eh_recover_targeth]jd)}(hiscsi_eh_recover_targeth]hiscsi_eh_recover_target}(hhhjDhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjDhhhjDhM ubj)}(h(struct scsi_cmnd *sc)h]j)}(hstruct scsi_cmnd *sch](j)}(hjh]hstruct}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjM)}(h h]h }(hhhj"EhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjEubh)}(hhh]jd)}(h scsi_cmndh]h scsi_cmnd}(hhhj3EhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj0Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5EmodnameN classnameNjj)}j]j)}jjDsbc.iscsi_eh_recover_targetasbuh1hhjEubjM)}(h h]h }(hhhjSEhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjEubj)}(hjh]h*}(hhhjaEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubjd)}(hsch]hsc}(hhhjnEhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjEubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj Eubah}(h]h ]h"]h$]h&]j|j}uh1j~hjDhhhjDhM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjDhhhjDhM ubah}(h]jDah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjDhhubj#)}(hhh]h)}(h%reset target and possibly the sessionh]h%reset target and possibly the session}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEhhubah}(h]h ]h"]h$]h&]uh1j"hjDhhhjDhM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjEjEjEjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct scsi_cmnd *sc`` scsi command **Description** This will attempt to send a warm target reset. If that fails, we will escalate to ERL0 session recovery.h](h)}(h**Parameters**h]jR)}(hjEh]h Parameters}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjEubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubjh)}(hhh]jm)}(h&``struct scsi_cmnd *sc`` scsi command h](js)}(h``struct scsi_cmnd *sc``h]jy)}(hjEh]hstruct scsi_cmnd *sc}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjEubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubj)}(hhh]h)}(h scsi commandh]h scsi command}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jlhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jghjEubh)}(h**Description**h]jR)}(hjFh]h Description}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjFubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubh)}(hhThis will attempt to send a warm target reset. If that fails, we will escalate to ERL0 session recovery.h]hhThis will attempt to send a warm target reset. If that fails, we will escalate to ERL0 session recovery.}(hj-Fhj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_host_add (C function)c.iscsi_host_addhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hAint iscsi_host_add (struct Scsi_Host *shost, struct device *pdev)h]j5)}(h@int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev)h](j;)}(hinth]hint}(hhhjZFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVFhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM7 ubjM)}(h h]h }(hhhjiFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjVFhhhjhFhM7 ubj^)}(hiscsi_host_addh]jd)}(hiscsi_host_addh]hiscsi_host_add}(hhhj{FhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjwFubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjVFhhhjhFhM7 ubj)}(h.(struct Scsi_Host *shost, struct device *pdev)h](j)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjM)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjFubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hhhjFhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jj}Fsbc.iscsi_host_addasbuh1hhjFubjM)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjFubj)}(hjh]h*}(hhhjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjd)}(hshosth]hshost}(hhhjFhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjFubj)}(hstruct device *pdevh](j)}(hjh]hstruct}(hhhj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjM)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjGubh)}(hhh]jd)}(hdeviceh]hdevice}(hhhj'GhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$Gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)GmodnameN classnameNjj)}j]jFc.iscsi_host_addasbuh1hhjGubjM)}(h h]h }(hhhjEGhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjGubj)}(hjh]h*}(hhhjSGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjd)}(hpdevh]hpdev}(hhhj`GhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjGubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjFubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjVFhhhjhFhM7 ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjRFhhhjhFhM7 ubah}(h]jMFah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM= hjOFhhubj#)}(hhh]h)}(hadd host to systemh]hadd host to system}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM6 hjGhhubah}(h]h ]h"]h$]h&]uh1j"hjOFhhhjhFhM7 ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjGjEjGjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct Scsi_Host *shost`` scsi host ``struct device *pdev`` parent device **Description** This should be called by partial offload and software iscsi drivers to add a host to the system.h](h)}(h**Parameters**h]jR)}(hjGh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM: hjGubjh)}(hhh](jm)}(h&``struct Scsi_Host *shost`` scsi host h](js)}(h``struct Scsi_Host *shost``h]jy)}(hjGh]hstruct Scsi_Host *shost}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjGubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM7 hjGubj)}(hhh]h)}(h scsi hosth]h scsi host}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM7 hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jlhjGhM7 hjGubjm)}(h&``struct device *pdev`` parent device h](js)}(h``struct device *pdev``h]jy)}(hjHh]hstruct device *pdev}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjHubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM8 hjGubj)}(hhh]h)}(h parent deviceh]h parent device}(hj HhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM8 hjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jlhjHhM8 hjGubeh}(h]h ]h"]h$]h&]uh1jghjGubh)}(h**Description**h]jR)}(hj@Hh]h Description}(hhhjBHhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj>Hubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM: hjGubh)}(h`This should be called by partial offload and software iscsi drivers to add a host to the system.h]h`This should be called by partial offload and software iscsi drivers to add a host to the system.}(hjXHhjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM: hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_host_alloc (C function)c.iscsi_host_allochNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hqstruct Scsi_Host * iscsi_host_alloc (const struct scsi_host_template *sht, int dd_data_size, bool xmit_can_sleep)h]j5)}(hostruct Scsi_Host *iscsi_host_alloc(const struct scsi_host_template *sht, int dd_data_size, bool xmit_can_sleep)h](j)}(hjh]hstruct}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMK ubjM)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHhhhjHhMK ubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hhhjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jiscsi_host_allocsbc.iscsi_host_allocasbuh1hhjHhhhjHhMK ubjM)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHhhhjHhMK ubj)}(hjh]h*}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhMK ubj^)}(hiscsi_host_alloch]jd)}(hjHh]hiscsi_host_alloc}(hhhjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjHhhhjHhMK ubj)}(hM(const struct scsi_host_template *sht, int dd_data_size, bool xmit_can_sleep)h](j)}(h$const struct scsi_host_template *shth](j)}(hconsth]hconst}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjM)}(h h]h }(hhhj IhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubj)}(hjh]hstruct}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjM)}(h h]h }(hhhj(IhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubh)}(hhh]jd)}(hscsi_host_templateh]hscsi_host_template}(hhhj9IhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6Iubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;ImodnameN classnameNjj)}j]jHc.iscsi_host_allocasbuh1hhjHubjM)}(h h]h }(hhhjWIhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubj)}(hjh]h*}(hhhjeIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjd)}(hshth]hsht}(hhhjrIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubj)}(hint dd_data_sizeh](j;)}(hinth]hint}(hhhjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubjM)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIubjd)}(h dd_data_sizeh]h dd_data_size}(hhhjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjIubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubj)}(hbool xmit_can_sleeph](j;)}(hj h]hbool}(hhhjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubjM)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIubjd)}(hxmit_can_sleeph]hxmit_can_sleep}(hhhjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjIubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjHhhhjHhMK ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj}HhhhjHhMK ubah}(h]jxHah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMR hjzHhhubj#)}(hhh]h)}(hallocate a host and driver datah]hallocate a host and driver data}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMJ hjJhhubah}(h]h ]h"]h$]h&]uh1j"hjzHhhhjHhMK ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjJjEjJjFuh1j)hhhj,hNhNubjH)}(hXj**Parameters** ``const struct scsi_host_template *sht`` scsi host template ``int dd_data_size`` driver host data size ``bool xmit_can_sleep`` bool indicating if LLD will queue IO from a work queue **Description** This should be called by partial offload and software iscsi drivers. To access the driver specific memory use the iscsi_host_priv() macro.h](h)}(h**Parameters**h]jR)}(hj(Jh]h Parameters}(hhhj*JhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj&Jubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMN hj"Jubjh)}(hhh](jm)}(h<``const struct scsi_host_template *sht`` scsi host template h](js)}(h(``const struct scsi_host_template *sht``h]jy)}(hjGJh]h$const struct scsi_host_template *sht}(hhhjIJhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjEJubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMK hjAJubj)}(hhh]h)}(hscsi host templateh]hscsi host template}(hjbJhj`JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\JhMK hj]Jubah}(h]h ]h"]h$]h&]uh1jhjAJubeh}(h]h ]h"]h$]h&]uh1jlhj\JhMK hj>Jubjm)}(h+``int dd_data_size`` driver host data size h](js)}(h``int dd_data_size``h]jy)}(hjJh]hint dd_data_size}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj~Jubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chML hjzJubj)}(hhh]h)}(hdriver host data sizeh]hdriver host data size}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhML hjJubah}(h]h ]h"]h$]h&]uh1jhjzJubeh}(h]h ]h"]h$]h&]uh1jlhjJhML hj>Jubjm)}(hO``bool xmit_can_sleep`` bool indicating if LLD will queue IO from a work queue h](js)}(h``bool xmit_can_sleep``h]jy)}(hjJh]hbool xmit_can_sleep}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjJubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMM hjJubj)}(hhh]h)}(h6bool indicating if LLD will queue IO from a work queueh]h6bool indicating if LLD will queue IO from a work queue}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jlhjJhMM hj>Jubeh}(h]h ]h"]h$]h&]uh1jghj"Jubh)}(h**Description**h]jR)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMO hj"Jubh)}(hThis should be called by partial offload and software iscsi drivers. To access the driver specific memory use the iscsi_host_priv() macro.h]hThis should be called by partial offload and software iscsi drivers. To access the driver specific memory use the iscsi_host_priv() macro.}(hj Khj KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMO hj"Jubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_host_remove (C function)c.iscsi_host_removehNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hBvoid iscsi_host_remove (struct Scsi_Host *shost, bool is_shutdown)h]j5)}(hAvoid iscsi_host_remove(struct Scsi_Host *shost, bool is_shutdown)h](j;)}(hvoidh]hvoid}(hhhj9KhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj5KhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMx ubjM)}(h h]h }(hhhjHKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj5KhhhjGKhMx ubj^)}(hiscsi_host_removeh]jd)}(hiscsi_host_removeh]hiscsi_host_remove}(hhhjZKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjVKubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj5KhhhjGKhMx ubj)}(h+(struct Scsi_Host *shost, bool is_shutdown)h](j)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hhhjvKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrKubjM)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrKubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hhhjKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j)}jj\Ksbc.iscsi_host_removeasbuh1hhjrKubjM)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrKubj)}(hjh]h*}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrKubjd)}(hshosth]hshost}(hhhjKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjrKubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjnKubj)}(hbool is_shutdownh](j;)}(hj h]hbool}(hhhjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubjM)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjKubjd)}(h is_shutdownh]h is_shutdown}(hhhjLhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjnKubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj5KhhhjGKhMx ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj1KhhhjGKhMx ubah}(h]j,Kah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM~ hj.Khhubj#)}(hhh]h)}(hremove host and sessionsh]hremove host and sessions}(hj0Lhj.LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMw hj+Lhhubah}(h]h ]h"]h$]h&]uh1j"hj.KhhhjGKhMx ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjFLjEjFLjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct Scsi_Host *shost`` scsi host ``bool is_shutdown`` true if called from a driver shutdown callout **Description** If there are any sessions left, this will initiate the removal and wait for the completion.h](h)}(h**Parameters**h]jR)}(hjPLh]h Parameters}(hhhjRLhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjNLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hjJLubjh)}(hhh](jm)}(h&``struct Scsi_Host *shost`` scsi host h](js)}(h``struct Scsi_Host *shost``h]jy)}(hjoLh]hstruct Scsi_Host *shost}(hhhjqLhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjmLubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMx hjiLubj)}(hhh]h)}(h scsi hosth]h scsi host}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMx hjLubah}(h]h ]h"]h$]h&]uh1jhjiLubeh}(h]h ]h"]h$]h&]uh1jlhjLhMx hjfLubjm)}(hC``bool is_shutdown`` true if called from a driver shutdown callout h](js)}(h``bool is_shutdown``h]jy)}(hjLh]hbool is_shutdown}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjLubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMy hjLubj)}(hhh]h)}(h-true if called from a driver shutdown callouth]h-true if called from a driver shutdown callout}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMy hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jlhjLhMy hjfLubeh}(h]h ]h"]h$]h&]uh1jghjJLubh)}(h**Description**h]jR)}(hjLh]h Description}(hhhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hjJLubh)}(h[If there are any sessions left, this will initiate the removal and wait for the completion.h]h[If there are any sessions left, this will initiate the removal and wait for the completion.}(hjLhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hjJLubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% iscsi_session_setup (C function)c.iscsi_session_setuphNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hstruct iscsi_cls_session * iscsi_session_setup (struct iscsi_transport *iscsit, struct Scsi_Host *shost, uint16_t cmds_max, int dd_size, int cmd_task_size, uint32_t initial_cmdsn, unsigned int id)h]j5)}(hstruct iscsi_cls_session *iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost, uint16_t cmds_max, int dd_size, int cmd_task_size, uint32_t initial_cmdsn, unsigned int id)h](j)}(hjh]hstruct}(hhhj(MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$MhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM ubjM)}(h h]h }(hhhj6MhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$Mhhhj5MhM ubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hhhjGMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjIMmodnameN classnameNjj)}j]j)}jiscsi_session_setupsbc.iscsi_session_setupasbuh1hhj$Mhhhj5MhM ubjM)}(h h]h }(hhhjhMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$Mhhhj5MhM ubj)}(hjh]h*}(hhhjvMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Mhhhj5MhM ubj^)}(hiscsi_session_setuph]jd)}(hjeMh]hiscsi_session_setup}(hhhjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjMubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj$Mhhhj5MhM ubj)}(h(struct iscsi_transport *iscsit, struct Scsi_Host *shost, uint16_t cmds_max, int dd_size, int cmd_task_size, uint32_t initial_cmdsn, unsigned int id)h](j)}(hstruct iscsi_transport *iscsith](j)}(hjh]hstruct}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjM)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMubh)}(hhh]jd)}(hiscsi_transporth]hiscsi_transport}(hhhjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jcMc.iscsi_session_setupasbuh1hhjMubjM)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMubj)}(hjh]h*}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjd)}(hiscsith]hiscsit}(hhhjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjMubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hhhjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjM)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjNubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hhhj0NhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2NmodnameN classnameNjj)}j]jcMc.iscsi_session_setupasbuh1hhjNubjM)}(h h]h }(hhhjNNhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjNubj)}(hjh]h*}(hhhj\NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjd)}(hshosth]hshost}(hhhjiNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjNubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(huint16_t cmds_maxh](h)}(hhh]jd)}(huint16_th]huint16_t}(hhhjNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jcMc.iscsi_session_setupasbuh1hhj~NubjM)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~Nubjd)}(hcmds_maxh]hcmds_max}(hhhjNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~Nubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(h int dd_sizeh](j;)}(hinth]hint}(hhhjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNubjM)}(h h]h }(hhhjNhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjNubjd)}(hdd_sizeh]hdd_size}(hhhjNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjNubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(hint cmd_task_sizeh](j;)}(hinth]hint}(hhhjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNubjM)}(h h]h }(hhhj OhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjNubjd)}(h cmd_task_sizeh]h cmd_task_size}(hhhjOhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjNubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(huint32_t initial_cmdsnh](h)}(hhh]jd)}(huint32_th]huint32_t}(hhhj7OhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4Oubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9OmodnameN classnameNjj)}j]jcMc.iscsi_session_setupasbuh1hhj0OubjM)}(h h]h }(hhhjUOhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj0Oubjd)}(h initial_cmdsnh]h initial_cmdsn}(hhhjcOhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj0Oubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubj)}(hunsigned int idh](j;)}(hunsignedh]hunsigned}(hhhj|OhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxOubjM)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjxOubj;)}(hinth]hint}(hhhjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxOubjM)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjxOubjd)}(hidh]hid}(hhhjOhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjxOubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjMubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj$Mhhhj5MhM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj Mhhhj5MhM ubah}(h]jMah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjMhhubj#)}(hhh]h)}(h-create iscsi cls session and host and sessionh]h-create iscsi cls session and host and session}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjOhhubah}(h]h ]h"]h$]h&]uh1j"hjMhhhj5MhM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjOjEjOjFuh1j)hhhj,hNhNubjH)}(hX**Parameters** ``struct iscsi_transport *iscsit`` iscsi transport template ``struct Scsi_Host *shost`` scsi host ``uint16_t cmds_max`` session can queue ``int dd_size`` private driver data size, added to session allocation size ``int cmd_task_size`` LLD task private data size ``uint32_t initial_cmdsn`` initial CmdSN ``unsigned int id`` target ID to add to this session **Description** This can be used by software iscsi_transports that allocate a session per scsi host. Callers should set cmds_max to the largest total numer (mgmt + scsi) of tasks they support. The iscsi layer reserves ISCSI_MGMT_CMDS_MAX tasks for nop handling and login/logout requests.h](h)}(h**Parameters**h]jR)}(hjPh]h Parameters}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjOubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjOubjh)}(hhh](jm)}(h<``struct iscsi_transport *iscsit`` iscsi transport template h](js)}(h"``struct iscsi_transport *iscsit``h]jy)}(hj Ph]hstruct iscsi_transport *iscsit}(hhhj"PhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjPubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjPubj)}(hhh]h)}(hiscsi transport templateh]hiscsi transport template}(hj;Phj9PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5PhM hj6Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jlhj5PhM hjPubjm)}(h&``struct Scsi_Host *shost`` scsi host h](js)}(h``struct Scsi_Host *shost``h]jy)}(hjYPh]hstruct Scsi_Host *shost}(hhhj[PhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjWPubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjSPubj)}(hhh]h)}(h scsi hosth]h scsi host}(hjtPhjrPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnPhM hjoPubah}(h]h ]h"]h$]h&]uh1jhjSPubeh}(h]h ]h"]h$]h&]uh1jlhjnPhM hjPubjm)}(h(``uint16_t cmds_max`` session can queue h](js)}(h``uint16_t cmds_max``h]jy)}(hjPh]huint16_t cmds_max}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjPubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjPubj)}(hhh]h)}(hsession can queueh]hsession can queue}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jlhjPhM hjPubjm)}(hK``int dd_size`` private driver data size, added to session allocation size h](js)}(h``int dd_size``h]jy)}(hjPh]h int dd_size}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjPubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjPubj)}(hhh]h)}(h:private driver data size, added to session allocation sizeh]h:private driver data size, added to session allocation size}(hjPhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jlhjPhM hjPubjm)}(h1``int cmd_task_size`` LLD task private data size h](js)}(h``int cmd_task_size``h]jy)}(hjQh]hint cmd_task_size}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjQubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjPubj)}(hhh]h)}(hLLD task private data sizeh]hLLD task private data size}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jlhjQhM hjPubjm)}(h)``uint32_t initial_cmdsn`` initial CmdSN h](js)}(h``uint32_t initial_cmdsn``h]jy)}(hj=Qh]huint32_t initial_cmdsn}(hhhj?QhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj;Qubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hj7Qubj)}(hhh]h)}(h initial CmdSNh]h initial CmdSN}(hjXQhjVQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRQhM hjSQubah}(h]h ]h"]h$]h&]uh1jhj7Qubeh}(h]h ]h"]h$]h&]uh1jlhjRQhM hjPubjm)}(h5``unsigned int id`` target ID to add to this session h](js)}(h``unsigned int id``h]jy)}(hjvQh]hunsigned int id}(hhhjxQhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjtQubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjpQubj)}(hhh]h)}(h target ID to add to this sessionh]h target ID to add to this session}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjpQubeh}(h]h ]h"]h$]h&]uh1jlhjQhM hjPubeh}(h]h ]h"]h$]h&]uh1jghjOubh)}(h**Description**h]jR)}(hjQh]h Description}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjQubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjOubh)}(hTThis can be used by software iscsi_transports that allocate a session per scsi host.h]hTThis can be used by software iscsi_transports that allocate a session per scsi host.}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjOubh)}(hCallers should set cmds_max to the largest total numer (mgmt + scsi) of tasks they support. The iscsi layer reserves ISCSI_MGMT_CMDS_MAX tasks for nop handling and login/logout requests.h]hCallers should set cmds_max to the largest total numer (mgmt + scsi) of tasks they support. The iscsi layer reserves ISCSI_MGMT_CMDS_MAX tasks for nop handling and login/logout requests.}(hjQhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_session_free (C function)c.iscsi_session_freehNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h?void iscsi_session_free (struct iscsi_cls_session *cls_session)h]j5)}(h>void iscsi_session_free(struct iscsi_cls_session *cls_session)h](j;)}(hvoidh]hvoid}(hhhjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM7 ubjM)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjRhhhjRhM7 ubj^)}(hiscsi_session_freeh]jd)}(hiscsi_session_freeh]hiscsi_session_free}(hhhj&RhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"Rubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjRhhhjRhM7 ubj)}(h'(struct iscsi_cls_session *cls_session)h]j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hhhjBRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>RubjM)}(h h]h }(hhhjORhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>Rubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hhhj`RhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj]Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjbRmodnameN classnameNjj)}j]j)}jj(Rsbc.iscsi_session_freeasbuh1hhj>RubjM)}(h h]h }(hhhjRhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>Rubj)}(hjh]h*}(hhhjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Rubjd)}(h cls_sessionh]h cls_session}(hhhjRhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj>Rubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj:Rubah}(h]h ]h"]h$]h&]j|j}uh1j~hjRhhhjRhM7 ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjQhhhjRhM7 ubah}(h]jQah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM9 hjQhhubj#)}(hhh]h)}(h%Free iscsi session and it's resourcesh]h'Free iscsi session and it’s resources}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM6 hjRhhubah}(h]h ]h"]h$]h&]uh1j"hjQhhhjRhM7 ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjRjEjRjFuh1j)hhhj,hNhNubjH)}(hI**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi sessionh](h)}(h**Parameters**h]jR)}(hjRh]h Parameters}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjRubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM: hjRubjh)}(hhh]jm)}(h7``struct iscsi_cls_session *cls_session`` iscsi sessionh](js)}(h)``struct iscsi_cls_session *cls_session``h]jy)}(hjSh]h%struct iscsi_cls_session *cls_session}(hhhj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjSubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM< hjSubj)}(hhh]h)}(h iscsi sessionh]h iscsi session}(hj"Shj ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM7 hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jlhjShM< hjRubah}(h]h ]h"]h$]h&]uh1jghjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_session_teardown (C function)c.iscsi_session_teardownhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hCvoid iscsi_session_teardown (struct iscsi_cls_session *cls_session)h]j5)}(hBvoid iscsi_session_teardown(struct iscsi_cls_session *cls_session)h](j;)}(hvoidh]hvoid}(hhhjaShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]ShhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMT ubjM)}(h h]h }(hhhjpShhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj]ShhhjoShMT ubj^)}(hiscsi_session_teardownh]jd)}(hiscsi_session_teardownh]hiscsi_session_teardown}(hhhjShhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~Subah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj]ShhhjoShMT ubj)}(h'(struct iscsi_cls_session *cls_session)h]j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjM)}(h h]h }(hhhjShhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjSubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hhhjShhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjSsbc.iscsi_session_teardownasbuh1hhjSubjM)}(h h]h }(hhhjShhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjSubj)}(hjh]h*}(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubjd)}(h cls_sessionh]h cls_session}(hhhjShhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjSubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjSubah}(h]h ]h"]h$]h&]j|j}uh1j~hj]ShhhjoShMT ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjYShhhjoShMT ubah}(h]jTSah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMV hjVShhubj#)}(hhh]h)}(hdestroy session and cls_sessionh]hdestroy session and cls_session}(hj$Thj"ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMS hjThhubah}(h]h ]h"]h$]h&]uh1j"hjVShhhjoShMT ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj:TjEj:TjFuh1j)hhhj,hNhNubjH)}(hI**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi sessionh](h)}(h**Parameters**h]jR)}(hjDTh]h Parameters}(hhhjFThhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjBTubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMW hj>Tubjh)}(hhh]jm)}(h7``struct iscsi_cls_session *cls_session`` iscsi sessionh](js)}(h)``struct iscsi_cls_session *cls_session``h]jy)}(hjcTh]h%struct iscsi_cls_session *cls_session}(hhhjeThhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjaTubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMY hj]Tubj)}(hhh]h)}(h iscsi sessionh]h iscsi session}(hj~Thj|ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMT hjyTubah}(h]h ]h"]h$]h&]uh1jhj]Tubeh}(h]h ]h"]h$]h&]uh1jlhjxThMY hjZTubah}(h]h ]h"]h$]h&]uh1jghj>Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_conn_setup (C function)c.iscsi_conn_setuphNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(hpstruct iscsi_cls_conn * iscsi_conn_setup (struct iscsi_cls_session *cls_session, int dd_size, uint32_t conn_idx)h]j5)}(hnstruct iscsi_cls_conn *iscsi_conn_setup(struct iscsi_cls_session *cls_session, int dd_size, uint32_t conn_idx)h](j)}(hjh]hstruct}(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM_ ubjM)}(h h]h }(hhhjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjThhhjThM_ ubh)}(hhh]jd)}(hiscsi_cls_connh]hiscsi_cls_conn}(hhhjThhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jiscsi_conn_setupsbc.iscsi_conn_setupasbuh1hhjThhhjThM_ ubjM)}(h h]h }(hhhjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjThhhjThM_ ubj)}(hjh]h*}(hhhj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjThM_ ubj^)}(hiscsi_conn_setuph]jd)}(hjTh]hiscsi_conn_setup}(hhhjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjThhhjThM_ ubj)}(hG(struct iscsi_cls_session *cls_session, int dd_size, uint32_t conn_idx)h](j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hhhj7UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3UubjM)}(h h]h }(hhhjDUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3Uubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hhhjUUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjRUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWUmodnameN classnameNjj)}j]jTc.iscsi_conn_setupasbuh1hhj3UubjM)}(h h]h }(hhhjsUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3Uubj)}(hjh]h*}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Uubjd)}(h cls_sessionh]h cls_session}(hhhjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj3Uubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj/Uubj)}(h int dd_sizeh](j;)}(hinth]hint}(hhhjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubjM)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubjd)}(hdd_sizeh]hdd_size}(hhhjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj/Uubj)}(huint32_t conn_idxh](h)}(hhh]jd)}(huint32_th]huint32_t}(hhhjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]jTc.iscsi_conn_setupasbuh1hhjUubjM)}(h h]h }(hhhjUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubjd)}(hconn_idxh]hconn_idx}(hhhj VhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj/Uubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjThhhjThM_ ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjThhhjThM_ ubah}(h]jTah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMc hjThhubj#)}(hhh]h)}(h$create iscsi_cls_conn and iscsi_connh]h$create iscsi_cls_conn and iscsi_conn}(hj8Vhj6VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM^ hj3Vhhubah}(h]h ]h"]h$]h&]uh1j"hjThhhjThM_ ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjNVjEjNVjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_cls_session *cls_session`` iscsi_cls_session ``int dd_size`` private driver data size ``uint32_t conn_idx`` cidh](h)}(h**Parameters**h]jR)}(hjXVh]h Parameters}(hhhjZVhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjVVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMb hjRVubjh)}(hhh](jm)}(h<``struct iscsi_cls_session *cls_session`` iscsi_cls_session h](js)}(h)``struct iscsi_cls_session *cls_session``h]jy)}(hjwVh]h%struct iscsi_cls_session *cls_session}(hhhjyVhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjuVubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM_ hjqVubj)}(hhh]h)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM_ hjVubah}(h]h ]h"]h$]h&]uh1jhjqVubeh}(h]h ]h"]h$]h&]uh1jlhjVhM_ hjnVubjm)}(h)``int dd_size`` private driver data size h](js)}(h``int dd_size``h]jy)}(hjVh]h int dd_size}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjVubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM` hjVubj)}(hhh]h)}(hprivate driver data sizeh]hprivate driver data size}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM` hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jlhjVhM` hjnVubjm)}(h``uint32_t conn_idx`` cidh](js)}(h``uint32_t conn_idx``h]jy)}(hjVh]huint32_t conn_idx}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjVubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMb hjVubj)}(hhh]h)}(hcidh]hcid}(hjWhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMa hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jlhjVhMb hjnVubeh}(h]h ]h"]h$]h&]uh1jghjRVubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhj,hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% iscsi_conn_teardown (C function)c.iscsi_conn_teardownhNtauh1jhj,hhhNhNubj*)}(hhh](j/)}(h:void iscsi_conn_teardown (struct iscsi_cls_conn *cls_conn)h]j5)}(h9void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)h](j;)}(hvoidh]hvoid}(hhhjCWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?WhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM ubjM)}(h h]h }(hhhjRWhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj?WhhhjQWhM ubj^)}(hiscsi_conn_teardownh]jd)}(hiscsi_conn_teardownh]hiscsi_conn_teardown}(hhhjdWhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj`Wubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj?WhhhjQWhM ubj)}(h!(struct iscsi_cls_conn *cls_conn)h]j)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|WubjM)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|Wubh)}(hhh]jd)}(hiscsi_cls_connh]hiscsi_cls_conn}(hhhjWhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j)}jjfWsbc.iscsi_conn_teardownasbuh1hhj|WubjM)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|Wubj)}(hjh]h*}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Wubjd)}(hcls_connh]hcls_conn}(hhhjWhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|Wubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjxWubah}(h]h ]h"]h$]h&]j|j}uh1j~hj?WhhhjQWhM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj;WhhhjQWhM ubah}(h]j6Wah ](jjeh"]h$]h&]j uh1j.hY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hj8Whhubj#)}(hhh]h)}(hteardown iscsi connectionh]hteardown iscsi connection}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjXhhubah}(h]h ]h"]h$]h&]uh1j"hj8WhhhjQWhM ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjXjEjXjFuh1j)hhhj,hNhNubjH)}(h**Parameters** ``struct iscsi_cls_conn *cls_conn`` iscsi class connection **Description** TODO: we may need to make this into a two step process like scsi-mls remove + put hosth](h)}(h**Parameters**h]jR)}(hj&Xh]h Parameters}(hhhj(XhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj$Xubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hj Xubjh)}(hhh]jm)}(h;``struct iscsi_cls_conn *cls_conn`` iscsi class connection h](js)}(h#``struct iscsi_cls_conn *cls_conn``h]jy)}(hjEXh]hstruct iscsi_cls_conn *cls_conn}(hhhjGXhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjCXubah}(h]h ]h"]h$]h&]uh1jrhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hj?Xubj)}(hhh]h)}(hiscsi class connectionh]hiscsi class connection}(hj`Xhj^XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZXhM hj[Xubah}(h]h ]h"]h$]h&]uh1jhj?Xubeh}(h]h ]h"]h$]h&]uh1jlhjZXhM hjrhhubj#)}(hhh]h)}(hcreates root sysfs treeh]hcreates root sysfs tree}(hj4shj2shhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj/shhubah}(h]h ]h"]h$]h&]uh1j"hj>rhhhjVrhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjJsjEjJsjFuh1j)hhhjXhNhNubjH)}(h;**Parameters** ``const char *set_name`` name of root dirh](h)}(h**Parameters**h]jR)}(hjTsh]h Parameters}(hhhjVshhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjRsubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjNsubjh)}(hhh]jm)}(h)``const char *set_name`` name of root dirh](js)}(h``const char *set_name``h]jy)}(hjssh]hconst char *set_name}(hhhjushhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjqsubah}(h]h ]h"]h$]h&]uh1jrha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjmsubj)}(hhh]h)}(hname of root dirh]hname of root dir}(hjshjshhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjsubah}(h]h ]h"]h$]h&]uh1jhjmsubeh}(h]h ]h"]h$]h&]uh1jlhjshMhjjsubah}(h]h ]h"]h$]h&]uh1jghjNsubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjXhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%(iscsi_boot_create_host_kset (C function)c.iscsi_boot_create_host_ksethNtauh1jhjXhhhNhNubj*)}(hhh](j/)}(hJstruct iscsi_boot_kset * iscsi_boot_create_host_kset (unsigned int hostno)h]j5)}(hHstruct iscsi_boot_kset *iscsi_boot_create_host_kset(unsigned int hostno)h](j)}(hjh]hstruct}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMubjM)}(h h]h }(hhhjshhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjshhhjshMubh)}(hhh]jd)}(hiscsi_boot_kseth]hiscsi_boot_kset}(hhhjshhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j)}jiscsi_boot_create_host_ksetsbc.iscsi_boot_create_host_ksetasbuh1hhjshhhjshMubjM)}(h h]h }(hhhj thhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjshhhjshMubj)}(hjh]h*}(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubj^)}(hiscsi_boot_create_host_kseth]jd)}(hj th]hiscsi_boot_create_host_kset}(hhhj,thhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj(tubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjshhhjshMubj)}(h(unsigned int hostno)h]j)}(hunsigned int hostnoh](j;)}(hunsignedh]hunsigned}(hhhjGthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjCtubjM)}(h h]h }(hhhjUthhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjCtubj;)}(hinth]hint}(hhhjcthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjCtubjM)}(h h]h }(hhhjqthhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjCtubjd)}(hhostnoh]hhostno}(hhhjthhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjCtubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj?tubah}(h]h ]h"]h$]h&]j|j}uh1j~hjshhhjshMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]j uh1j.ha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjshhubj#)}(hhh]h)}(h'creates root sysfs tree for a scsi hosth]h'creates root sysfs tree for a scsi host}(hjthjthhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjthhubah}(h]h ]h"]h$]h&]uh1j"hjshhhjshMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjtjEjtjFuh1j)hhhjXhNhNubjH)}(hB**Parameters** ``unsigned int hostno`` host number of scsi hosth](h)}(h**Parameters**h]jR)}(hjth]h Parameters}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjtubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjtubjh)}(hhh]jm)}(h0``unsigned int hostno`` host number of scsi hosth](js)}(h``unsigned int hostno``h]jy)}(hjth]hunsigned int hostno}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjtubah}(h]h ]h"]h$]h&]uh1jrha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chM hjtubj)}(hhh]h)}(hhost number of scsi hosth]hhost number of scsi host}(hjuhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jlhjuhM hjtubah}(h]h ]h"]h$]h&]uh1jghjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjXhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$iscsi_boot_destroy_kset (C function)c.iscsi_boot_destroy_ksethNtauh1jhjXhhhNhNubj*)}(hhh](j/)}(h@void iscsi_boot_destroy_kset (struct iscsi_boot_kset *boot_kset)h]j5)}(h?void iscsi_boot_destroy_kset(struct iscsi_boot_kset *boot_kset)h](j;)}(hvoidh]hvoid}(hhhjEuhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAuhhha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMubjM)}(h h]h }(hhhjTuhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAuhhhjSuhMubj^)}(hiscsi_boot_destroy_kseth]jd)}(hiscsi_boot_destroy_kseth]hiscsi_boot_destroy_kset}(hhhjfuhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbuubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjAuhhhjSuhMubj)}(h#(struct iscsi_boot_kset *boot_kset)h]j)}(h!struct iscsi_boot_kset *boot_kseth](j)}(hjh]hstruct}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~uubjM)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~uubh)}(hhh]jd)}(hiscsi_boot_kseth]hiscsi_boot_kset}(hhhjuhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j)}jjhusbc.iscsi_boot_destroy_ksetasbuh1hhj~uubjM)}(h h]h }(hhhjuhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~uubj)}(hjh]h*}(hhhjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~uubjd)}(h boot_kseth]h boot_kset}(hhhjuhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~uubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjzuubah}(h]h ]h"]h$]h&]j|j}uh1j~hjAuhhhjSuhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj=uhhhjSuhMubah}(h]j8uah ](jjeh"]h$]h&]j uh1j.ha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj:uhhubj#)}(hhh]h)}(h"destroy kset and kobjects under ith]h"destroy kset and kobjects under it}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjvhhubah}(h]h ]h"]h$]h&]uh1j"hj:uhhhjSuhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjvjEjvjFuh1j)hhhjXhNhNubjH)}(h**Parameters** ``struct iscsi_boot_kset *boot_kset`` boot kset **Description** This will remove the kset and kobjects and attrs under it.h](h)}(h**Parameters**h]jR)}(hj(vh]h Parameters}(hhhj*vhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj&vubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj"vubjh)}(hhh]jm)}(h0``struct iscsi_boot_kset *boot_kset`` boot kset h](js)}(h%``struct iscsi_boot_kset *boot_kset``h]jy)}(hjGvh]h!struct iscsi_boot_kset *boot_kset}(hhhjIvhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjEvubah}(h]h ]h"]h$]h&]uh1jrha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjAvubj)}(hhh]h)}(h boot kseth]h boot kset}(hjbvhj`vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\vhMhj]vubah}(h]h ]h"]h$]h&]uh1jhjAvubeh}(h]h ]h"]h$]h&]uh1jlhj\vhMhj>vubah}(h]h ]h"]h$]h&]uh1jghj"vubh)}(h**Description**h]jR)}(hjvh]h Description}(hhhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjvubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj"vubh)}(h:This will remove the kset and kobjects and attrs under it.h]h:This will remove the kset and kobjects and attrs under it.}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj"vubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjXhhhNhNubeh}(h]iscsi-boot-informationah ]h"]iscsi boot informationah$]h&]uh1hhhhhhhhK'ubh)}(hhh](h)}(hiSCSI TCP interfacesh]hiSCSI TCP interfaces}(hjvhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhhhhhK-ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_sw_tcp_recv (C function)c.iscsi_sw_tcp_recvhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(hhint iscsi_sw_tcp_recv (read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)h]j5)}(hgint iscsi_sw_tcp_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)h](j;)}(hinth]hint}(hhhjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKPubjM)}(h h]h }(hhhjvhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjvhhhjvhKPubj^)}(hiscsi_sw_tcp_recvh]jd)}(hiscsi_sw_tcp_recvh]hiscsi_sw_tcp_recv}(hhhjwhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjvubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjvhhhjvhKPubj)}(hR(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len)h](j)}(hread_descriptor_t *rd_desch](h)}(hhh]jd)}(hread_descriptor_th]hread_descriptor_t}(hhhj whhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"wmodnameN classnameNjj)}j]j)}jjwsbc.iscsi_sw_tcp_recvasbuh1hhjwubjM)}(h h]h }(hhhj@whhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjwubj)}(hjh]h*}(hhhjNwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjd)}(hrd_desch]hrd_desc}(hhhj[whhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjwubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjwubj)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hhhjtwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpwubjM)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjpwubh)}(hhh]jd)}(hsk_buffh]hsk_buff}(hhhjwhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jlen - offseth](h)}(h**Parameters**h]jR)}(hjxh]h Parameters}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjxubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKShjxubjh)}(hhh](jm)}(h/``read_descriptor_t *rd_desc`` read descriptor h](js)}(h``read_descriptor_t *rd_desc``h]jy)}(hjxh]hread_descriptor_t *rd_desc}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjxubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKPhjxubj)}(hhh]h)}(hread descriptorh]hread descriptor}(hjxhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKPhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jlhjxhKPhjxubjm)}(h&``struct sk_buff *skb`` socket buffer h](js)}(h``struct sk_buff *skb``h]jy)}(hj yh]hstruct sk_buff *skb}(hhhj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjyubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKQhjyubj)}(hhh]h)}(h socket bufferh]h socket buffer}(hj$yhj"yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKQhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jlhjyhKQhjxubjm)}(h&``unsigned int offset`` offset in skb h](js)}(h``unsigned int offset``h]jy)}(hjByh]hunsigned int offset}(hhhjDyhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj@yubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKRhjlen - offseth](js)}(h``size_t len``h]jy)}(hj{yh]h size_t len}(hhhj}yhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjyyubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKThjuyubj)}(hhh]h)}(hskb->len - offseth]hskb->len - offset}(hjyhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKShjyubah}(h]h ]h"]h$]h&]uh1jhjuyubeh}(h]h ]h"]h$]h&]uh1jlhjyhKThjxubeh}(h]h ]h"]h$]h&]uh1jghjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$iscsi_sw_sk_state_check (C function)c.iscsi_sw_sk_state_checkhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h-int iscsi_sw_sk_state_check (struct sock *sk)h]j5)}(h,int iscsi_sw_sk_state_check(struct sock *sk)h](j;)}(hinth]hint}(hhhjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKlubjM)}(h h]h }(hhhjyhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjyhhhjyhKlubj^)}(hiscsi_sw_sk_state_checkh]jd)}(hiscsi_sw_sk_state_checkh]hiscsi_sw_sk_state_check}(hhhjyhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjyubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjyhhhjyhKlubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](j)}(hjh]hstruct}(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjM)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjzubh)}(hhh]jd)}(hsockh]hsock}(hhhj0zhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2zmodnameN classnameNjj)}j]j)}jjysbc.iscsi_sw_sk_state_checkasbuh1hhjzubjM)}(h h]h }(hhhjPzhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjzubj)}(hjh]h*}(hhhj^zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubjd)}(hskh]hsk}(hhhjkzhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjzubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj zubah}(h]h ]h"]h$]h&]j|j}uh1j~hjyhhhjyhKlubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjyhhhjyhKlubah}(h]jyah ](jjeh"]h$]h&]j uh1j.hZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKthjyhhubj#)}(hhh]h)}(hcheck socket stateh]hcheck socket state}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKkhjzhhubah}(h]h ]h"]h$]h&]uh1j"hjyhhhjyhKlubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjzjEjzjFuh1j)hhhjvhNhNubjH)}(h**Parameters** ``struct sock *sk`` socket **Description** If the socket is in CLOSE or CLOSE_WAIT we should not close the connection if there is still some data pending. Must be called with sk_callback_lock.h](h)}(h**Parameters**h]jR)}(hjzh]h Parameters}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjzubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKohjzubjh)}(hhh]jm)}(h``struct sock *sk`` socket h](js)}(h``struct sock *sk``h]jy)}(hjzh]hstruct sock *sk}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjzubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKlhjzubj)}(hhh]h)}(hsocketh]hsocket}(hjzhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKlhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jlhjzhKlhjzubah}(h]h ]h"]h$]h&]uh1jghjzubh)}(h**Description**h]jR)}(hj{h]h Description}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj{ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKnhjzubh)}(hoIf the socket is in CLOSE or CLOSE_WAIT we should not close the connection if there is still some data pending.h]hoIf the socket is in CLOSE or CLOSE_WAIT we should not close the connection if there is still some data pending.}(hj*{hj({hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKnhjzubh)}(h%Must be called with sk_callback_lock.h]h%Must be called with sk_callback_lock.}(hj9{hj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKrhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%%iscsi_sw_tcp_write_space (C function)c.iscsi_sw_tcp_write_spacehNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h/void iscsi_sw_tcp_write_space (struct sock *sk)h]j5)}(h.void iscsi_sw_tcp_write_space(struct sock *sk)h](j;)}(hvoidh]hvoid}(hhhjf{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjb{hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKubjM)}(h h]h }(hhhju{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjb{hhhjt{hKubj^)}(hiscsi_sw_tcp_write_spaceh]jd)}(hiscsi_sw_tcp_write_spaceh]hiscsi_sw_tcp_write_space}(hhhj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjb{hhhjt{hKubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](j)}(hjh]hstruct}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjM)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{ubh)}(hhh]jd)}(hsockh]hsock}(hhhj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jj{sbc.iscsi_sw_tcp_write_spaceasbuh1hhj{ubjM)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{ubj)}(hjh]h*}(hhhj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubjd)}(hskh]hsk}(hhhj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj{ubah}(h]h ]h"]h$]h&]j|j}uh1j~hjb{hhhjt{hKubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj^{hhhjt{hKubah}(h]jY{ah ](jjeh"]h$]h&]j uh1j.hZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhj[{hhubj#)}(hhh]h)}(h1Called when more output buffer space is availableh]h1Called when more output buffer space is available}(hj)|hj'|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhj$|hhubah}(h]h ]h"]h$]h&]uh1j"hj[{hhhjt{hKubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj?|jEj?|jFuh1j)hhhjvhNhNubjH)}(hC**Parameters** ``struct sock *sk`` socket space is available forh](h)}(h**Parameters**h]jR)}(hjI|h]h Parameters}(hhhjK|hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjG|ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhjC|ubjh)}(hhh]jm)}(h1``struct sock *sk`` socket space is available forh](js)}(h``struct sock *sk``h]jy)}(hjh|h]hstruct sock *sk}(hhhjj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjf|ubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhjb|ubj)}(hhh]h)}(hsocket space is available forh]hsocket space is available for}(hj|hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhj~|ubah}(h]h ]h"]h$]h&]uh1jhjb|ubeh}(h]h ]h"]h$]h&]uh1jlhj}|hKhj_|ubah}(h]h ]h"]h$]h&]uh1jghjC|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%&iscsi_sw_tcp_xmit_segment (C function)c.iscsi_sw_tcp_xmit_segmenthNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h^int iscsi_sw_tcp_xmit_segment (struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment)h]j5)}(h]int iscsi_sw_tcp_xmit_segment(struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment)h](j;)}(hinth]hint}(hhhj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMubjM)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|hhhj|hMubj^)}(hiscsi_sw_tcp_xmit_segmenth]jd)}(hiscsi_sw_tcp_xmit_segmenth]hiscsi_sw_tcp_xmit_segment}(hhhj|hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj|hhhj|hMubj)}(h@(struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment)h](j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjM)}(h h]h }(hhhj }hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|ubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hhhj}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j)}jj|sbc.iscsi_sw_tcp_xmit_segmentasbuh1hhj|ubjM)}(h h]h }(hhhj=}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|ubj)}(hjh]h*}(hhhjK}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjd)}(htcp_connh]htcp_conn}(hhhjX}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj|ubj)}(hstruct iscsi_segment *segmenth](j)}(hjh]hstruct}(hhhjq}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm}ubjM)}(h h]h }(hhhj~}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjm}ubh)}(hhh]jd)}(h iscsi_segmenth]h iscsi_segment}(hhhj}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j9}c.iscsi_sw_tcp_xmit_segmentasbuh1hhjm}ubjM)}(h h]h }(hhhj}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjm}ubj)}(hjh]h*}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm}ubjd)}(hsegmenth]hsegment}(hhhj}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjm}ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj|ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj|hhhj|hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj|hhhj|hMubah}(h]j|ah ](jjeh"]h$]h&]j uh1j.hZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chM&hj|hhubj#)}(hhh]h)}(htransmit segmenth]htransmit segment}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj}hhubah}(h]h ]h"]h$]h&]uh1j"hj|hhhj|hMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj ~jEj ~jFuh1j)hhhjvhNhNubjH)}(hX**Parameters** ``struct iscsi_tcp_conn *tcp_conn`` the iSCSI TCP connection ``struct iscsi_segment *segment`` the buffer to transmnit **Description** This function transmits as much of the buffer as the network layer will accept, and returns the number of bytes transmitted. If CRC hashing is enabled, the function will compute the hash as it goes. When the entire segment has been transmitted, it will retrieve the hash value and send it as well.h](h)}(h**Parameters**h]jR)}(hj~h]h Parameters}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj~ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj~ubjh)}(hhh](jm)}(h=``struct iscsi_tcp_conn *tcp_conn`` the iSCSI TCP connection h](js)}(h#``struct iscsi_tcp_conn *tcp_conn``h]jy)}(hj4~h]hstruct iscsi_tcp_conn *tcp_conn}(hhhj6~hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj2~ubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj.~ubj)}(hhh]h)}(hthe iSCSI TCP connectionh]hthe iSCSI TCP connection}(hjO~hjM~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI~hMhjJ~ubah}(h]h ]h"]h$]h&]uh1jhj.~ubeh}(h]h ]h"]h$]h&]uh1jlhjI~hMhj+~ubjm)}(h:``struct iscsi_segment *segment`` the buffer to transmnit h](js)}(h!``struct iscsi_segment *segment``h]jy)}(hjm~h]hstruct iscsi_segment *segment}(hhhjo~hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjk~ubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjg~ubj)}(hhh]h)}(hthe buffer to transmnith]hthe buffer to transmnit}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjg~ubeh}(h]h ]h"]h$]h&]uh1jlhj~hMhj+~ubeh}(h]h ]h"]h$]h&]uh1jghj~ubh)}(h**Description**h]jR)}(hj~h]h Description}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj~ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj~ubh)}(h|This function transmits as much of the buffer as the network layer will accept, and returns the number of bytes transmitted.h]h|This function transmits as much of the buffer as the network layer will accept, and returns the number of bytes transmitted.}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj~ubh)}(hIf CRC hashing is enabled, the function will compute the hash as it goes. When the entire segment has been transmitted, it will retrieve the hash value and send it as well.h]hIf CRC hashing is enabled, the function will compute the hash as it goes. When the entire segment has been transmitted, it will retrieve the hash value and send it as well.}(hj~hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chM"hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_sw_tcp_xmit (C function)c.iscsi_sw_tcp_xmithNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h/int iscsi_sw_tcp_xmit (struct iscsi_conn *conn)h]j5)}(h.int iscsi_sw_tcp_xmit(struct iscsi_conn *conn)h](j;)}(hinth]hint}(hhhj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMUubjM)}(h h]h }(hhhj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~hhhj hMUubj^)}(hiscsi_sw_tcp_xmith]jd)}(hiscsi_sw_tcp_xmith]hiscsi_sw_tcp_xmit}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj~hhhj hMUubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjM)}(h h]h }(hhhjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj5ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjWhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]j)}jjsbc.iscsi_sw_tcp_xmitasbuh1hhj5ubjM)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj5ubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubjd)}(hconnh]hconn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj5ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj1ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj~hhhj hMUubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj~hhhj hMUubah}(h]j~ah ](jjeh"]h$]h&]j uh1j.hZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMWhj~hhubj#)}(hhh]h)}(h TCP transmith]h TCP transmit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMThjhhubah}(h]h ]h"]h$]h&]uh1j"hj~hhhj hMUubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjvhNhNubjH)}(h>**Parameters** ``struct iscsi_conn *conn`` iscsi connectionh](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMXhjubjh)}(hhh]jm)}(h,``struct iscsi_conn *conn`` iscsi connectionh](js)}(h``struct iscsi_conn *conn``h]jy)}(hjh]hstruct iscsi_conn *conn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMZhjubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMZhjubah}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_sw_tcp_xmit_qlen (C function)c.iscsi_sw_tcp_xmit_qlenhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h4int iscsi_sw_tcp_xmit_qlen (struct iscsi_conn *conn)h]j5)}(h3int iscsi_sw_tcp_xmit_qlen(struct iscsi_conn *conn)h](j;)}(hinth]hint}(hhhjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjThhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMubjM)}(h h]h }(hhhjghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjThhhjfhMubj^)}(hiscsi_sw_tcp_xmit_qlenh]jd)}(hiscsi_sw_tcp_xmit_qlenh]hiscsi_sw_tcp_xmit_qlen}(hhhjyhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjuubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjThhhjfhMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj{sbc.iscsi_sw_tcp_xmit_qlenasbuh1hhjubjM)}(h h]h }(hhhjӀhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hconnh]hconn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hjThhhjfhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjPhhhjfhMubah}(h]jKah ](jjeh"]h$]h&]j uh1j.hZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjMhhubj#)}(hhh]h)}(h*return the number of bytes queued for xmith]h*return the number of bytes queued for xmit}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hjMhhhjfhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj1jEj1jFuh1j)hhhjvhNhNubjH)}(h>**Parameters** ``struct iscsi_conn *conn`` iscsi connectionh](h)}(h**Parameters**h]jR)}(hj;h]h Parameters}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj9ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj5ubjh)}(hhh]jm)}(h,``struct iscsi_conn *conn`` iscsi connectionh](js)}(h``struct iscsi_conn *conn``h]jy)}(hjZh]hstruct iscsi_conn *conn}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjXubah}(h]h ]h"]h$]h&]uh1jrhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjTubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jlhjohMhjQubah}(h]h ]h"]h$]h&]uh1jghj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_tcp_segment_done (C function)c.iscsi_tcp_segment_donehNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(hvint iscsi_tcp_segment_done (struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment, int recv, unsigned copied)h]j5)}(huint iscsi_tcp_segment_done(struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment, int recv, unsigned copied)h](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKubjM)}(h h]h }(hhhjÁhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhKubj^)}(hiscsi_tcp_segment_doneh]jd)}(hiscsi_tcp_segment_doneh]hiscsi_tcp_segment_done}(hhhjՁhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjсubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhKubj)}(h[(struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment, int recv, unsigned copied)h](j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjׁsbc.iscsi_tcp_segment_doneasbuh1hhjubjM)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htcp_connh]htcp_conn}(hhhjJhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hstruct iscsi_segment *segmenth](j)}(hjh]hstruct}(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjM)}(h h]h }(hhhjphhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_ubh)}(hhh]jd)}(h iscsi_segmenth]h iscsi_segment}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j+c.iscsi_tcp_segment_doneasbuh1hhj_ubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_ubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjd)}(hsegmenth]hsegment}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj_ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hint recvh](j;)}(hinth]hint}(hhhjӂhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjςubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjςubjd)}(hrecvh]hrecv}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjςubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned copiedh](j;)}(hunsignedh]hunsigned}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hcopiedh]hcopied}(hhhj$hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhKubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjhhubj#)}(hhh]h)}(h%check whether the segment is completeh]h%check whether the segment is complete}(hjQhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjLhhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjgjEjgjFuh1j)hhhjvhNhNubjH)}(hX&**Parameters** ``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp connection ``struct iscsi_segment *segment`` iscsi segment to check ``int recv`` set to one of this is called from the recv path ``unsigned copied`` number of bytes copied **Description** Check if we're done receiving this segment. If the receive buffer is full but we expect more data, move on to the next entry in the scatterlist. If the amount of data we received isn't a multiple of 4, we will transparently receive the pad bytes, too. This function must be re-entrant.h](h)}(h**Parameters**h]jR)}(hjqh]h Parameters}(hhhjshhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjoubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjkubjh)}(hhh](jm)}(h9``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp connection h](js)}(h#``struct iscsi_tcp_conn *tcp_conn``h]jy)}(hjh]hstruct iscsi_tcp_conn *tcp_conn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjubj)}(hhh]h)}(hiscsi tcp connectionh]hiscsi tcp connection}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhKhjubjm)}(h9``struct iscsi_segment *segment`` iscsi segment to check h](js)}(h!``struct iscsi_segment *segment``h]jy)}(hjɃh]hstruct iscsi_segment *segment}(hhhj˃hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjǃubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjÃubj)}(hhh]h)}(hiscsi segment to checkh]hiscsi segment to check}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjރhKhj߃ubah}(h]h ]h"]h$]h&]uh1jhjÃubeh}(h]h ]h"]h$]h&]uh1jlhjރhKhjubjm)}(h=``int recv`` set to one of this is called from the recv path h](js)}(h ``int recv``h]jy)}(hjh]hint recv}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjubj)}(hhh]h)}(h/set to one of this is called from the recv pathh]h/set to one of this is called from the recv path}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhKhjubjm)}(h+``unsigned copied`` number of bytes copied h](js)}(h``unsigned copied``h]jy)}(hj;h]hunsigned copied}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj9ubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj5ubj)}(hhh]h)}(hnumber of bytes copiedh]hnumber of bytes copied}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jlhjPhKhjubeh}(h]h ]h"]h$]h&]uh1jghjkubh)}(h**Description**h]jR)}(hjvh]h Description}(hhhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjtubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjkubh)}(hCheck if we're done receiving this segment. If the receive buffer is full but we expect more data, move on to the next entry in the scatterlist.h]hCheck if we’re done receiving this segment. If the receive buffer is full but we expect more data, move on to the next entry in the scatterlist.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjkubh)}(hjIf the amount of data we received isn't a multiple of 4, we will transparently receive the pad bytes, too.h]hlIf the amount of data we received isn’t a multiple of 4, we will transparently receive the pad bytes, too.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjkubh)}(h!This function must be re-entrant.h]h!This function must be re-entrant.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%$iscsi_tcp_hdr_recv_prep (C function)c.iscsi_tcp_hdr_recv_prephNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h>void iscsi_tcp_hdr_recv_prep (struct iscsi_tcp_conn *tcp_conn)h]j5)}(h=void iscsi_tcp_hdr_recv_prep(struct iscsi_tcp_conn *tcp_conn)h](j;)}(hvoidh]hvoid}(hhhjلhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjՄhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjՄhhhjhMubj^)}(hiscsi_tcp_hdr_recv_preph]jd)}(hiscsi_tcp_hdr_recv_preph]hiscsi_tcp_hdr_recv_prep}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjՄhhhjhMubj)}(h!(struct iscsi_tcp_conn *tcp_conn)h]j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hhhj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_hdr_recv_prepasbuh1hhjubjM)}(h h]h }(hhhjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htcp_connh]htcp_conn}(hhhjohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hjՄhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjфhhhjhMubah}(h]j̄ah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj΄hhubj#)}(hhh]h)}(hprep segment for hdr receptionh]hprep segment for hdr reception}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hj΄hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjvhNhNubjH)}(hX-**Parameters** ``struct iscsi_tcp_conn *tcp_conn`` iscsi connection to prep for **Description** This function always passes NULL for the hash argument, because when this function is called we do not yet know the final size of the header and want to delay the digest processing until we know that.h](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjh)}(hhh]jm)}(hA``struct iscsi_tcp_conn *tcp_conn`` iscsi connection to prep for h](js)}(h#``struct iscsi_tcp_conn *tcp_conn``h]jy)}(hjۅh]hstruct iscsi_tcp_conn *tcp_conn}(hhhj݅hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjمubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjՅubj)}(hhh]h)}(hiscsi connection to prep forh]hiscsi connection to prep for}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjՅubeh}(h]h ]h"]h$]h&]uh1jlhjhMhj҅ubah}(h]h ]h"]h$]h&]uh1jghjubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubh)}(hThis function always passes NULL for the hash argument, because when this function is called we do not yet know the final size of the header and want to delay the digest processing until we know that.h]hThis function always passes NULL for the hash argument, because when this function is called we do not yet know the final size of the header and want to delay the digest processing until we know that.}(hj.hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_tcp_cleanup_task (C function)c.iscsi_tcp_cleanup_taskhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h5void iscsi_tcp_cleanup_task (struct iscsi_task *task)h]j5)}(h4void iscsi_tcp_cleanup_task(struct iscsi_task *task)h](j;)}(hvoidh]hvoid}(hhhj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hhhjjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjWhhhjihMubj^)}(hiscsi_tcp_cleanup_taskh]jd)}(hiscsi_tcp_cleanup_taskh]hiscsi_tcp_cleanup_task}(hhhj|hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjxubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjWhhhjihMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj~sbc.iscsi_tcp_cleanup_taskasbuh1hhjubjM)}(h h]h }(hhhjֆhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htaskh]htask}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hjWhhhjihMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjShhhjihMubah}(h]jNah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjPhhubj#)}(hhh]h)}(hfree tcp_task resourcesh]hfree tcp_task resources}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjhhubah}(h]h ]h"]h$]h&]uh1j"hjPhhhjihMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDj4jEj4jFuh1j)hhhjvhNhNubjH)}(hp**Parameters** ``struct iscsi_task *task`` iscsi task **Description** must be called with session back_lockh](h)}(h**Parameters**h]jR)}(hj>h]h Parameters}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj8ubjh)}(hhh]jm)}(h'``struct iscsi_task *task`` iscsi task h](js)}(h``struct iscsi_task *task``h]jy)}(hj]h]hstruct iscsi_task *task}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj[ubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjWubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjxhjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jlhjrhMhjTubah}(h]h ]h"]h$]h&]uh1jghj8ubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj8ubh)}(h%must be called with session back_lockh]h%must be called with session back_lock}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%*iscsi_tcp_recv_segment_is_hdr (C function)c.iscsi_tcp_recv_segment_is_hdrhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(hCint iscsi_tcp_recv_segment_is_hdr (struct iscsi_tcp_conn *tcp_conn)h]j5)}(hBint iscsi_tcp_recv_segment_is_hdr(struct iscsi_tcp_conn *tcp_conn)h](j;)}(hinth]hint}(hhhj݇hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjهhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjهhhhjhMubj^)}(hiscsi_tcp_recv_segment_is_hdrh]jd)}(hiscsi_tcp_recv_segment_is_hdrh]hiscsi_tcp_recv_segment_is_hdr}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjهhhhjhMubj)}(h!(struct iscsi_tcp_conn *tcp_conn)h]j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hhhj8hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_recv_segment_is_hdrasbuh1hhjubjM)}(h h]h }(hhhjXhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htcp_connh]htcp_conn}(hhhjshhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hjهhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjՇhhhjhMubah}(h]jЇah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj҇hhubj#)}(hhh]h)}(h#tests if we are reading in a headerh]h#tests if we are reading in a header}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM~hjhhubah}(h]h ]h"]h$]h&]uh1j"hj҇hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjvhNhNubjH)}(h**Parameters** ``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp conn **Description** returns non zero if we are currently processing or setup to process a header.h](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjh)}(hhh]jm)}(h3``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp conn h](js)}(h#``struct iscsi_tcp_conn *tcp_conn``h]jy)}(hj߈h]hstruct iscsi_tcp_conn *tcp_conn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhj݈ubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjوubj)}(hhh]h)}(hiscsi tcp connh]hiscsi tcp conn}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjوubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjֈubah}(h]h ]h"]h$]h&]uh1jghjubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubh)}(hMreturns non zero if we are currently processing or setup to process a header.h]hMreturns non zero if we are currently processing or setup to process a header.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%iscsi_tcp_recv_skb (C function)c.iscsi_tcp_recv_skbhNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(hwint iscsi_tcp_recv_skb (struct iscsi_conn *conn, struct sk_buff *skb, unsigned int offset, bool offloaded, int *status)h]j5)}(hvint iscsi_tcp_recv_skb(struct iscsi_conn *conn, struct sk_buff *skb, unsigned int offset, bool offloaded, int *status)h](j;)}(hinth]hint}(hhhj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hhhjnhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj[hhhjmhMubj^)}(hiscsi_tcp_recv_skbh]jd)}(hiscsi_tcp_recv_skbh]hiscsi_tcp_recv_skb}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj[hhhjmhMubj)}(h`(struct iscsi_conn *conn, struct sk_buff *skb, unsigned int offset, bool offloaded, int *status)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_recv_skbasbuh1hhjubjM)}(h h]h }(hhhjډhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hconnh]hconn}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(hsk_buffh]hsk_buff}(hhhj,hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j։c.iscsi_tcp_recv_skbasbuh1hhj ubjM)}(h h]h }(hhhjJhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hhhjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hskbh]hskb}(hhhjehhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned int offseth](j;)}(hunsignedh]hunsigned}(hhhj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjzubj;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjzubjd)}(hoffseth]hoffset}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjzubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hbool offloadedh](j;)}(hj h]hbool}(hhhjϊhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjˊubjM)}(h h]h }(hhhj܊hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjˊubjd)}(h offloadedh]h offloaded}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjˊubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(h int *statush](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hstatush]hstatus}(hhhj,hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj[hhhjmhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjWhhhjmhMubah}(h]jRah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjThhubj#)}(hhh]h)}(h Process skbh]h Process skb}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjThhubah}(h]h ]h"]h$]h&]uh1j"hjThhhjmhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjojEjojFuh1j)hhhjvhNhNubjH)}(hX**Parameters** ``struct iscsi_conn *conn`` iscsi connection ``struct sk_buff *skb`` network buffer with header and/or data segment ``unsigned int offset`` offset in skb ``bool offloaded`` bool indicating if transfer was offloaded ``int *status`` iscsi TCP status result **Description** Will return status of transfer in **status**. And will return number of bytes copied.h](h)}(h**Parameters**h]jR)}(hjyh]h Parameters}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjwubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjsubjh)}(hhh](jm)}(h-``struct iscsi_conn *conn`` iscsi connection h](js)}(h``struct iscsi_conn *conn``h]jy)}(hjh]hstruct iscsi_conn *conn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(hG``struct sk_buff *skb`` network buffer with header and/or data segment h](js)}(h``struct sk_buff *skb``h]jy)}(hjыh]hstruct sk_buff *skb}(hhhjӋhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjϋubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjˋubj)}(hhh]h)}(h.network buffer with header and/or data segmenth]h.network buffer with header and/or data segment}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjˋubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h&``unsigned int offset`` offset in skb h](js)}(h``unsigned int offset``h]jy)}(hj h]hunsigned int offset}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubj)}(hhh]h)}(h offset in skbh]h offset in skb}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubjm)}(h=``bool offloaded`` bool indicating if transfer was offloaded h](js)}(h``bool offloaded``h]jy)}(hjCh]hbool offloaded}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjAubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj=ubj)}(hhh]h)}(h)bool indicating if transfer was offloadedh]h)bool indicating if transfer was offloaded}(hj^hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jlhjXhMhjubjm)}(h(``int *status`` iscsi TCP status result h](js)}(h``int *status``h]jy)}(hj|h]h int *status}(hhhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjzubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjvubj)}(hhh]h)}(hiscsi TCP status resulth]hiscsi TCP status result}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jlhjhMhjubeh}(h]h ]h"]h$]h&]uh1jghjsubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjsubh)}(hUWill return status of transfer in **status**. And will return number of bytes copied.h](h"Will return status of transfer in }(h"Will return status of transfer in hj͌hhhNhNubjR)}(h **status**h]hstatus}(hhhj֌hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj͌ubh). And will return number of bytes copied.}(h). And will return number of bytes copied.hj͌hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% iscsi_tcp_task_init (C function)c.iscsi_tcp_task_inithNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h1int iscsi_tcp_task_init (struct iscsi_task *task)h]j5)}(h0int iscsi_tcp_task_init(struct iscsi_task *task)h](j;)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhMubj^)}(hiscsi_tcp_task_inith]jd)}(hiscsi_tcp_task_inith]hiscsi_tcp_task_init}(hhhj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj hhhjhMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjM)}(h h]h }(hhhjZhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhjkhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jj3sbc.iscsi_tcp_task_initasbuh1hhjIubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubjd)}(htaskh]htask}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjIubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjEubah}(h]h ]h"]h$]h&]j|j}uh1j~hj hhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjhhubj#)}(hhh]h)}(h1Initialize iSCSI SCSI_READ or SCSI_WRITE commandsh]h1Initialize iSCSI SCSI_READ or SCSI_WRITE commands}(hjӍhjэhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj΍hhubah}(h]h ]h"]h$]h&]uh1j"hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjjEjjFuh1j)hhhjvhNhNubjH)}(h?**Parameters** ``struct iscsi_task *task`` scsi command taskh](h)}(h**Parameters**h]jR)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjh)}(hhh]jm)}(h-``struct iscsi_task *task`` scsi command taskh](js)}(h``struct iscsi_task *task``h]jy)}(hjh]hstruct iscsi_task *task}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj ubj)}(hhh]h)}(hscsi command taskh]hscsi command task}(hj-hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jlhj'hMhj ubah}(h]h ]h"]h$]h&]uh1jghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j% iscsi_tcp_task_xmit (C function)c.iscsi_tcp_task_xmithNtauh1jhjvhhhNhNubj*)}(hhh](j/)}(h1int iscsi_tcp_task_xmit (struct iscsi_task *task)h]j5)}(h0int iscsi_tcp_task_xmit(struct iscsi_task *task)h](j;)}(hinth]hint}(hhhjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM'ubjM)}(h h]h }(hhhj{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhhjzhM'ubj^)}(hiscsi_tcp_task_xmith]jd)}(hiscsi_tcp_task_xmith]hiscsi_tcp_task_xmit}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhhjzhM'ubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hhhjǎhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjĎubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjɎmodnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_task_xmitasbuh1hhjubjM)}(h h]h }(hhhjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htaskh]htask}(hhhjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhhjzhM'ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjdhhhjzhM'ubah}(h]j_ah ](jjeh"]h$]h&]j uh1j.h]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM-hjahhubj#)}(hhh]h)}(hxmit normal PDU taskh]hxmit normal PDU task}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM&hj*hhubah}(h]h ]h"]h$]h&]uh1j"hjahhhjzhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jCjjDjEjEjEjFuh1j)hhhjvhNhNubjH)}(h**Parameters** ``struct iscsi_task *task`` iscsi command task **Description** We're expected to return 0 when everything was transmitted successfully, -EAGAIN if there's still data in the queue, or != 0 for any other kind of error.h](h)}(h**Parameters**h]jR)}(hjOh]h Parameters}(hhhjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjMubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM*hjIubjh)}(hhh]jm)}(h/``struct iscsi_task *task`` iscsi command task h](js)}(h``struct iscsi_task *task``h]jy)}(hjnh]hstruct iscsi_task *task}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jxhjlubah}(h]h ]h"]h$]h&]uh1jrh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM'hjhubj)}(hhh]h)}(hiscsi command taskh]hiscsi command task}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jlhjhM'hjeubah}(h]h ]h"]h$]h&]uh1jghjIubh)}(h**Description**h]jR)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM)hjIubh)}(hWe're expected to return 0 when everything was transmitted successfully, -EAGAIN if there's still data in the queue, or != 0 for any other kind of error.h]hWe’re expected to return 0 when everything was transmitted successfully, -EAGAIN if there’s still data in the queue, or != 0 for any other kind of error.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM)hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jGhjvhhhNhNubeh}(h]iscsi-tcp-interfacesah ]h"]iscsi tcp interfacesah$]h&]uh1hhhhhhhhK-ubeh}(h]!target-and-iscsi-interfaces-guideah ]h"]!target and iscsi interfaces guideah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingUTF-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confapep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacefile_insertion_enabled raw_enabledKline_length_limitM'syntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_link embed_imagesenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjߏhhjjj+j+j,j,j.,j+,j,j,jXjXjvjvjڏj׏u nametypes}(jNhNjNj+Nj,Nj.,Nj,NjXNjvNjڏNuh}(jߏhhhjhj+jj'j0jjjjjjj j jjjjjhjmj j% j!j!jl#jq#j$j$j$&j)&j'j'j(j(j7*j<*j,j+j+,j+j,j1,jXj,j,j,j/j/j71j<1j3j3j6j6j+9j09jx;j};j<j<j|>j>j?j@jZAj_AjICjNCjDjDjMFjRFjxHj}Hj,Kj1KjMj MjQjQjTSjYSjTjTj6Wj;WjvjXjXjXj._j3_jejejkjkj