sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/targetmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/targetmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(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}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/target.rsthKubh)}(hhh](h)}(hIntroduction and Overviewh]hIntroduction and Overview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hTBDh]hTBD}(hhhhhNhNubah}(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}(hhhhhNhNubah}(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.}(hhhhhNhNubah}(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 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}(hj<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 }(hjNhhhNhNubah}(h]h ]wah"]h$]h&]uh1jLhj6hhhjKhMubh desc_name)}(htransport_init_sessionh]h desc_sig_name)}(htransport_init_sessionh]htransport_init_session}(hjehhhNhNubah}(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}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hjhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hjhhhNhNubah}(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_multiline _toc_parts) _toc_namehuh1j.hjKhMhj+hhubh desc_content)}(hhh]h)}(hinitialize a session objecth]hinitialize a session object}(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@noindex noindexentrynocontentsentryuh1j)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)}(hjRh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjPubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjLubhdefinition_list)}(hhh]hdefinition_list_item)}(h7``struct se_session *se_sess`` Session object pointer. h](hterm)}(h``struct se_session *se_sess``h]hliteral)}(hjyh]hstruct se_session *se_sess}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjwubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjqubh definition)}(hhh]h)}(hSession object pointer.h]hSession object pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1johjhMhjlubah}(h]h ]h"]h$]h&]uh1jjhjLubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjLubh)}(hOThe caller must have zero-initialized **se_sess** before calling this function.h](h&The caller must have zero-initialized }(hjhhhNhNubjU)}(h **se_sess**h]hse_sess}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubh 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.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM!ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhM!ubh)}(hhh]jd)}(h se_sessionh]h se_session}(hj.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jtransport_alloc_sessionsbc.transport_alloc_sessionasbuh1hhj hhhjhM!ubjM)}(h h]h }(hjOhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhjhM!ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM!ubj^)}(htransport_alloc_sessionh]jd)}(hjLh]htransport_alloc_session}(hjnhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj hhhjhM!ubj)}(h"(enum target_prot_op sup_prot_ops)h]j)}(h enum target_prot_op sup_prot_opsh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(htarget_prot_oph]htarget_prot_op}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jJc.transport_alloc_sessionasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h sup_prot_opsh]h sup_prot_ops}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hj hhhjhM!ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhM!ubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hjhM!hjhhubj$)}(hhh]h)}(h+allocate a session object and initialize ith]h+allocate a session object and initialize it}(hjhhhNhNubah}(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#hjhhhjhM!ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjhNhNubjK)}(hm**Parameters** ``enum target_prot_op sup_prot_ops`` bitmask that defines which T10-PI modes are supported.h](h)}(h**Parameters**h]jU)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM"hjubjk)}(hhh]jp)}(h[``enum target_prot_op sup_prot_ops`` bitmask that defines which T10-PI modes are supported.h](jv)}(h$``enum target_prot_op sup_prot_ops``h]j|)}(hj?h]h enum target_prot_op sup_prot_ops}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj=ubah}(h]h ]h"]h$]h&]uh1juhh/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.}(hjXhhhNhNubah}(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&]uh1johjThM$hj6ubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM9ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhM9ubj^)}(htransport_alloc_session_tagsh]jd)}(htransport_alloc_session_tagsh]htransport_alloc_session_tags}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhM9ubj)}(hI(struct se_session *se_sess, unsigned int tag_num, unsigned int tag_size)h](j)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.transport_alloc_session_tagsasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned int tag_numh](j;)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hjVhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubj;)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hjrhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubjd)}(htag_numh]htag_num}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned int tag_sizeh](j;)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hinth]hint}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(htag_sizeh]htag_size}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhM9ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhM9ubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hjhM9hjhhubj$)}(hhh]h)}(h#allocate target driver private datah]h#allocate target driver private data}(hjhhhNhNubah}(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#hjhhhjhM9ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM7hjubjk)}(hhh](jp)}(h0``struct se_session *se_sess`` Session pointer. h](jv)}(h``struct se_session *se_sess``h]j|)}(hj<h]hstruct se_session *se_sess}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj:ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM4hj6ubj)}(hhh]h)}(hSession pointer.h]hSession pointer.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM4hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1johjQhM4hj3ubjp)}(h\``unsigned int tag_num`` Maximum number of in-flight commands between initiator and target. h](jv)}(h``unsigned int tag_num``h]j|)}(hjuh]hunsigned int tag_num}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjsubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM5hjoubj)}(hhh]h)}(hBMaximum number of in-flight commands between initiator and target.h]hBMaximum number of in-flight commands between initiator and target.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1johjhM5hj3ubjp)}(hi``unsigned int tag_size`` Size in bytes of the private data a target driver associates with each command.h](jv)}(h``unsigned int tag_size``h]j|)}(hjh]hunsigned int tag_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhM6hj3ubeh}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hjhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMubj^)}(htarget_init_cmdh]jd)}(htarget_init_cmdh]htarget_init_cmd}(hj(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjM)}(h h]h }(hjQhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hjbhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j)}jj*sbc.target_init_cmdasbuh1hhj@ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjd)}(hse_cmdh]hse_cmd}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj@ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j~c.target_init_cmdasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubjM)}(h h]h }(hj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"ubj;)}(hcharh]hchar}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubjM)}(h h]h }(hjPhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"ubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjd)}(hsenseh]hsense}(hjkhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j~c.target_init_cmdasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(hu32 data_lengthh](h)}(hhh]jd)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j~c.target_init_cmdasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h data_lengthh]h data_length}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(h int task_attrh](j;)}(hinth]hint}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubjM)}(h h]h }(hj" hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubjd)}(h task_attrh]h task_attr}(hj0 hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(h int data_dirh](j;)}(hinth]hint}(hjI hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjE ubjM)}(h h]h }(hjW hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjE ubjd)}(hdata_dirh]hdata_dir}(hje hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjE ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj<ubj)}(h int flagsh](j;)}(hinth]hint}(hj~ hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjz ubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjz ubjd)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjz 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 j!)j"huh1j.hjhMhjhhubj$)}(hhh]h)}(hinitialize se_cmdh]hinitialize se_cmd}(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&]jDjjEj jFj jGjHjIuh1j)hhhjhNhNubjK)}(hXB**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]jU)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubjk)}(hhh](jp)}(h5``struct se_cmd *se_cmd`` command descriptor to init h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hj h]hstruct se_cmd *se_cmd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juhh/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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj hMhj ubjp)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](jv)}(h``struct se_session *se_sess``h]j|)}(hj> h]hstruct se_session *se_sess}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj< ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj8 ubj)}(hhh]h)}(hassociated se_sess for endpointh]hassociated se_sess for endpoint}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS hMhjT ubah}(h]h ]h"]h$]h&]uh1jhj8 ubeh}(h]h ]h"]h$]h&]uh1johjS hMhj ubjp)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](jv)}(h``unsigned char *sense``h]j|)}(hjw h]hunsigned char *sense}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hju ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjq ubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjq ubeh}(h]h ]h"]h$]h&]uh1johj hMhj ubjp)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](jv)}(h``u64 unpacked_lun``h]j|)}(hj h]hu64 unpacked_lun}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juhh/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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj hMhj ubjp)}(h9``u32 data_length`` fabric expected data transfer length h](jv)}(h``u32 data_length``h]j|)}(hj h]hu32 data_length}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juhh/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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj hMhj ubjp)}(h%``int task_attr`` SAM task attribute h](jv)}(h``int task_attr``h]j|)}(hj" h]h int task_attr}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juhh/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; hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 hMhj8 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj7 hMhj ubjp)}(h$``int data_dir`` DMA data direction h](jv)}(h``int data_dir``h]j|)}(hj[ h]h int data_dir}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjY ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjU ubj)}(hhh]h)}(hDMA data directionh]hDMA data direction}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp hMhjq ubah}(h]h ]h"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]uh1johjp hMhj ubjp)}(hG``int flags`` flags for command submission from target_sc_flags_tables h](jv)}(h ``int flags``h]j|)}(hj h]h int flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juhh/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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj hMhj ubeh}(h]h ]h"]h$]h&]uh1jjhj ubh)}(h**Description**h]jU)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj 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 }(hj hhhNhNubjU)}(h**se_cmd->tag**h]h se_cmd->tag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj ubh.}(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 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]jU)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj 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)}(hJ- less than zero to signal active I/O shutdown failure. - zero on success.h]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> 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&]uh1j8 hj5 ubj9 )}(hzero on success.h]h)}(hjT h]hzero on success.}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjR ubah}(h]h ]h"]h$]h&]uh1j8 hj5 ubeh}(h]h ]h"]h$]h&]bullet-uh1j3 hjK hMhj/ ubah}(h]h ]h"]h$]h&]uh1j- hjK hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hj 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 }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj hhhj hMubj^)}(htarget_submit_preph]jd)}(htarget_submit_preph]htarget_submit_prep}(hj 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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hj 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 }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hse_cmdh]hse_cmd}(hj. hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hunsigned char *cdbh](j;)}(hunsignedh]hunsigned}(hjG hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjC ubjM)}(h h]h }(hjU hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjC ubj;)}(hcharh]hchar}(hjc hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjC ubjM)}(h h]h }(hjq hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjC ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubjd)}(hcdbh]hcdb}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjC ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sglh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hj 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 }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjd)}(hsglh]hsgl}(hj 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}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h sgl_counth]h sgl_count}(hjDhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sgl_bidih](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjM)}(h h]h }(hjjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjYubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjYubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubjd)}(hsgl_bidih]hsgl_bidi}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjYubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hu32 sgl_bidi_counth](h)}(hhh]jd)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hsgl_bidi_counth]hsgl_bidi_count}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hstruct scatterlist *sgl_proth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hj"hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h scatterlisth]h scatterlist}(hj3hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hjQhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsgl_proth]hsgl_prot}(hjlhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubj)}(hu32 sgl_prot_counth](h)}(hhh]jd)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hsgl_prot_counth]hsgl_prot_count}(hjhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.target_submit_prepasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hgfph]hgfp}(hjhhhNhNubah}(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 j!)j"huh1j.hj hMhj hhubj$)}(hhh]h)}(hprepare cmd for submissionh]hprepare cmd for submission}(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&]jDjjEj>jFj>jGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjFubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubjk)}(hhh](jp)}(h5``struct se_cmd *se_cmd`` command descriptor to prep h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hjgh]hstruct se_cmd *se_cmd}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjeubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjaubj)}(hhh]h)}(hcommand descriptor to preph]hcommand descriptor to prep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1johj|hMhj^ubjp)}(h+``unsigned char *cdb`` pointer to SCSI CDB h](jv)}(h``unsigned char *cdb``h]j|)}(hjh]hunsigned char *cdb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(hQ``struct scatterlist *sgl`` struct scatterlist memory for unidirectional mapping h](jv)}(h``struct scatterlist *sgl``h]j|)}(hjh]hstruct scatterlist *sgl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(h?``u32 sgl_count`` scatterlist count for unidirectional mapping h](jv)}(h``u32 sgl_count``h]j|)}(hjh]h u32 sgl_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(h,scatterlist count for unidirectional mappingh]h,scatterlist count for unidirectional mapping}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj'hMhj^ubjp)}(hZ``struct scatterlist *sgl_bidi`` struct scatterlist memory for bidirectional READ mapping h](jv)}(h ``struct scatterlist *sgl_bidi``h]j|)}(hjKh]hstruct scatterlist *sgl_bidi}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjIubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjEubj)}(hhh]h)}(h8struct scatterlist memory for bidirectional READ mappingh]h8struct scatterlist memory for bidirectional READ mapping}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1johj`hMhj^ubjp)}(hH``u32 sgl_bidi_count`` scatterlist count for bidirectional READ mapping h](jv)}(h``u32 sgl_bidi_count``h]j|)}(hjh]hu32 sgl_bidi_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj~ubj)}(hhh]h)}(h0scatterlist count for bidirectional READ mappingh]h0scatterlist count for bidirectional READ mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(hR``struct scatterlist *sgl_prot`` struct scatterlist memory protection information h](jv)}(h ``struct scatterlist *sgl_prot``h]j|)}(hjh]hstruct scatterlist *sgl_prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(hD``u32 sgl_prot_count`` scatterlist count for protection information h](jv)}(h``u32 sgl_prot_count``h]j|)}(hjh]hu32 sgl_prot_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj hMhj^ubjp)}(h"``gfp_t gfp`` gfp allocation type h](jv)}(h ``gfp_t gfp``h]j|)}(hj/h]h gfp_t gfp}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj-ubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1johjDhMhj^ubeh}(h]h ]h"]h$]h&]uh1jjhjBubh)}(h **Return**h]jU)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjhubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubj. )}(h7- less than zero to signal failure. - zero on success. h]j4 )}(hhh](j9 )}(h!less than zero to signal failure.h]h)}(hjh]h!less than zero to signal failure.}(hjhhhNhNubah}(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&]uh1j8 hjubj9 )}(hzero on success. h]h)}(hzero on success.h]hzero on success.}(hjhhhNhNubah}(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&]uh1j8 hjubeh}(h]h ]h"]h$]h&]jp jq uh1j3 hjhMhjubah}(h]h ]h"]h$]h&]uh1j- hjhMhjBubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM&ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhM&ubj^)}(htarget_submit_cmdh]jd)}(htarget_submit_cmdh]htarget_submit_cmd}(hj,hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj(ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhM&ubj)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjM)}(h h]h }(hjUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hjfhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j)}jj.sbc.target_submit_cmdasbuh1hhjDubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjd)}(hse_cmdh]hse_cmd}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(hunsigned char *cdbh](j;)}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubjM)}(h h]h }(hj8hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj&ubj;)}(hcharh]hchar}(hjFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubjM)}(h h]h }(hjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj&ubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubjd)}(hcdbh]hcdb}(hjohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj&ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsenseh]hsense}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(hu32 data_lengthh](h)}(hhh]jd)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jc.target_submit_cmdasbuh1hhj*ubjM)}(h h]h }(hjOhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj*ubjd)}(h data_lengthh]h data_length}(hj]hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj*ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(h int task_attrh](j;)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrubjd)}(h task_attrh]h task_attr}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjrubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(h int data_dirh](j;)}(hinth]hint}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hdata_dirh]hdata_dir}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubj)}(h int flagsh](j;)}(hinth]hint}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj@ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhM&ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhM&ubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hjhM&hjhhubj$)}(hhh]h)}(h3lookup unpacked lun and submit uninitialized se_cmdh]h3lookup unpacked lun and submit uninitialized se_cmd}(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#hjhhhjhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj>jFj>jGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjFubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubjk)}(hhh](jp)}(h7``struct se_cmd *se_cmd`` command descriptor to submit h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hjgh]hstruct se_cmd *se_cmd}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjeubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjaubj)}(hhh]h)}(hcommand descriptor to submith]hcommand descriptor to submit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1johj|hMhj^ubjp)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](jv)}(h``struct se_session *se_sess``h]j|)}(hjh]hstruct se_session *se_sess}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(h+``unsigned char *cdb`` pointer to SCSI CDB h](jv)}(h``unsigned char *cdb``h]j|)}(hjh]hunsigned char *cdb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](jv)}(h``unsigned char *sense``h]j|)}(hjh]hunsigned char *sense}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj ubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj'hMhj^ubjp)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](jv)}(h``u64 unpacked_lun``h]j|)}(hjKh]hu64 unpacked_lun}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjIubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjEubj)}(hhh]h)}(h+unpacked LUN to reference for struct se_lunh]h+unpacked LUN to reference for struct se_lun}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1johj`hMhj^ubjp)}(h9``u32 data_length`` fabric expected data transfer length h](jv)}(h``u32 data_length``h]j|)}(hjh]hu32 data_length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(h%``int task_attr`` SAM task attribute h](jv)}(h``int task_attr``h]j|)}(hjh]h int task_attr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hSAM task attributeh]hSAM task attribute}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhj^ubjp)}(h$``int data_dir`` DMA data direction h](jv)}(h``int data_dir``h]j|)}(hjh]h int data_dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hDMA data directionh]hDMA data direction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj hMhj^ubjp)}(hG``int flags`` flags for command submission from target_sc_flags_tables h](jv)}(h ``int flags``h]j|)}(hj/h]h int flags}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj-ubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1johjDhMhj^ubeh}(h]h ]h"]h$]h&]uh1jjhjBubh)}(h**Description**h]jU)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjhubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubh)}(h>Task tags are supported if the caller has set **se_cmd->tag**.h](h.Task tags are supported if the caller has set }(hjhhhNhNubjU)}(h**se_cmd->tag**h]h se_cmd->tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubh)}(h:It also assumes interal target core SGL memory allocation.h]h:It also assumes interal target core SGL memory allocation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjBubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM!hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hjhhhNhNubah}(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 }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMubj^)}(h target_submith]jd)}(h target_submith]h target_submit}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubah}(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}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjM)}(h h]h }(hj8hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]j)}jjsbc.target_submitasbuh1hhj'ubjM)}(h h]h }(hjihhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubj)}(hjh]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjd)}(hse_cmdh]hse_cmd}(hjhhhNhNubah}(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 j!)j"huh1j.hjhMhjhhubj$)}(hhh]h)}(h7perform final initialization and submit cmd to LIO coreh]h7perform final initialization and submit cmd to LIO core}(hjhhhNhNubah}(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&]jDjjEjjFjjGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubjk)}(hhh]jp)}(h7``struct se_cmd *se_cmd`` command descriptor to submit h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hjh]hstruct se_cmd *se_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubah}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj(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.}(hj@hhhNhNubah}(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&]uh1jJhjhhhNhNubj)}(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}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMubjM)}(h h]h }(hj~hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjkhhhj}hMubj^)}(htarget_submit_tmrh]jd)}(htarget_submit_tmrh]htarget_submit_tmr}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjkhhhj}hMubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_cmdh]hse_cmd}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hstruct se_session *se_sessh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hj+hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h se_sessionh]h se_session}(hj<hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hjZhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hse_sessh]hse_sess}(hjuhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned char *senseh](j;)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hsenseh]hsense}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hu64 unpacked_lunh](h)}(hhh]jd)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h unpacked_lunh]h unpacked_lun}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hvoid *fabric_tmr_ptrh](j;)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubjM)}(h h]h }(hjBhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj0ubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjd)}(hfabric_tmr_ptrh]hfabric_tmr_ptr}(hj]hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj0ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned char tm_typeh](j;)}(hunsignedh]hunsigned}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrubj;)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrubjd)}(htm_typeh]htm_type}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjrubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(h gfp_t gfph](h)}(hhh]jd)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hgfph]hgfp}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hu64 tagh](h)}(hhh]jd)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.target_submit_tmrasbuh1hhj ubjM)}(h h]h }(hj0hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubjd)}(htagh]htag}(hj>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(h int flagsh](j;)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubjM)}(h h]h }(hjehhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjSubjd)}(hflagsh]hflags}(hjshhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjSubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjkhhhj}hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjghhhj}hMubah}(h]jbah ](jjeh"]h$]h&]j j!)j"huh1j.hj}hMhjdhhubj$)}(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}(hjhhhNhNubah}(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#hjdhhhj}hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubjk)}(hhh](jp)}(h7``struct se_cmd *se_cmd`` command descriptor to submit h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hjh]hstruct se_cmd *se_cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubjp)}(h?``struct se_session *se_sess`` associated se_sess for endpoint h](jv)}(h``struct se_session *se_sess``h]j|)}(hjh]hstruct se_session *se_sess}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj,hMhjubjp)}(h6``unsigned char *sense`` pointer to SCSI sense buffer h](jv)}(h``unsigned char *sense``h]j|)}(hjPh]hunsigned char *sense}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjNubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjJubj)}(hhh]h)}(hpointer to SCSI sense bufferh]hpointer to SCSI sense buffer}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1johjehMhjubjp)}(hA``u64 unpacked_lun`` unpacked LUN to reference for struct se_lun h](jv)}(h``u64 unpacked_lun``h]j|)}(hjh]hu64 unpacked_lun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubjp)}(h4``void *fabric_tmr_ptr`` fabric context for TMR req h](jv)}(h``void *fabric_tmr_ptr``h]j|)}(hjh]hvoid *fabric_tmr_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubjp)}(h-``unsigned char tm_type`` Type of TM request h](jv)}(h``unsigned char tm_type``h]j|)}(hjh]hunsigned char tm_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubjp)}(h"``gfp_t gfp`` gfp type for caller h](jv)}(h ``gfp_t gfp``h]j|)}(hj4h]h gfp_t gfp}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj2ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhj.ubj)}(hhh]h)}(hgfp type for callerh]hgfp type for caller}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1johjIhMhjubjp)}(h3``u64 tag`` referenced task tag for TMR_ABORT_TASK h](jv)}(h ``u64 tag``h]j|)}(hjmh]hu64 tag}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjkubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjgubj)}(hhh]h)}(h&referenced task tag for TMR_ABORT_TASKh]h&referenced task tag for TMR_ABORT_TASK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1johjhMhjubjp)}(h``int flags`` submit cmd flags h](jv)}(h ``int flags``h]j|)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chMhjubj)}(hhh]h)}(hsubmit cmd flagsh]hsubmit cmd flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubeh}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(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.}(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&]uh1jJhjhhhNhNubj)}(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}(hj& 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 }(hj5 hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj" hhhj4 hM ubj^)}(htarget_get_sess_cmdh]jd)}(htarget_get_sess_cmdh]htarget_get_sess_cmd}(hjG hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjC ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj" hhhj4 hM ubj)}(h&(struct se_cmd *se_cmd, bool ack_kref)h](j)}(hstruct se_cmd *se_cmdh](j)}(hjh]hstruct}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubjM)}(h h]h }(hjp hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_ ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjI sbc.target_get_sess_cmdasbuh1hhj_ ubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ ubjd)}(hse_cmdh]hse_cmd}(hj hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj_ ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj[ ubj)}(h bool ack_krefh](j;)}(hboolh]hbool}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubjM)}(h h]h }(hj hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj ubjd)}(hack_krefh]hack_kref}(hj 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" hhhj4 hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj hhhj4 hM ubah}(h]j ah ](jjeh"]h$]h&]j j!)j"huh1j.hj4 hM hj hhubj$)}(hhh]h)}(h1Verify the session is accepting cmds and take refh]h1Verify the session is accepting cmds and take ref}(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 hhhj4 hM ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj3!jFj3!jGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hj=!h]h Parameters}(hj?!hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj;!ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj7!ubjk)}(hhh](jp)}(h4``struct se_cmd *se_cmd`` command descriptor to add h](jv)}(h``struct se_cmd *se_cmd``h]j|)}(hj\!h]hstruct se_cmd *se_cmd}(hj^!hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjZ!ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hjV!ubj)}(hhh]h)}(hcommand descriptor to addh]hcommand descriptor to add}(hju!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq!hM hjr!ubah}(h]h ]h"]h$]h&]uh1jhjV!ubeh}(h]h ]h"]h$]h&]uh1johjq!hM hjS!ubjp)}(hN``bool ack_kref`` Signal that fabric will perform an ack target_put_sess_cmd()h](jv)}(h``bool ack_kref``h]j|)}(hj!h]h bool ack_kref}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj!ubah}(h]h ]h"]h$]h&]uh1juhh/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}(hj&&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 }(hj5&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"&hhhj4&hM ubj^)}(htarget_wait_for_cmdsh]jd)}(htarget_wait_for_cmdsh]htarget_wait_for_cmds}(hjG&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjC&ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj"&hhhj4&hM ubj)}(h$(struct target_cmd_counter *cmd_cnt)h]j)}(h"struct target_cmd_counter *cmd_cnth](j)}(hjh]hstruct}(hjc&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_&ubjM)}(h h]h }(hjp&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_&ubh)}(hhh]jd)}(htarget_cmd_counterh]htarget_cmd_counter}(hj&hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjI&sbc.target_wait_for_cmdsasbuh1hhj_&ubjM)}(h h]h }(hj&hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj_&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_&ubjd)}(hcmd_cnth]hcmd_cnt}(hj&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"&hhhj4&hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj&hhhj4&hM ubah}(h]j&ah ](jjeh"]h$]h&]j j!)j"huh1j.hj4&hM hj&hhubj$)}(hhh]h)}(hWait for outstanding cmds.h]hWait for outstanding cmds.}(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&hhhj4&hM ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj&jFj&jGjHjIuh1j)hhhjhNhNubjK)}(h\**Parameters** ``struct target_cmd_counter *cmd_cnt`` counter to wait for active I/O for.h](h)}(h**Parameters**h]jU)}(hj'h]h Parameters}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj'ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj'ubjk)}(hhh]jp)}(hJ``struct target_cmd_counter *cmd_cnt`` counter to wait for active I/O for.h](jv)}(h&``struct target_cmd_counter *cmd_cnt``h]j|)}(hj''h]h"struct target_cmd_counter *cmd_cnt}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj%'ubah}(h]h ]h"]h$]h&]uh1juhh/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.}(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&]uh1johj<'hM hj'ubah}(h]h ]h"]h$]h&]uh1jjhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hj'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 }(hj'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}(hj'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}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjM)}(h h]h }(hj'hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubh)}(hhh]jd)}(h se_sessionh]h se_session}(hj'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 }(hj'hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'ubj)}(hjh]h*}(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjd)}(hse_sessh]hse_sess}(hj(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}juh1j4jjhjy'hhhj'hM ubah}(h]jt'ah ](jjeh"]h$]h&]j j!)j"huh1j.hj'hM hjv'hhubj$)}(hhh]h)}(hWait for outstanding commandsh]hWait for outstanding commands}(hjA(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#hjv'hhhj'hM ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjY(jFjY(jGjHjIuh1j)hhhjhNhNubjK)}(hO**Parameters** ``struct se_session *se_sess`` session to wait for active I/Oh](h)}(h**Parameters**h]jU)}(hjc(h]h Parameters}(hje(hhhNhNubah}(h]h ]h"]h$]h&]uh1jThja(ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj](ubjk)}(hhh]jp)}(h=``struct se_session *se_sess`` session to wait for active I/Oh](jv)}(h``struct se_session *se_sess``h]j|)}(hj(h]hstruct se_session *se_sess}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj(ubah}(h]h ]h"]h$]h&]uh1juhh/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(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&]uh1johj(hM hjy(ubah}(h]h ]h"]h$]h&]uh1jjhj](ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hj(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 }(hj(hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj(hhhj(hM ubj^)}(htransport_wait_for_tasksh]jd)}(htransport_wait_for_tasksh]htransport_wait_for_tasks}(hj(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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjM)}(h h]h }(hj%)hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hj6)hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj3)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8)modnameN classnameNjj)}j]j)}jj(sbc.transport_wait_for_tasksasbuh1hhj)ubjM)}(h h]h }(hjV)hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)ubj)}(hjh]h*}(hjd)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubjd)}(hcmdh]hcmd}(hjq)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 j!)j"huh1j.hj(hM 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)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&]jDjjEj)jFj)jGjHjIuh1j)hhhjhNhNubjK)}(h;**Parameters** ``struct se_cmd *cmd`` command to wait onh](h)}(h**Parameters**h]jU)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj)ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj)ubjk)}(hhh]jp)}(h)``struct se_cmd *cmd`` command to wait onh](jv)}(h``struct se_cmd *cmd``h]j|)}(hj)h]hstruct se_cmd *cmd}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj)ubah}(h]h ]h"]h$]h&]uh1juhh/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)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&]uh1johj)hM hj)ubah}(h]h ]h"]h$]h&]uh1jjhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjhhhNhNubj)}(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}(hj6*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2*hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM ubjM)}(h h]h }(hjE*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj2*hhhjD*hM ubj^)}(htarget_send_busyh]jd)}(htarget_send_busyh]htarget_send_busy}(hjW*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjS*ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj2*hhhjD*hM ubj)}(h(struct se_cmd *cmd)h]j)}(hstruct se_cmd *cmdh](j)}(hjh]hstruct}(hjs*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo*ubjM)}(h h]h }(hj*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjo*ubh)}(hhh]jd)}(hse_cmdh]hse_cmd}(hj*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j)}jjY*sbc.target_send_busyasbuh1hhjo*ubjM)}(h h]h }(hj*hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjo*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo*ubjd)}(hcmdh]hcmd}(hj*hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjo*ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjk*ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj2*hhhjD*hM ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj.*hhhjD*hM ubah}(h]j)*ah ](jjeh"]h$]h&]j j!)j"huh1j.hjD*hM hj+*hhubj$)}(hhh]h)}(h+Send SCSI BUSY status back to the initiatorh]h+Send SCSI BUSY status back to the initiator}(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+*hhhjD*hM ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj+jFj+jGjHjIuh1j)hhhjhNhNubjK)}(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]jU)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj+ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj+ubjk)}(hhh]jp)}(hD``struct se_cmd *cmd`` SCSI command for which to send a BUSY reply. h](jv)}(h``struct se_cmd *cmd``h]j|)}(hj7+h]hstruct se_cmd *cmd}(hj9+hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj5+ubah}(h]h ]h"]h$]h&]uh1juhh/var/lib/git/docbuild/linux/Documentation/driver-api/target:19: ./drivers/target/target_core_transport.chM hj1+ubj)}(hhh]h)}(h,SCSI command for which to send a BUSY reply.h]h,SCSI command for which to send a BUSY reply.}(hjP+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL+hM hjM+ubah}(h]h ]h"]h$]h&]uh1jhj1+ubeh}(h]h ]h"]h$]h&]uh1johjL+hM hj.+ubah}(h]h ]h"]h$]h&]uh1jjhj+ubh)}(h**Note**h]jU)}(hjr+h]hNote}(hjt+hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjp+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+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&]uh1jJhjhhhNhNubeh}(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+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhhhKubh)}(hhh](h)}(h Userspace I/Oh]h Userspace I/O}(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+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+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+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 }(hj+hhhNhNubhemphasis)}(h*data*h]hdata}(hj+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.}(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}(hj#,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ,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).}(hj1,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj ,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.}(hj@,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj ,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.}(hjO,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj ,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.}(hj^,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhKhj ,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.}(hjm,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhK hj ,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|,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/target:28: ./include/uapi/linux/target_core_user.hhK$hj ,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,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}(hj,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 }(hj,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}(hj,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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjM)}(h h]h }(hj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj,ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj -hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"-modnameN classnameNjj)}j]j)}jj,sbc.iscsi_prep_data_out_pduasbuh1hhj,ubjM)}(h h]h }(hj@-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj,ubj)}(hjh]h*}(hjN-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjd)}(htaskh]htask}(hj[-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}(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubjM)}(h h]h }(hj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjp-ubh)}(hhh]jd)}(hiscsi_r2t_infoh]hiscsi_r2t_info}(hj-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j<-c.iscsi_prep_data_out_pduasbuh1hhjp-ubjM)}(h h]h }(hj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjp-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-ubjd)}(hr2th]hr2t}(hj-hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjp-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj,ubj)}(hstruct iscsi_data *hdrh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjM)}(h h]h }(hj-hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubh)}(hhh]jd)}(h iscsi_datah]h iscsi_data}(hj.hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j<-c.iscsi_prep_data_out_pduasbuh1hhj-ubjM)}(h h]h }(hj .hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubj)}(hjh]h*}(hj..hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjd)}(hhdrh]hhdr}(hj;.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 j!)j"huh1j.hj,hKhj,hhubj$)}(hhh]h)}(hinitialize Data-Outh]hinitialize Data-Out}(hje.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhjb.hhubah}(h]h ]h"]h$]h&]uh1j#hj,hhhj,hKubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj}.jFj}.jGjHjIuh1j)hhhj,hNhNubjK)}(hXN**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]jU)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj.ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubjk)}(hhh](jp)}(h.``struct iscsi_task *task`` scsi command task h](jv)}(h``struct iscsi_task *task``h]j|)}(hj.h]hstruct iscsi_task *task}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj.ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj)}(hhh]h)}(hscsi command taskh]hscsi command task}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1johj.hKhj.ubjp)}(h(``struct iscsi_r2t_info *r2t`` R2T info h](jv)}(h``struct iscsi_r2t_info *r2t``h]j|)}(hj.h]hstruct iscsi_r2t_info *r2t}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj.ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj)}(hhh]h)}(hR2T infoh]hR2T info}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1johj.hKhj.ubjp)}(h-``struct iscsi_data *hdr`` iscsi data in pdu h](jv)}(h``struct iscsi_data *hdr``h]j|)}(hj/h]hstruct iscsi_data *hdr}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj/ubah}(h]h ]h"]h$]h&]uh1juhY/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}(hj1/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-/hKhj./ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1johj-/hKhj.ubeh}(h]h ]h"]h$]h&]uh1jjhj.ubh)}(h **Notes**h]jU)}(hjS/h]hNotes}(hjU/hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjQ/ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhj.ubj. )}(hInitialize 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)}(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.}(hjm/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhji/ubh)}(h3This function is called with connection lock taken.h]h3This function is called with connection lock taken.}(hj|/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chKhji/ubeh}(h]h ]h"]h$]h&]uh1j- hj{/hKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hj/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 }(hj/hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/hhhj/hMubj^)}(h__iscsi_put_taskh]jd)}(h__iscsi_put_taskh]h__iscsi_put_task}(hj/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}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjM)}(h h]h }(hj/hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj 0hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj 0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj/sbc.__iscsi_put_taskasbuh1hhj/ubjM)}(h h]h }(hj,0hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj/ubj)}(hjh]h*}(hj:0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubjd)}(htaskh]htask}(hjG0hhhNhNubah}(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 j!)j"huh1j.hj/hMhj/hhubj$)}(hhh]h)}(hdrop the refcount on a taskh]hdrop the refcount on a task}(hjq0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjn0hhubah}(h]h ]h"]h$]h&]uh1j#hj/hhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj0jFj0jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj0ubjk)}(hhh]jp)}(h?``struct iscsi_task *task`` iscsi_task to drop the refcount on h](jv)}(h``struct iscsi_task *task``h]j|)}(hj0h]hstruct iscsi_task *task}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj0ubah}(h]h ]h"]h$]h&]uh1juhY/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}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1johj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jjhj0ubh)}(h**Description**h]jU)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj0ubah}(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.}(hj1hhhNhNubah}(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&]uh1jJhj,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}(hj21hhhNhNubah}(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 }(hjA1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj.1hhhj@1hM.ubj^)}(hiscsi_complete_scsi_taskh]jd)}(hiscsi_complete_scsi_taskh]hiscsi_complete_scsi_task}(hjS1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjO1ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj.1hhhj@1hM.ubj)}(hA(struct iscsi_task *task, uint32_t exp_cmdsn, uint32_t max_cmdsn)h](j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjo1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk1ubjM)}(h h]h }(hj|1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjk1ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j)}jjU1sbc.iscsi_complete_scsi_taskasbuh1hhjk1ubjM)}(h h]h }(hj1hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjk1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk1ubjd)}(htaskh]htask}(hj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjk1ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjg1ubj)}(huint32_t exp_cmdsnh](h)}(hhh]jd)}(huint32_th]huint32_t}(hj1hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j1c.iscsi_complete_scsi_taskasbuh1hhj1ubjM)}(h h]h }(hj2hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj1ubjd)}(h exp_cmdsnh]h exp_cmdsn}(hj2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj1ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjg1ubj)}(huint32_t max_cmdsnh](h)}(hhh]jd)}(huint32_th]huint32_t}(hj,2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj)2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.2modnameN classnameNjj)}j]j1c.iscsi_complete_scsi_taskasbuh1hhj%2ubjM)}(h h]h }(hjJ2hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj%2ubjd)}(h max_cmdsnh]h max_cmdsn}(hjX2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj%2ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjg1ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj.1hhhj@1hM.ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj*1hhhj@1hM.ubah}(h]j%1ah ](jjeh"]h$]h&]j j!)j"huh1j.hj@1hM.hj'1hhubj$)}(hhh]h)}(hfinish scsi task normallyh]hfinish scsi task normally}(hj2hhhNhNubah}(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#hj'1hhhj@1hM.ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj2jFj2jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM(hj2ubjk)}(hhh](jp)}(h4``struct iscsi_task *task`` iscsi task for scsi cmd h](jv)}(h``struct iscsi_task *task``h]j|)}(hj2h]hstruct iscsi_task *task}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj2ubah}(h]h ]h"]h$]h&]uh1juhY/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}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM%hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1johj2hM%hj2ubjp)}(h5``uint32_t exp_cmdsn`` expected cmd sn in cpu format h](jv)}(h``uint32_t exp_cmdsn``h]j|)}(hj2h]huint32_t exp_cmdsn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj2ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM&hj2ubj)}(hhh]h)}(hexpected cmd sn in cpu formath]hexpected cmd sn in cpu format}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM&hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1johj3hM&hj2ubjp)}(h0``uint32_t max_cmdsn`` max cmd sn in cpu format h](jv)}(h``uint32_t max_cmdsn``h]j|)}(hj53h]huint32_t max_cmdsn}(hj73hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj33ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM'hj/3ubj)}(hhh]h)}(hmax cmd sn in cpu formath]hmax cmd sn in cpu format}(hjN3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ3hM'hjK3ubah}(h]h ]h"]h$]h&]uh1jhj/3ubeh}(h]h ]h"]h$]h&]uh1johjJ3hM'hj2ubeh}(h]h ]h"]h$]h&]uh1jjhj2ubh)}(h**Description**h]jU)}(hjp3h]h Description}(hjr3hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjn3ubah}(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.}(hj3hhhNhNubah}(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}(hj3hhhNhNubah}(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&]uh1jJhj,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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hj3hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3hhhj3hMubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj3hhhNhNubah}(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 }(hj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj3hhhj3hMubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubj^)}(hiscsi_itt_to_taskh]jd)}(hj4h]hiscsi_itt_to_task}(hj#4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4ubah}(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}(hj>4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:4ubjM)}(h h]h }(hjK4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj:4ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hj\4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjY4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^4modnameN classnameNjj)}j]j3c.iscsi_itt_to_taskasbuh1hhj:4ubjM)}(h h]h }(hjz4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj:4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:4ubjd)}(hconnh]hconn}(hj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj:4ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj64ubj)}(h itt_t itth](h)}(hhh]jd)}(hitt_th]hitt_t}(hj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j3c.iscsi_itt_to_taskasbuh1hhj4ubjM)}(h h]h }(hj4hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj4ubjd)}(hitth]hitt}(hj4hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj4ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj64ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj3hhhj3hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]j j!)j"huh1j.hj3hMhj3hhubj$)}(hhh]h)}(hlook up task by itth]hlook up task by itt}(hj5hhhNhNubah}(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&]jDjjEj5jFj5jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj)5h]h Parameters}(hj+5hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj'5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj#5ubjk)}(hhh](jp)}(h-``struct iscsi_conn *conn`` iscsi connection h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hjH5h]hstruct iscsi_conn *conn}(hjJ5hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjF5ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjB5ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hja5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]5hMhj^5ubah}(h]h ]h"]h$]h&]uh1jhjB5ubeh}(h]h ]h"]h$]h&]uh1johj]5hMhj?5ubjp)}(h``itt_t itt`` itt h](jv)}(h ``itt_t itt``h]j|)}(hj5h]h itt_t itt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj5ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj{5ubj)}(hhh]h)}(hitth]hitt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj{5ubeh}(h]h ]h"]h$]h&]uh1johj5hMhj?5ubeh}(h]h ]h"]h$]h&]uh1jjhj#5ubh)}(h**Description**h]jU)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj#5ubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj#5ubh)}(h#The session back_lock must be held.h]h#The session back_lock must be held.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj#5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hj6hhhNhNubah}(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 }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj 6hhhj6hMubj^)}(h__iscsi_complete_pduh]jd)}(h__iscsi_complete_pduh]h__iscsi_complete_pdu}(hj16hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-6ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj 6hhhj6hMubj)}(hI(struct iscsi_conn *conn, struct iscsi_hdr *hdr, char *data, int datalen)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hjM6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI6ubjM)}(h h]h }(hjZ6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjI6ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hjk6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjh6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm6modnameN classnameNjj)}j]j)}jj36sbc.__iscsi_complete_pduasbuh1hhjI6ubjM)}(h h]h }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjI6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI6ubjd)}(hconnh]hconn}(hj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjI6ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjE6ubj)}(hstruct iscsi_hdr *hdrh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjM)}(h h]h }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj6ubh)}(hhh]jd)}(h iscsi_hdrh]h iscsi_hdr}(hj6hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNjj)}j]j6c.__iscsi_complete_pduasbuh1hhj6ubjM)}(h h]h }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj6ubj)}(hjh]h*}(hj 7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjd)}(hhdrh]hhdr}(hj7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj6ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjE6ubj)}(h char *datah](j;)}(hcharh]hchar}(hj/7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+7ubjM)}(h h]h }(hj=7hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj+7ubj)}(hjh]h*}(hjK7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+7ubjd)}(hdatah]hdata}(hjX7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj+7ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjE6ubj)}(h int datalenh](j;)}(hinth]hint}(hjq7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjm7ubjM)}(h h]h }(hj7hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjm7ubjd)}(hdatalenh]hdatalen}(hj7hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjm7ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjE6ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj 6hhhj6hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj6hhhj6hMubah}(h]j6ah ](jjeh"]h$]h&]j j!)j"huh1j.hj6hMhj6hhubj$)}(hhh]h)}(h complete pduh]h complete pdu}(hj7hhhNhNubah}(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#hj6hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj7jFj7jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7ubjk)}(hhh](jp)}(h'``struct iscsi_conn *conn`` iscsi conn h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hj7h]hstruct iscsi_conn *conn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj7ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj7ubj)}(hhh]h)}(h iscsi connh]h iscsi conn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1johj 8hMhj7ubjp)}(h'``struct iscsi_hdr *hdr`` iscsi header h](jv)}(h``struct iscsi_hdr *hdr``h]j|)}(hj18h]hstruct iscsi_hdr *hdr}(hj38hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj/8ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj+8ubj)}(hhh]h)}(h iscsi headerh]h iscsi header}(hjJ8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF8hMhjG8ubah}(h]h ]h"]h$]h&]uh1jhj+8ubeh}(h]h ]h"]h$]h&]uh1johjF8hMhj7ubjp)}(h``char *data`` data buffer h](jv)}(h``char *data``h]j|)}(hjj8h]h char *data}(hjl8hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjh8ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjd8ubj)}(hhh]h)}(h data bufferh]h data buffer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjd8ubeh}(h]h ]h"]h$]h&]uh1johj8hMhj7ubjp)}(h#``int datalen`` len of data buffer h](jv)}(h``int datalen``h]j|)}(hj8h]h int datalen}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj8ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj8ubj)}(hhh]h)}(hlen of data bufferh]hlen of data buffer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1johj8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jjhj7ubh)}(h**Description**h]jU)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj8ubah}(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.}(hj8hhhNhNubah}(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&]uh1jJhj,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}(hj#9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM~ubjM)}(h h]h }(hj19hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9hhhj09hM~ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hjB9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj?9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD9modnameN classnameNjj)}j]j)}jiscsi_itt_to_ctasksbc.iscsi_itt_to_ctaskasbuh1hhj9hhhj09hM~ubjM)}(h h]h }(hjc9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9hhhj09hM~ubj)}(hjh]h*}(hjq9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj09hM~ubj^)}(hiscsi_itt_to_ctaskh]jd)}(hj`9h]hiscsi_itt_to_ctask}(hj9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~9ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj9hhhj09hM~ubj)}(h$(struct iscsi_conn *conn, itt_t itt)h](j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjM)}(h h]h }(hj9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hj9hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j^9c.iscsi_itt_to_ctaskasbuh1hhj9ubjM)}(h h]h }(hj9hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9ubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjd)}(hconnh]hconn}(hj9hhhNhNubah}(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}(hj:hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj :ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:modnameN classnameNjj)}j]j^9c.iscsi_itt_to_ctaskasbuh1hhj :ubjM)}(h h]h }(hj.:hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj :ubjd)}(hitth]hitt}(hj<:hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj :ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9ubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj9hhhj09hM~ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj9hhhj09hM~ubah}(h]j9ah ](jjeh"]h$]h&]j j!)j"huh1j.hj09hM~hj9hhubj$)}(hhh]h)}(hlook up ctask by itth]hlook up ctask by itt}(hjf:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMvhjc:hhubah}(h]h ]h"]h$]h&]uh1j#hj9hhhj09hM~ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj~:jFj~:jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMzhj:ubjk)}(hhh](jp)}(h-``struct iscsi_conn *conn`` iscsi connection h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hj:h]hstruct iscsi_conn *conn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj:ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMwhj:ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMwhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1johj:hMwhj:ubjp)}(h``itt_t itt`` itt h](jv)}(h ``itt_t itt``h]j|)}(hj:h]h itt_t itt}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj:ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMxhj:ubj)}(hhh]h)}(hitth]hitt}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMxhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1johj:hMxhj:ubeh}(h]h ]h"]h$]h&]uh1jjhj:ubh)}(h**Description**h]jU)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj;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.}(hj1;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.}(hj@;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&]uh1jJhj,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}(hjo;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjk;hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hj~;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjk;hhhj};hMubj^)}(hiscsi_requeue_taskh]jd)}(hiscsi_requeue_taskh]hiscsi_requeue_task}(hj;hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj;ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjk;hhhj};hMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjM)}(h h]h }(hj;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj;ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj;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 }(hj;hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj;ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubjd)}(htaskh]htask}(hj<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~hjk;hhhj};hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjg;hhhj};hMubah}(h]jb;ah ](jjeh"]h$]h&]j j!)j"huh1j.hj};hMhjd;hhubj$)}(hhh]h)}(h*requeue task to run from session workqueueh]h*requeue task to run from session workqueue}(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#hjd;hhhj};hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjG<jFjG<jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjQ<h]h Parameters}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjO<ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjK<ubjk)}(hhh]jp)}(h,``struct iscsi_task *task`` task to requeue h](jv)}(h``struct iscsi_task *task``h]j|)}(hjp<h]hstruct iscsi_task *task}(hjr<hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjn<ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjj<ubj)}(hhh]h)}(htask to requeueh]htask to requeue}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhjj<ubeh}(h]h ]h"]h$]h&]uh1johj<hMhjg<ubah}(h]h ]h"]h$]h&]uh1jjhjK<ubh)}(h**Description**h]jU)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj<ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjK<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<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjK<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hj<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 }(hj<hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj<hhhj<hMubj^)}(hiscsi_suspend_queueh]jd)}(hiscsi_suspend_queueh]hiscsi_suspend_queue}(hj=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}(hj-=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)=ubjM)}(h h]h }(hj:=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)=ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hjK=hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjH=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjM=modnameN classnameNjj)}j]j)}jj=sbc.iscsi_suspend_queueasbuh1hhj)=ubjM)}(h h]h }(hjk=hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj)=ubj)}(hjh]h*}(hjy=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)=ubjd)}(hconnh]hconn}(hj=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 j!)j"huh1j.hj<hMhj<hhubj$)}(hhh]h)}(hsuspend iscsi_queuecommandh]hsuspend iscsi_queuecommand}(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&]jDjjEj=jFj=jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj=ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj=ubjk)}(hhh]jp)}(h>``struct iscsi_conn *conn`` iscsi conn to stop queueing IO on h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hj=h]hstruct iscsi_conn *conn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj=ubah}(h]h ]h"]h$]h&]uh1juhY/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 >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1johj>hMhj=ubah}(h]h ]h"]h$]h&]uh1jjhj=ubh)}(h**Description**h]jU)}(hj,>h]h Description}(hj.>hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj*>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.}(hjB>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&]uh1jJhj,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}(hjq>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjm>hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjm>hhhj>hMubj^)}(hiscsi_suspend_txh]jd)}(hiscsi_suspend_txh]hiscsi_suspend_tx}(hj>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj>ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjm>hhhj>hMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjM)}(h h]h }(hj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hj>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 }(hj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubjd)}(hconnh]hconn}(hj?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~hjm>hhhj>hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhji>hhhj>hMubah}(h]jd>ah ](jjeh"]h$]h&]j j!)j"huh1j.hj>hMhjf>hhubj$)}(hhh]h)}(hsuspend iscsi_data_xmith]hsuspend iscsi_data_xmit}(hj1?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#hjf>hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjI?jFjI?jGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjS?h]h Parameters}(hjU?hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjQ?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjM?ubjk)}(hhh]jp)}(hA``struct iscsi_conn *conn`` iscsi conn to stop processing IO on. h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hjr?h]hstruct iscsi_conn *conn}(hjt?hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjp?ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjl?ubj)}(hhh]h)}(h$iscsi conn to stop processing IO on.h]h$iscsi conn to stop processing IO on.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjl?ubeh}(h]h ]h"]h$]h&]uh1johj?hMhji?ubah}(h]h ]h"]h$]h&]uh1jjhjM?ubh)}(h**Description**h]jU)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjM?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?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhjM?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hj?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 }(hj@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj?hhhj@hMubj^)}(hiscsi_suspend_rxh]jd)}(hiscsi_suspend_rxh]hiscsi_suspend_rx}(hj@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}(hj/@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+@ubjM)}(h h]h }(hj<@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj+@ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hjM@hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjJ@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO@modnameN classnameNjj)}j]j)}jj@sbc.iscsi_suspend_rxasbuh1hhj+@ubjM)}(h h]h }(hjm@hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj+@ubj)}(hjh]h*}(hj{@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+@ubjd)}(hconnh]hconn}(hj@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 j!)j"huh1j.hj@hMhj?hhubj$)}(hhh]h)}(h$Prevent recvwork from running again.h]h$Prevent recvwork from running again.}(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&]jDjjEj@jFj@jGjHjIuh1j)hhhj,hNhNubjK)}(hA**Parameters** ``struct iscsi_conn *conn`` iscsi conn to stop.h](h)}(h**Parameters**h]jU)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj@ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@ubjk)}(hhh]jp)}(h/``struct iscsi_conn *conn`` iscsi conn to stop.h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hj@h]hstruct iscsi_conn *conn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj@ubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj@ubj)}(hhh]h)}(hiscsi conn to stop.h]hiscsi conn to stop.}(hj 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&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1johjAhMhj@ubah}(h]h ]h"]h$]h&]uh1jjhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjMAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIAhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMubjM)}(h h]h }(hj\AhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIAhhhj[AhMubj^)}(hiscsi_conn_unbindh]jd)}(hiscsi_conn_unbindh]hiscsi_conn_unbind}(hjnAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjjAubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjIAhhhj[AhMubj)}(h1(struct iscsi_cls_conn *cls_conn, bool is_active)h](j)}(hstruct iscsi_cls_conn *cls_connh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjM)}(h h]h }(hjAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubh)}(hhh]jd)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j)}jjpAsbc.iscsi_conn_unbindasbuh1hhjAubjM)}(h h]h }(hjAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubj)}(hjh]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubjd)}(hcls_connh]hcls_conn}(hjAhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjAubj)}(hbool is_activeh](j;)}(hj h]hbool}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubjM)}(h h]h }(hj BhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjAubjd)}(h is_activeh]h is_active}(hjBhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjAubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjAubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjIAhhhj[AhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjEAhhhj[AhMubah}(h]j@Aah ](jjeh"]h$]h&]j j!)j"huh1j.hj[AhMhjBAhhubj$)}(hhh]h)}(hprevent queueing to conn.h]hprevent queueing to conn.}(hjABhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj>Bhhubah}(h]h ]h"]h$]h&]uh1j#hjBAhhhj[AhMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjYBjFjYBjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjcBh]h Parameters}(hjeBhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjaBubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj]Bubjk)}(hhh](jp)}(h?``struct iscsi_cls_conn *cls_conn`` iscsi conn ep is bound to. h](jv)}(h#``struct iscsi_cls_conn *cls_conn``h]j|)}(hjBh]hstruct iscsi_cls_conn *cls_conn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjBubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj|Bubj)}(hhh]h)}(hiscsi conn ep is bound to.h]hiscsi conn ep is bound to.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhj|Bubeh}(h]h ]h"]h$]h&]uh1johjBhMhjyBubjp)}(hM``bool is_active`` is the conn in use for boot or is this for EH/termination h](jv)}(h``bool is_active``h]j|)}(hjBh]hbool is_active}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjBubah}(h]h ]h"]h$]h&]uh1juhY/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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1johjBhMhjyBubeh}(h]h ]h"]h$]h&]uh1jjhj]Bubh)}(h**Description**h]jU)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjBubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj]Bubh)}(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 ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMhj]Bubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hj;ChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ChhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM+ ubjM)}(h h]h }(hjJChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj7ChhhjIChM+ ubj^)}(hiscsi_eh_session_reseth]jd)}(hiscsi_eh_session_reseth]hiscsi_eh_session_reset}(hj\ChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjXCubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj7ChhhjIChM+ ubj)}(h(struct scsi_cmnd *sc)h]j)}(hstruct scsi_cmnd *sch](j)}(hjh]hstruct}(hjxChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtCubjM)}(h h]h }(hjChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjtCubh)}(hhh]jd)}(h scsi_cmndh]h scsi_cmnd}(hjChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j)}jj^Csbc.iscsi_eh_session_resetasbuh1hhjtCubjM)}(h h]h }(hjChhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjtCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtCubjd)}(hsch]hsc}(hjChhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjtCubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjpCubah}(h]h ]h"]h$]h&]j|j}uh1j~hj7ChhhjIChM+ ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj3ChhhjIChM+ ubah}(h]j.Cah ](jjeh"]h$]h&]j j!)j"huh1j.hjIChM+ hj0Chhubj$)}(hhh]h)}(h drop session and attempt reloginh]h drop session and attempt relogin}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM% hjChhubah}(h]h ]h"]h$]h&]uh1j#hj0ChhhjIChM+ ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjDjFjDjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM) hjDubjk)}(hhh]jp)}(h&``struct scsi_cmnd *sc`` scsi command h](jv)}(h``struct scsi_cmnd *sc``h]j|)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj:Dubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM& hj6Dubj)}(hhh]h)}(h scsi commandh]h scsi command}(hjUDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQDhM& hjRDubah}(h]h ]h"]h$]h&]uh1jhj6Dubeh}(h]h ]h"]h$]h&]uh1johjQDhM& hj3Dubah}(h]h ]h"]h$]h&]uh1jjhjDubh)}(h**Description**h]jU)}(hjwDh]h Description}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjuDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM( hjDubh)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM( hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjDhhhNhNubah}(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 }(hjDhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDhhhjDhM ubj^)}(hiscsi_eh_recover_targeth]jd)}(hiscsi_eh_recover_targeth]hiscsi_eh_recover_target}(hjDhhhNhNubah}(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}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjM)}(h h]h }(hjEhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubh)}(hhh]jd)}(h scsi_cmndh]h scsi_cmnd}(hjEhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNjj)}j]j)}jjDsbc.iscsi_eh_recover_targetasbuh1hhjDubjM)}(h h]h }(hj7EhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubj)}(hjh]h*}(hjEEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjd)}(hsch]hsc}(hjREhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjDubah}(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 j!)j"huh1j.hjDhM hjDhhubj$)}(hhh]h)}(h%reset target and possibly the sessionh]h%reset target and possibly the session}(hj|EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjyEhhubah}(h]h ]h"]h$]h&]uh1j#hjDhhhjDhM ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjEjFjEjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjEubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubjk)}(hhh]jp)}(h&``struct scsi_cmnd *sc`` scsi command h](jv)}(h``struct scsi_cmnd *sc``h]j|)}(hjEh]hstruct scsi_cmnd *sc}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjEubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM hjEubj)}(hhh]h)}(h scsi commandh]h scsi command}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1johjEhM hjEubah}(h]h ]h"]h$]h&]uh1jjhjEubh)}(h**Description**h]jU)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjEubah}(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.}(hjFhhhNhNubah}(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&]uh1jJhj,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}(hj=FhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9FhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM= ubjM)}(h h]h }(hjLFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj9FhhhjKFhM= ubj^)}(hiscsi_host_addh]jd)}(hiscsi_host_addh]hiscsi_host_add}(hj^FhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjZFubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj9FhhhjKFhM= ubj)}(h.(struct Scsi_Host *shost, struct device *pdev)h](j)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hjzFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvFubjM)}(h h]h }(hjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjvFubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hjFhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jj`Fsbc.iscsi_host_addasbuh1hhjvFubjM)}(h h]h }(hjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjvFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvFubjd)}(hshosth]hshost}(hjFhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjvFubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjrFubj)}(hstruct device *pdevh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjM)}(h h]h }(hjFhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjFubh)}(hhh]jd)}(hdeviceh]hdevice}(hj GhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj GmodnameN classnameNjj)}j]jFc.iscsi_host_addasbuh1hhjFubjM)}(h h]h }(hj(GhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjFubj)}(hjh]h*}(hj6GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjd)}(hpdevh]hpdev}(hjCGhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjrFubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj9FhhhjKFhM= ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj5FhhhjKFhM= ubah}(h]j0Fah ](jjeh"]h$]h&]j j!)j"huh1j.hjKFhM= hj2Fhhubj$)}(hhh]h)}(hadd host to systemh]hadd host to system}(hjmGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM6 hjjGhhubah}(h]h ]h"]h$]h&]uh1j#hj2FhhhjKFhM= ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjGjFjGjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM: hjGubjk)}(hhh](jp)}(h&``struct Scsi_Host *shost`` scsi host h](jv)}(h``struct Scsi_Host *shost``h]j|)}(hjGh]hstruct Scsi_Host *shost}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjGubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM7 hjGubj)}(hhh]h)}(h scsi hosth]h scsi host}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM7 hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1johjGhM7 hjGubjp)}(h&``struct device *pdev`` parent device h](jv)}(h``struct device *pdev``h]j|)}(hjGh]hstruct device *pdev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjGubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM8 hjGubj)}(hhh]h)}(h parent deviceh]h parent device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM8 hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1johjGhM8 hjGubeh}(h]h ]h"]h$]h&]uh1jjhjGubh)}(h**Description**h]jU)}(hj"Hh]h Description}(hj$HhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj 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.}(hj8HhhhNhNubah}(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&]uh1jJhj,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}(hjgHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcHhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMR ubjM)}(h h]h }(hjuHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjcHhhhjtHhMR ubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jiscsi_host_allocsbc.iscsi_host_allocasbuh1hhjcHhhhjtHhMR ubjM)}(h h]h }(hjHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjcHhhhjtHhMR ubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcHhhhjtHhMR ubj^)}(hiscsi_host_alloch]jd)}(hjHh]hiscsi_host_alloc}(hjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjcHhhhjtHhMR 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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjM)}(h h]h }(hjHhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubj)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjM)}(h h]h }(hj IhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubh)}(hhh]jd)}(hscsi_host_templateh]hscsi_host_template}(hjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]jHc.iscsi_host_allocasbuh1hhjHubjM)}(h h]h }(hj9IhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjHubj)}(hjh]h*}(hjGIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubjd)}(hshth]hsht}(hjTIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjHubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubj)}(hint dd_data_sizeh](j;)}(hinth]hint}(hjmIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiIubjM)}(h h]h }(hj{IhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjiIubjd)}(h dd_data_sizeh]h dd_data_size}(hjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjiIubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubj)}(hbool xmit_can_sleeph](j;)}(hj h]hbool}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubjM)}(h h]h }(hjIhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjIubjd)}(hxmit_can_sleeph]hxmit_can_sleep}(hjIhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjIubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjHubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjcHhhhjtHhMR ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj_HhhhjtHhMR ubah}(h]jZHah ](jjeh"]h$]h&]j j!)j"huh1j.hjtHhMR hj\Hhhubj$)}(hhh]h)}(hallocate a host and driver datah]hallocate a host and driver data}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMJ hjIhhubah}(h]h ]h"]h$]h&]uh1j#hj\HhhhjtHhMR ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjIjFjIjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj Jh]h Parameters}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMN hjJubjk)}(hhh](jp)}(h<``const struct scsi_host_template *sht`` scsi host template h](jv)}(h(``const struct scsi_host_template *sht``h]j|)}(hj(Jh]h$const struct scsi_host_template *sht}(hj*JhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj&Jubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMK hj"Jubj)}(hhh]h)}(hscsi host templateh]hscsi host template}(hjAJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=JhMK hj>Jubah}(h]h ]h"]h$]h&]uh1jhj"Jubeh}(h]h ]h"]h$]h&]uh1johj=JhMK hjJubjp)}(h+``int dd_data_size`` driver host data size h](jv)}(h``int dd_data_size``h]j|)}(hjaJh]hint dd_data_size}(hjcJhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj_Jubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chML hj[Jubj)}(hhh]h)}(hdriver host data sizeh]hdriver host data size}(hjzJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvJhML hjwJubah}(h]h ]h"]h$]h&]uh1jhj[Jubeh}(h]h ]h"]h$]h&]uh1johjvJhML hjJubjp)}(hO``bool xmit_can_sleep`` bool indicating if LLD will queue IO from a work queue h](jv)}(h``bool xmit_can_sleep``h]j|)}(hjJh]hbool xmit_can_sleep}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjJubah}(h]h ]h"]h$]h&]uh1juhY/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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1johjJhMM hjJubeh}(h]h ]h"]h$]h&]uh1jjhjJubh)}(h**Description**h]jU)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMO hjJubh)}(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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMO hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM~ ubjM)}(h h]h }(hj)KhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjKhhhj(KhM~ ubj^)}(hiscsi_host_removeh]jd)}(hiscsi_host_removeh]hiscsi_host_remove}(hj;KhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj7Kubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjKhhhj(KhM~ ubj)}(h+(struct Scsi_Host *shost, bool is_shutdown)h](j)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hjWKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSKubjM)}(h h]h }(hjdKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjSKubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hjuKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjrKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwKmodnameN classnameNjj)}j]j)}jj=Ksbc.iscsi_host_removeasbuh1hhjSKubjM)}(h h]h }(hjKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjSKubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSKubjd)}(hshosth]hshost}(hjKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjSKubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjOKubj)}(hbool is_shutdownh](j;)}(hj h]hbool}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubjM)}(h h]h }(hjKhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjKubjd)}(h is_shutdownh]h is_shutdown}(hjKhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjKubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjOKubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjKhhhj(KhM~ ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjKhhhj(KhM~ ubah}(h]j Kah ](jjeh"]h$]h&]j j!)j"huh1j.hj(KhM~ hjKhhubj$)}(hhh]h)}(hremove host and sessionsh]hremove host and sessions}(hjLhhhNhNubah}(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#hjKhhhj(KhM~ ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj&LjFj&LjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj0Lh]h Parameters}(hj2LhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj.Lubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hj*Lubjk)}(hhh](jp)}(h&``struct Scsi_Host *shost`` scsi host h](jv)}(h``struct Scsi_Host *shost``h]j|)}(hjOLh]hstruct Scsi_Host *shost}(hjQLhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjMLubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMx hjILubj)}(hhh]h)}(h scsi hosth]h scsi host}(hjhLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdLhMx hjeLubah}(h]h ]h"]h$]h&]uh1jhjILubeh}(h]h ]h"]h$]h&]uh1johjdLhMx hjFLubjp)}(hC``bool is_shutdown`` true if called from a driver shutdown callout h](jv)}(h``bool is_shutdown``h]j|)}(hjLh]hbool is_shutdown}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjLubah}(h]h ]h"]h$]h&]uh1juhY/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}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMy hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1johjLhMy hjFLubeh}(h]h ]h"]h$]h&]uh1jjhj*Lubh)}(h**Description**h]jU)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hj*Lubh)}(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.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM{ hj*Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM ubjM)}(h h]h }(hjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMhhhjMhM ubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hj'MhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$Mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)MmodnameN classnameNjj)}j]j)}jiscsi_session_setupsbc.iscsi_session_setupasbuh1hhjMhhhjMhM ubjM)}(h h]h }(hjHMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMhhhjMhM ubj)}(hjh]h*}(hjVMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhjMhM ubj^)}(hiscsi_session_setuph]jd)}(hjEMh]hiscsi_session_setup}(hjgMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjcMubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjMhhhjMhM 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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~MubjM)}(h h]h }(hjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~Mubh)}(hhh]jd)}(hiscsi_transporth]hiscsi_transport}(hjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jCMc.iscsi_session_setupasbuh1hhj~MubjM)}(h h]h }(hjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~Mubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~Mubjd)}(hiscsith]hiscsit}(hjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~Mubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjzMubj)}(hstruct Scsi_Host *shosth](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjM)}(h h]h }(hjMhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMubh)}(hhh]jd)}(h Scsi_Hosth]h Scsi_Host}(hjNhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj Nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jCMc.iscsi_session_setupasbuh1hhjMubjM)}(h h]h }(hj.NhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjMubj)}(hjh]h*}(hjvoid iscsi_session_free(struct iscsi_cls_session *cls_session)h](j;)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjQhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM9 ubjM)}(h h]h }(hjQhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjQhhhjQhM9 ubj^)}(hiscsi_session_freeh]jd)}(hiscsi_session_freeh]hiscsi_session_free}(hjRhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjRubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjQhhhjQhM9 ubj)}(h'(struct iscsi_cls_session *cls_session)h]j)}(h%struct iscsi_cls_session *cls_sessionh](j)}(hjh]hstruct}(hj!RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjM)}(h h]h }(hj.RhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjRubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hj?RhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMY hj:Tubj)}(hhh]h)}(h iscsi sessionh]h iscsi session}(hjYThhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMT hjVTubah}(h]h ]h"]h$]h&]uh1jhj:Tubeh}(h]h ]h"]h$]h&]uh1johjUThMY hj7Tubah}(h]h ]h"]h$]h&]uh1jjhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMc ubjM)}(h h]h }(hjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjThhhjThMc ubh)}(hhh]jd)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjThhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jiscsi_conn_setupsbc.iscsi_conn_setupasbuh1hhjThhhjThMc ubjM)}(h h]h }(hjThhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjThhhjThMc ubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjThMc ubj^)}(hiscsi_conn_setuph]jd)}(hjTh]hiscsi_conn_setup}(hjThhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjThhhjThMc 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}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjM)}(h h]h }(hj!UhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubh)}(hhh]jd)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hj2UhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/Uubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4UmodnameN classnameNjj)}j]jTc.iscsi_conn_setupasbuh1hhjUubjM)}(h h]h }(hjPUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubj)}(hjh]h*}(hj^UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjd)}(h cls_sessionh]h cls_session}(hjkUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj Uubj)}(h int dd_sizeh](j;)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubjM)}(h h]h }(hjUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubjd)}(hdd_sizeh]hdd_size}(hjUhhhNhNubah}(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}(hjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]jTc.iscsi_conn_setupasbuh1hhjUubjM)}(h h]h }(hjUhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjUubjd)}(hconn_idxh]hconn_idx}(hjUhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjUubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj Uubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjThhhjThMc ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjThhhjThMc ubah}(h]jTah ](jjeh"]h$]h&]j j!)j"huh1j.hjThMc hjThhubj$)}(hhh]h)}(h$create iscsi_cls_conn and iscsi_connh]h$create iscsi_cls_conn and iscsi_conn}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM^ hjVhhubah}(h]h ]h"]h$]h&]uh1j#hjThhhjThMc ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj*VjFj*VjGjHjIuh1j)hhhj,hNhNubjK)}(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]jU)}(hj4Vh]h Parameters}(hj6VhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj2Vubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMb hj.Vubjk)}(hhh](jp)}(h<``struct iscsi_cls_session *cls_session`` iscsi_cls_session h](jv)}(h)``struct iscsi_cls_session *cls_session``h]j|)}(hjSVh]h%struct iscsi_cls_session *cls_session}(hjUVhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjQVubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM_ hjMVubj)}(hhh]h)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjlVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhVhM_ hjiVubah}(h]h ]h"]h$]h&]uh1jhjMVubeh}(h]h ]h"]h$]h&]uh1johjhVhM_ hjJVubjp)}(h)``int dd_size`` private driver data size h](jv)}(h``int dd_size``h]j|)}(hjVh]h int dd_size}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjVubah}(h]h ]h"]h$]h&]uh1juhY/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}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM` hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1johjVhM` hjJVubjp)}(h``uint32_t conn_idx`` cidh](jv)}(h``uint32_t conn_idx``h]j|)}(hjVh]huint32_t conn_idx}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjVubah}(h]h ]h"]h$]h&]uh1juhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chMb hjVubj)}(hhh]h)}(hcidh]hcid}(hjVhhhNhNubah}(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&]uh1johjVhMb hjJVubeh}(h]h ]h"]h$]h&]uh1jjhj.Vubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhj,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}(hjWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/target:34: ./drivers/scsi/libiscsi.chM ubjM)}(h h]h }(hj.WhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjWhhhj-WhM ubj^)}(hiscsi_conn_teardownh]jd)}(hiscsi_conn_teardownh]hiscsi_conn_teardown}(hj@WhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjaubjM)}(h h]h }(hjLbhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjaubj)}(hjh]h*}(hjZbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjd)}(hdatah]hdata}(hjgbhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjaubj)}(hjZh]h,}(hjubhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubjM)}(h h]h }(hjbhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjaubj;)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjaubjM)}(h h]h }(hjbhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjaubjd)}(htypeh]htype}(hjbhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjaubj)}(hjtZh]h)}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj_ubj)}(hvoid (*release)(void *data)h](j;)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubjM)}(h h]h }(hjbhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjbubj)}(hjKZh]h(}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjd)}(hreleaseh]hrelease}(hjchhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbubj)}(hjtZh]h)}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjKZh]h(}(hj#chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj;)}(hvoidh]hvoid}(hj0chhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubjM)}(h h]h }(hj>chhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjbubj)}(hjh]h*}(hjLchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjd)}(hdatah]hdata}(hjYchhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbubj)}(hjtZh]h)}(hjgchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(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 j!)j"huh1j.hj"_hMhj _hhubj$)}(hhh]h)}(hcreate boot initiator sysfs dirh]hcreate boot initiator sysfs dir}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjchhubah}(h]h ]h"]h$]h&]uh1j#hj _hhhj"_hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjcjFjcjGjHjIuh1j)hhhjXhNhNubjK)}(hX**Parameters** ``struct iscsi_boot_kset *boot_kset`` boot kset ``int index`` the initiator id ``void *data`` driver specific data ``ssize_t (*show) (void *data, int type, char *buf)`` attr show function ``umode_t (*is_visible) (void *data, int type)`` attr visibility function ``void (*release) (void *data)`` release function **Note** The boot sysfs lib will free the data passed in for the caller when all refs to the initiator kobject have been released.h](h)}(h**Parameters**h]jU)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jThjcubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjcubjk)}(hhh](jp)}(h0``struct iscsi_boot_kset *boot_kset`` boot kset h](jv)}(h%``struct iscsi_boot_kset *boot_kset``h]j|)}(hjch]h!struct iscsi_boot_kset *boot_kset}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjcubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjcubj)}(hhh]h)}(h boot kseth]h boot kset}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1johjchMhjcubjp)}(h``int index`` the initiator id h](jv)}(h ``int index``h]j|)}(hj dh]h int index}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjdubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjdubj)}(hhh]h)}(hthe initiator idh]hthe initiator id}(hj#dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhj dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1johjdhMhjcubjp)}(h$``void *data`` driver specific data h](jv)}(h``void *data``h]j|)}(hjCdh]h void *data}(hjEdhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjAdubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj=dubj)}(hhh]h)}(hdriver specific datah]hdriver specific data}(hj\dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXdhMhjYdubah}(h]h ]h"]h$]h&]uh1jhj=dubeh}(h]h ]h"]h$]h&]uh1johjXdhMhjcubjp)}(hI``ssize_t (*show) (void *data, int type, char *buf)`` attr show function h](jv)}(h5``ssize_t (*show) (void *data, int type, char *buf)``h]j|)}(hj|dh]h1ssize_t (*show) (void *data, int type, char *buf)}(hj~dhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjzdubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjvdubj)}(hhh]h)}(hattr show functionh]hattr show function}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjvdubeh}(h]h ]h"]h$]h&]uh1johjdhMhjcubjp)}(hJ``umode_t (*is_visible) (void *data, int type)`` attr visibility function h](jv)}(h0``umode_t (*is_visible) (void *data, int type)``h]j|)}(hjdh]h,umode_t (*is_visible) (void *data, int type)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjdubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjdubj)}(hhh]h)}(hattr visibility functionh]hattr visibility function}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1johjdhMhjcubjp)}(h2``void (*release) (void *data)`` release function h](jv)}(h ``void (*release) (void *data)``h]j|)}(hjdh]hvoid (*release) (void *data)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjdubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjdubj)}(hhh]h)}(hrelease functionh]hrelease function}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1johjehMhjcubeh}(h]h ]h"]h$]h&]uh1jjhjcubh)}(h**Note**h]jU)}(hj)eh]hNote}(hj+ehhhNhNubah}(h]h ]h"]h$]h&]uh1jThj'eubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjcubh)}(hyThe boot sysfs lib will free the data passed in for the caller when all refs to the initiator kobject have been released.h]hyThe boot sysfs lib will free the data passed in for the caller when all refs to the initiator kobject have been released.}(hj?ehhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjXhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%'iscsi_boot_create_ethernet (C function)c.iscsi_boot_create_ethernethNtauh1jhjXhhhNhNubj*)}(hhh](j/)}(hstruct iscsi_boot_kobj * iscsi_boot_create_ethernet (struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show) (void *data, int type, char *buf), umode_t (*is_visible) (void *data, int type), void (*release) (void *data))h]j5)}(hstruct iscsi_boot_kobj *iscsi_boot_create_ethernet(struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show)(void *data, int type, char *buf), umode_t (*is_visible)(void *data, int type), void (*release)(void *data))h](j)}(hjh]hstruct}(hjnehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjehhha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMubjM)}(h h]h }(hj|ehhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjjehhhj{ehMubh)}(hhh]jd)}(hiscsi_boot_kobjh]hiscsi_boot_kobj}(hjehhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j)}jiscsi_boot_create_ethernetsbc.iscsi_boot_create_ethernetasbuh1hhjjehhhj{ehMubjM)}(h h]h }(hjehhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjjehhhj{ehMubj)}(hjh]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjehhhj{ehMubj^)}(hiscsi_boot_create_etherneth]jd)}(hjeh]hiscsi_boot_create_ethernet}(hjehhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjeubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjjehhhj{ehMubj)}(h(struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show)(void *data, int type, char *buf), umode_t (*is_visible)(void *data, int type), void (*release)(void *data))h](j)}(h!struct iscsi_boot_kset *boot_kseth](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjM)}(h h]h }(hjehhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjeubh)}(hhh]jd)}(hiscsi_boot_kseth]hiscsi_boot_kset}(hjfhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jec.iscsi_boot_create_ethernetasbuh1hhjeubjM)}(h h]h }(hj$fhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjeubj)}(hjh]h*}(hj2fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubjd)}(h boot_kseth]h boot_kset}(hj?fhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjeubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubj)}(h int indexh](j;)}(hinth]hint}(hjXfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTfubjM)}(h h]h }(hjffhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjTfubjd)}(hindexh]hindex}(hjtfhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjTfubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubj)}(h void *datah](j;)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubjM)}(h h]h }(hjfhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjd)}(hdatah]hdata}(hjfhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubj)}(h0ssize_t (*show)(void *data, int type, char *buf)h](h)}(hhh]jd)}(hssize_th]hssize_t}(hjfhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jec.iscsi_boot_create_ethernetasbuh1hhjfubjM)}(h h]h }(hjfhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj)}(hjKZh]h(}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjh]h*}(hj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjd)}(hshowh]hshow}(hjghhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubj)}(hjtZh]h)}(hj&ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(hjKZh]h(}(hj3ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj;)}(hvoidh]hvoid}(hj@ghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubjM)}(h h]h }(hjNghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj)}(hjh]h*}(hj\ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjd)}(hdatah]hdata}(hjighhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubj)}(hjZh]h,}(hjwghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjM)}(h h]h }(hjghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj;)}(hinth]hint}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubjM)}(h h]h }(hjghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubjd)}(htypeh]htype}(hjghhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubj)}(hjZh]h,}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjM)}(h h]h }(hjghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj;)}(hcharh]hchar}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubjM)}(h h]h }(hjghhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjfubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubjd)}(hbufh]hbuf}(hjhhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubj)}(hjtZh]h)}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubj)}(h+umode_t (*is_visible)(void *data, int type)h](h)}(hhh]jd)}(humode_th]humode_t}(hj)hhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj&hubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+hmodnameN classnameNjj)}j]jec.iscsi_boot_create_ethernetasbuh1hhj"hubjM)}(h h]h }(hjGhhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"hubj)}(hjKZh]h(}(hjUhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubj)}(hjh]h*}(hjbhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubjd)}(h is_visibleh]h is_visible}(hjohhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"hubj)}(hjtZh]h)}(hj}hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubj)}(hjKZh]h(}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubj;)}(hvoidh]hvoid}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"hubjM)}(h h]h }(hjhhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"hubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubjd)}(hdatah]hdata}(hjhhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"hubj)}(hjZh]h,}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubjM)}(h h]h }(hjhhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"hubj;)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"hubjM)}(h h]h }(hjhhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj"hubjd)}(htypeh]htype}(hjihhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"hubj)}(hjtZh]h)}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubj)}(hvoid (*release)(void *data)h](j;)}(hvoidh]hvoid}(hj+ihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'iubjM)}(h h]h }(hj9ihhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'iubj)}(hjKZh]h(}(hjGihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubj)}(hjh]h*}(hjTihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubjd)}(hreleaseh]hrelease}(hjaihhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'iubj)}(hjtZh]h)}(hjoihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubj)}(hjKZh]h(}(hj|ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubj;)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'iubjM)}(h h]h }(hjihhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj'iubj)}(hjh]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubjd)}(hdatah]hdata}(hjihhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj'iubj)}(hjtZh]h)}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'iubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjeubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjjehhhj{ehMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjfehhhj{ehMubah}(h]jaeah ](jjeh"]h$]h&]j j!)j"huh1j.hj{ehMhjcehhubj$)}(hhh]h)}(hcreate boot ethernet sysfs dirh]hcreate boot ethernet sysfs dir}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjihhubah}(h]h ]h"]h$]h&]uh1j#hjcehhhj{ehMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjjFjjjGjHjIuh1j)hhhjXhNhNubjK)}(hX**Parameters** ``struct iscsi_boot_kset *boot_kset`` boot kset ``int index`` the ethernet device id ``void *data`` driver specific data ``ssize_t (*show) (void *data, int type, char *buf)`` attr show function ``umode_t (*is_visible) (void *data, int type)`` attr visibility function ``void (*release) (void *data)`` release function **Note** The boot sysfs lib will free the data passed in for the caller when all refs to the ethernet kobject have been released.h](h)}(h**Parameters**h]jU)}(hj jh]h Parameters}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj jubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjjubjk)}(hhh](jp)}(h0``struct iscsi_boot_kset *boot_kset`` boot kset h](jv)}(h%``struct iscsi_boot_kset *boot_kset``h]j|)}(hj*jh]h!struct iscsi_boot_kset *boot_kset}(hj,jhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj(jubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj$jubj)}(hhh]h)}(h boot kseth]h boot kset}(hjCjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?jhMhj@jubah}(h]h ]h"]h$]h&]uh1jhj$jubeh}(h]h ]h"]h$]h&]uh1johj?jhMhj!jubjp)}(h%``int index`` the ethernet device id h](jv)}(h ``int index``h]j|)}(hjcjh]h int index}(hjejhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjajubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj]jubj)}(hhh]h)}(hthe ethernet device idh]hthe ethernet device id}(hj|jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxjhMhjyjubah}(h]h ]h"]h$]h&]uh1jhj]jubeh}(h]h ]h"]h$]h&]uh1johjxjhMhj!jubjp)}(h$``void *data`` driver specific data h](jv)}(h``void *data``h]j|)}(hjjh]h void *data}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjjubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjjubj)}(hhh]h)}(hdriver specific datah]hdriver specific data}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1johjjhMhj!jubjp)}(hI``ssize_t (*show) (void *data, int type, char *buf)`` attr show function h](jv)}(h5``ssize_t (*show) (void *data, int type, char *buf)``h]j|)}(hjjh]h1ssize_t (*show) (void *data, int type, char *buf)}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjjubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjjubj)}(hhh]h)}(hattr show functionh]hattr show function}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1johjjhMhj!jubjp)}(hJ``umode_t (*is_visible) (void *data, int type)`` attr visibility function h](jv)}(h0``umode_t (*is_visible) (void *data, int type)``h]j|)}(hjkh]h,umode_t (*is_visible) (void *data, int type)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj kubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjkubj)}(hhh]h)}(hattr visibility functionh]hattr visibility function}(hj'khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#khMhj$kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1johj#khMhj!jubjp)}(h2``void (*release) (void *data)`` release function h](jv)}(h ``void (*release) (void *data)``h]j|)}(hjGkh]hvoid (*release) (void *data)}(hjIkhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjEkubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjAkubj)}(hhh]h)}(hrelease functionh]hrelease function}(hj`khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\khMhj]kubah}(h]h ]h"]h$]h&]uh1jhjAkubeh}(h]h ]h"]h$]h&]uh1johj\khMhj!jubeh}(h]h ]h"]h$]h&]uh1jjhjjubh)}(h**Note**h]jU)}(hjkh]hNote}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjkubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjjubh)}(hxThe boot sysfs lib will free the data passed in for the caller when all refs to the ethernet kobject have been released.h]hxThe boot sysfs lib will free the data passed in for the caller when all refs to the ethernet kobject have been released.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjXhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%&iscsi_boot_create_acpitbl (C function)c.iscsi_boot_create_acpitblhNtauh1jhjXhhhNhNubj*)}(hhh](j/)}(hstruct iscsi_boot_kobj * iscsi_boot_create_acpitbl (struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show)(void *data, int type, char *buf), umode_t (*is_visible)(void *data, int type), void (*release)(void *data))h]j5)}(hstruct iscsi_boot_kobj *iscsi_boot_create_acpitbl(struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show)(void *data, int type, char *buf), umode_t (*is_visible)(void *data, int type), void (*release)(void *data))h](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMubjM)}(h h]h }(hjkhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjkhhhjkhMubh)}(hhh]jd)}(hiscsi_boot_kobjh]hiscsi_boot_kobj}(hjkhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j)}jiscsi_boot_create_acpitblsbc.iscsi_boot_create_acpitblasbuh1hhjkhhhjkhMubjM)}(h h]h }(hjlhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjkhhhjkhMubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhMubj^)}(hiscsi_boot_create_acpitblh]jd)}(hjlh]hiscsi_boot_create_acpitbl}(hj&lhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj"lubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjkhhhjkhMubj)}(h(struct iscsi_boot_kset *boot_kset, int index, void *data, ssize_t (*show)(void *data, int type, char *buf), umode_t (*is_visible)(void *data, int type), void (*release)(void *data))h](j)}(h!struct iscsi_boot_kset *boot_kseth](j)}(hjh]hstruct}(hjAlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=lubjM)}(h h]h }(hjNlhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj=lubh)}(hhh]jd)}(hiscsi_boot_kseth]hiscsi_boot_kset}(hj_lhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj\lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjalmodnameN classnameNjj)}j]jlc.iscsi_boot_create_acpitblasbuh1hhj=lubjM)}(h h]h }(hj}lhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj=lubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=lubjd)}(h boot_kseth]h boot_kset}(hjlhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj=lubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubj)}(h int indexh](j;)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubjM)}(h h]h }(hjlhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjlubjd)}(hindexh]hindex}(hjlhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjlubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubj)}(h void *datah](j;)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubjM)}(h h]h }(hjlhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjlubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjd)}(hdatah]hdata}(hjmhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjlubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubj)}(h0ssize_t (*show)(void *data, int type, char *buf)h](h)}(hhh]jd)}(hssize_th]hssize_t}(hj+mhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj(mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-mmodnameN classnameNjj)}j]jlc.iscsi_boot_create_acpitblasbuh1hhj$mubjM)}(h h]h }(hjImhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubj)}(hjKZh]h(}(hjWmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubj)}(hjh]h*}(hjdmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubjd)}(hshowh]hshow}(hjqmhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$mubj)}(hjtZh]h)}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubj)}(hjKZh]h(}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubj;)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$mubjM)}(h h]h }(hjmhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubjd)}(hdatah]hdata}(hjmhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$mubj)}(hjZh]h,}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubjM)}(h h]h }(hjmhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubj;)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$mubjM)}(h h]h }(hjmhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubjd)}(htypeh]htype}(hjnhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$mubj)}(hjZh]h,}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubjM)}(h h]h }(hj"nhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubj;)}(hcharh]hchar}(hj0nhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$mubjM)}(h h]h }(hj>nhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj$mubj)}(hjh]h*}(hjLnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubjd)}(hbufh]hbuf}(hjYnhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$mubj)}(hjtZh]h)}(hjgnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$mubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubj)}(h+umode_t (*is_visible)(void *data, int type)h](h)}(hhh]jd)}(humode_th]humode_t}(hjnhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]jlc.iscsi_boot_create_acpitblasbuh1hhj{nubjM)}(h h]h }(hjnhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{nubj)}(hjKZh]h(}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubjd)}(h is_visibleh]h is_visible}(hjnhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{nubj)}(hjtZh]h)}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubj)}(hjKZh]h(}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubj;)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{nubjM)}(h h]h }(hjnhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{nubj)}(hjh]h*}(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubjd)}(hdatah]hdata}(hjohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{nubj)}(hjZh]h,}(hj'ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubjM)}(h h]h }(hj4ohhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{nubj;)}(hinth]hint}(hjBohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{nubjM)}(h h]h }(hjPohhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj{nubjd)}(htypeh]htype}(hj^ohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj{nubj)}(hjtZh]h)}(hjlohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{nubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubj)}(hvoid (*release)(void *data)h](j;)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubjM)}(h h]h }(hjohhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjoubj)}(hjKZh]h(}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjd)}(hreleaseh]hrelease}(hjohhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjoubj)}(hjtZh]h)}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hjKZh]h(}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj;)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubjM)}(h h]h }(hjohhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjd)}(hdatah]hdata}(hj phhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjoubj)}(hjtZh]h)}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj9lubeh}(h]h ]h"]h$]h&]j|j}uh1j~hjkhhhjkhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjkhhhjkhMubah}(h]jkah ](jjeh"]h$]h&]j j!)j"huh1j.hjkhMhjkhhubj$)}(hhh]h)}(h create boot acpi table sysfs dirh]h create boot acpi table sysfs dir}(hjBphhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj?phhubah}(h]h ]h"]h$]h&]uh1j#hjkhhhjkhMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjZpjFjZpjGjHjIuh1j)hhhjXhNhNubjK)}(hX**Parameters** ``struct iscsi_boot_kset *boot_kset`` boot kset ``int index`` not used ``void *data`` driver specific data ``ssize_t (*show)(void *data, int type, char *buf)`` attr show function ``umode_t (*is_visible)(void *data, int type)`` attr visibility function ``void (*release)(void *data)`` release function **Note** The boot sysfs lib will free the data passed in for the caller when all refs to the acpitbl kobject have been released.h](h)}(h**Parameters**h]jU)}(hjdph]h Parameters}(hjfphhhNhNubah}(h]h ]h"]h$]h&]uh1jThjbpubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj^pubjk)}(hhh](jp)}(h0``struct iscsi_boot_kset *boot_kset`` boot kset h](jv)}(h%``struct iscsi_boot_kset *boot_kset``h]j|)}(hjph]h!struct iscsi_boot_kset *boot_kset}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjpubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj}pubj)}(hhh]h)}(h boot kseth]h boot kset}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhj}pubeh}(h]h ]h"]h$]h&]uh1johjphMhjzpubjp)}(h``int index`` not used h](jv)}(h ``int index``h]j|)}(hjph]h int index}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjpubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjpubj)}(hhh]h)}(hnot usedh]hnot used}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1johjphMhjzpubjp)}(h$``void *data`` driver specific data h](jv)}(h``void *data``h]j|)}(hjph]h void *data}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjpubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjpubj)}(hhh]h)}(hdriver specific datah]hdriver specific data}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj qhMhj qubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1johj qhMhjzpubjp)}(hH``ssize_t (*show)(void *data, int type, char *buf)`` attr show function h](jv)}(h4``ssize_t (*show)(void *data, int type, char *buf)``h]j|)}(hj.qh]h0ssize_t (*show)(void *data, int type, char *buf)}(hj0qhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj,qubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj(qubj)}(hhh]h)}(hattr show functionh]hattr show function}(hjGqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCqhMhjDqubah}(h]h ]h"]h$]h&]uh1jhj(qubeh}(h]h ]h"]h$]h&]uh1johjCqhMhjzpubjp)}(hI``umode_t (*is_visible)(void *data, int type)`` attr visibility function h](jv)}(h/``umode_t (*is_visible)(void *data, int type)``h]j|)}(hjgqh]h+umode_t (*is_visible)(void *data, int type)}(hjiqhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjequbah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjaqubj)}(hhh]h)}(hattr visibility functionh]hattr visibility function}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|qhMhj}qubah}(h]h ]h"]h$]h&]uh1jhjaqubeh}(h]h ]h"]h$]h&]uh1johj|qhMhjzpubjp)}(h1``void (*release)(void *data)`` release function h](jv)}(h``void (*release)(void *data)``h]j|)}(hjqh]hvoid (*release)(void *data)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjqubah}(h]h ]h"]h$]h&]uh1juha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhjqubj)}(hhh]h)}(hrelease functionh]hrelease function}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1johjqhMhjzpubeh}(h]h ]h"]h$]h&]uh1jjhj^pubh)}(h**Note**h]jU)}(hjqh]hNote}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjqubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj^pubh)}(hwThe boot sysfs lib will free the data passed in for the caller when all refs to the acpitbl kobject have been released.h]hwThe boot sysfs lib will free the data passed in for the caller when all refs to the acpitbl kobject have been released.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMhj^pubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjXhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%#iscsi_boot_create_kset (C function)c.iscsi_boot_create_ksethNtauh1jhjXhhhNhNubj*)}(hhh](j/)}(hFstruct iscsi_boot_kset * iscsi_boot_create_kset (const char *set_name)h]j5)}(hDstruct iscsi_boot_kset *iscsi_boot_create_kset(const char *set_name)h](j)}(hjh]hstruct}(hj rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhha/var/lib/git/docbuild/linux/Documentation/driver-api/target:41: ./drivers/scsi/iscsi_boot_sysfs.chMubjM)}(h h]h }(hj.rhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjrhhhj-rhMubh)}(hhh]jd)}(hiscsi_boot_kseth]hiscsi_boot_kset}(hj?rhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjlen - offseth](h)}(h**Parameters**h]jU)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjxubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKRhj~xubjk)}(hhh](jp)}(h/``read_descriptor_t *rd_desc`` read descriptor h](jv)}(h``read_descriptor_t *rd_desc``h]j|)}(hjxh]hread_descriptor_t *rd_desc}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjxubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKOhjxubj)}(hhh]h)}(hread descriptorh]hread descriptor}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKOhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1johjxhKOhjxubjp)}(h&``struct sk_buff *skb`` socket buffer h](jv)}(h``struct sk_buff *skb``h]j|)}(hjxh]hstruct sk_buff *skb}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjxubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKPhjxubj)}(hhh]h)}(h socket bufferh]h socket buffer}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhKPhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1johjxhKPhjxubjp)}(h&``unsigned int offset`` offset in skb h](jv)}(h``unsigned int offset``h]j|)}(hjyh]hunsigned int offset}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjyubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKQhjyubj)}(hhh]h)}(h offset in skbh]h offset in skb}(hj.yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*yhKQhj+yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1johj*yhKQhjxubjp)}(h ``size_t len`` skb->len - offseth](jv)}(h``size_t len``h]j|)}(hjNyh]h size_t len}(hjPyhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjLyubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKShjHyubj)}(hhh]h)}(hskb->len - offseth]hskb->len - offset}(hjgyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKRhjdyubah}(h]h ]h"]h$]h&]uh1jhjHyubeh}(h]h ]h"]h$]h&]uh1johjcyhKShjxubeh}(h]h ]h"]h$]h&]uh1jjhj~xubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKsubjM)}(h h]h }(hjyhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjyhhhjyhKsubj^)}(hiscsi_sw_sk_state_checkh]jd)}(hiscsi_sw_sk_state_checkh]hiscsi_sw_sk_state_check}(hjyhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjyubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjyhhhjyhKsubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjM)}(h h]h }(hjyhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjyubh)}(hhh]jd)}(hsockh]hsock}(hjzhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j)}jjysbc.iscsi_sw_sk_state_checkasbuh1hhjyubjM)}(h h]h }(hj#zhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjyubj)}(hjh]h*}(hj1zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubjd)}(hskh]hsk}(hj>zhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjyubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjyubah}(h]h ]h"]h$]h&]j|j}uh1j~hjyhhhjyhKsubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjyhhhjyhKsubah}(h]jyah ](jjeh"]h$]h&]j j!)j"huh1j.hjyhKshjyhhubj$)}(hhh]h)}(hcheck socket stateh]hcheck socket state}(hjhzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKjhjezhhubah}(h]h ]h"]h$]h&]uh1j#hjyhhhjyhKsubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjzjFjzjGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjzubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKnhjzubjk)}(hhh]jp)}(h``struct sock *sk`` socket h](jv)}(h``struct sock *sk``h]j|)}(hjzh]hstruct sock *sk}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjzubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKkhjzubj)}(hhh]h)}(hsocketh]hsocket}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKkhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1johjzhKkhjzubah}(h]h ]h"]h$]h&]uh1jjhjzubh)}(h**Description**h]jU)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjzubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKmhjzubh)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKmhjzubh)}(h%Must be called with sk_callback_lock.h]h%Must be called with sk_callback_lock.}(hj {hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKqhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj8{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4{hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKubjM)}(h h]h }(hjG{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj4{hhhjF{hKubj^)}(hiscsi_sw_tcp_write_spaceh]jd)}(hiscsi_sw_tcp_write_spaceh]hiscsi_sw_tcp_write_space}(hjY{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjU{ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj4{hhhjF{hKubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](j)}(hjh]hstruct}(hju{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq{ubjM)}(h h]h }(hj{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjq{ubh)}(hhh]jd)}(hsockh]hsock}(hj{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_spaceasbuh1hhjq{ubjM)}(h h]h }(hj{hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjq{ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq{ubjd)}(hskh]hsk}(hj{hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjq{ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjm{ubah}(h]h ]h"]h$]h&]j|j}uh1j~hj4{hhhjF{hKubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj0{hhhjF{hKubah}(h]j+{ah ](jjeh"]h$]h&]j j!)j"huh1j.hjF{hKhj-{hhubj$)}(hhh]h)}(h1Called when more output buffer space is availableh]h1Called when more output buffer space is available}(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-{hhhjF{hKubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj|jFj|jGjHjIuh1j)hhhjvhNhNubjK)}(hC**Parameters** ``struct sock *sk`` socket space is available forh](h)}(h**Parameters**h]jU)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj|ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhj|ubjk)}(hhh]jp)}(h1``struct sock *sk`` socket space is available forh](jv)}(h``struct sock *sk``h]j|)}(hj9|h]hstruct sock *sk}(hj;|hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj7|ubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhj3|ubj)}(hhh]h)}(hsocket space is available forh]hsocket space is available for}(hjR|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chKhjO|ubah}(h]h ]h"]h$]h&]uh1jhj3|ubeh}(h]h ]h"]h$]h&]uh1johjN|hKhj0|ubah}(h]h ]h"]h$]h&]uh1jjhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chM%ubjM)}(h h]h }(hj|hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|hhhj|hM%ubj^)}(hiscsi_sw_tcp_xmit_segmenth]jd)}(hiscsi_sw_tcp_xmit_segmenth]hiscsi_sw_tcp_xmit_segment}(hj|hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj|hhhj|hM%ubj)}(h@(struct iscsi_tcp_conn *tcp_conn, struct iscsi_segment *segment)h](j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjM)}(h h]h }(hj|hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|ubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hj|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 }(hj}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj|ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubjd)}(htcp_connh]htcp_conn}(hj)}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj|ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj|ubj)}(hstruct iscsi_segment *segmenth](j)}(hjh]hstruct}(hjB}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>}ubjM)}(h h]h }(hjO}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>}ubh)}(hhh]jd)}(h iscsi_segmenth]h iscsi_segment}(hj`}hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj]}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjb}modnameN classnameNjj)}j]j }c.iscsi_sw_tcp_xmit_segmentasbuh1hhj>}ubjM)}(h h]h }(hj~}hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj>}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>}ubjd)}(hsegmenth]hsegment}(hj}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|hM%ubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj|hhhj|hM%ubah}(h]j|ah ](jjeh"]h$]h&]j j!)j"huh1j.hj|hM%hj|hhubj$)}(hhh]h)}(htransmit segmenth]htransmit segment}(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|hM%ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj}jFj}jGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj}ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj}ubjk)}(hhh](jp)}(h=``struct iscsi_tcp_conn *tcp_conn`` the iSCSI TCP connection h](jv)}(h#``struct iscsi_tcp_conn *tcp_conn``h]j|)}(hj~h]hstruct iscsi_tcp_conn *tcp_conn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj~ubah}(h]h ]h"]h$]h&]uh1juhZ/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}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1johj~hMhj}ubjp)}(h:``struct iscsi_segment *segment`` the buffer to transmnit h](jv)}(h!``struct iscsi_segment *segment``h]j|)}(hj=~h]hstruct iscsi_segment *segment}(hj?~hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj;~ubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj7~ubj)}(hhh]h)}(hthe buffer to transmnith]hthe buffer to transmnit}(hjV~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR~hMhjS~ubah}(h]h ]h"]h$]h&]uh1jhj7~ubeh}(h]h ]h"]h$]h&]uh1johjR~hMhj}ubeh}(h]h ]h"]h$]h&]uh1jjhj}ubh)}(h**Description**h]jU)}(hjx~h]h Description}(hjz~hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjv~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~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~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&]uh1jJhjvhhhNhNubj)}(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}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMVubjM)}(h h]h }(hj~hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~hhhj~hMVubj^)}(hiscsi_sw_tcp_xmith]jd)}(hiscsi_sw_tcp_xmith]hiscsi_sw_tcp_xmit}(hj~hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj~ubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj~hhhj~hMVubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hj'hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)}jj~sbc.iscsi_sw_tcp_xmitasbuh1hhjubjM)}(h h]h }(hjGhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hconnh]hconn}(hjbhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubah}(h]h ]h"]h$]h&]j|j}uh1j~hj~hhhj~hMVubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj~hhhj~hMVubah}(h]j~ah ](jjeh"]h$]h&]j j!)j"huh1j.hj~hMVhj~hhubj$)}(hhh]h)}(h TCP transmith]h TCP transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMShjhhubah}(h]h ]h"]h$]h&]uh1j#hj~hhhj~hMVubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjvhNhNubjK)}(h>**Parameters** ``struct iscsi_conn *conn`` iscsi connectionh](h)}(h**Parameters**h]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMWhjubjk)}(hhh]jp)}(h,``struct iscsi_conn *conn`` iscsi connectionh](jv)}(h``struct iscsi_conn *conn``h]j|)}(hjh]hstruct iscsi_conn *conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMYhjubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMYhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj'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 }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj#hhhj5hMubj^)}(hiscsi_sw_tcp_xmit_qlenh]jd)}(hiscsi_sw_tcp_xmit_qlenh]hiscsi_sw_tcp_xmit_qlen}(hjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj#hhhj5hMubj)}(h(struct iscsi_conn *conn)h]j)}(hstruct iscsi_conn *connh](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjM)}(h h]h }(hjqhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj`ubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjJsbc.iscsi_sw_tcp_xmit_qlenasbuh1hhj`ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjd)}(hconnh]hconn}(hjhhhNhNubah}(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#hhhj5hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhj5hMubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hj5hMhjhhubj$)}(hhh]h)}(h*return the number of bytes queued for xmith]h*return the number of bytes queued for xmit}(hjhhhNhNubah}(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#hjhhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjvhNhNubjK)}(h>**Parameters** ``struct iscsi_conn *conn`` iscsi connectionh](h)}(h**Parameters**h]jU)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhjubjk)}(hhh]jp)}(h,``struct iscsi_conn *conn`` iscsi connectionh](jv)}(h``struct iscsi_conn *conn``h]j|)}(hj(h]hstruct iscsi_conn *conn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&]uh1juhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj"ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/target:47: ./drivers/scsi/iscsi_tcp.chMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1johj=hMhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj~hhhjhKubj^)}(hiscsi_tcp_segment_doneh]jd)}(hiscsi_tcp_segment_doneh]hiscsi_tcp_segment_done}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj~hhhjhKubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hj́hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hj݁hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjځubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj߁modnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_segment_doneasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htcp_connh]htcp_conn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hstruct iscsi_segment *segmenth](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjM)}(h h]h }(hj>hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubh)}(hhh]jd)}(h iscsi_segmenth]h iscsi_segment}(hjOhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]jc.iscsi_tcp_segment_doneasbuh1hhj-ubjM)}(h h]h }(hjmhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj-ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjd)}(hsegmenth]hsegment}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj-ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hint recvh](j;)}(hinth]hint}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hrecvh]hrecv}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubj)}(hunsigned copiedh](j;)}(hunsignedh]hunsigned}(hjւhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj҂ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj҂ubjd)}(hcopiedh]hcopied}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj҂ubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjubeh}(h]h ]h"]h$]h&]j|j}uh1j~hj~hhhjhKubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjzhhhjhKubah}(h]juah ](jjeh"]h$]h&]j j!)j"huh1j.hjhKhjwhhubj$)}(hhh]h)}(h%check whether the segment is completeh]h%check whether the segment is complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjhhubah}(h]h ]h"]h$]h&]uh1j#hjwhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj4jFj4jGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jThj<ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj8ubjk)}(hhh](jp)}(h9``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp connection h](jv)}(h#``struct iscsi_tcp_conn *tcp_conn``h]j|)}(hj]h]hstruct iscsi_tcp_conn *tcp_conn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj[ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjWubj)}(hhh]h)}(hiscsi tcp connectionh]hiscsi tcp connection}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1johjrhKhjTubjp)}(h9``struct iscsi_segment *segment`` iscsi segment to check h](jv)}(h!``struct iscsi_segment *segment``h]j|)}(hjh]hstruct iscsi_segment *segment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjubj)}(hhh]h)}(hiscsi segment to checkh]hiscsi segment to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhKhjTubjp)}(h=``int recv`` set to one of this is called from the recv path h](jv)}(h ``int recv``h]j|)}(hjσh]hint recv}(hjуhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj̓ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjɃubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjɃubeh}(h]h ]h"]h$]h&]uh1johjhKhjTubjp)}(h+``unsigned copied`` number of bytes copied h](jv)}(h``unsigned copied``h]j|)}(hjh]hunsigned copied}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhjubj)}(hhh]h)}(hnumber of bytes copiedh]hnumber of bytes copied}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhKhjTubeh}(h]h ]h"]h$]h&]uh1jjhj8ubh)}(h**Description**h]jU)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjAubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj8ubh)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj8ubh)}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj8ubh)}(h!This function must be re-entrant.h]h!This function must be re-entrant.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chKhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMubj^)}(hiscsi_tcp_hdr_recv_preph]jd)}(hiscsi_tcp_hdr_recv_preph]hiscsi_tcp_hdr_recv_prep}(hjDŽhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjÄubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhMubj)}(h!(struct iscsi_tcp_conn *tcp_conn)h]j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߄ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj߄ubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjɄsbc.iscsi_tcp_hdr_recv_prepasbuh1hhj߄ubjM)}(h h]h }(hj!hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj߄ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߄ubjd)}(htcp_connh]htcp_conn}(hj<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~hjhhhjhMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hjhMhjhhubj$)}(hhh]h)}(hprep segment for hdr receptionh]hprep segment for hdr reception}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM~hjchhubah}(h]h ]h"]h$]h&]uh1j#hjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj~jFj~jGjHjIuh1j)hhhjvhNhNubjK)}(hX-**Parameters** ``struct iscsi_tcp_conn *tcp_conn`` iscsi connection to prep for **Description** This function always passes NULL for the crcp 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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjk)}(hhh]jp)}(hA``struct iscsi_tcp_conn *tcp_conn`` iscsi connection to prep for h](jv)}(h#``struct iscsi_tcp_conn *tcp_conn``h]j|)}(hjh]hstruct iscsi_tcp_conn *tcp_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubj)}(hhh]h)}(hiscsi connection to prep forh]hiscsi connection to prep for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjubah}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(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 crcp 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 crcp 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.}(hjhhhNhNubah}(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&]uh1jJhjvhhhNhNubj)}(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}(hj'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 }(hj6hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj#hhhj5hMubj^)}(hiscsi_tcp_cleanup_taskh]jd)}(hiscsi_tcp_cleanup_taskh]hiscsi_tcp_cleanup_task}(hjHhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj#hhhj5hMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjM)}(h h]h }(hjqhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj`ubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjJsbc.iscsi_tcp_cleanup_taskasbuh1hhj`ubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjd)}(htaskh]htask}(hjhhhNhNubah}(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#hhhj5hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhj5hMubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hj5hMhjhhubj$)}(hhh]h)}(hfree tcp_task resourcesh]hfree tcp_task resources}(hjhhhNhNubah}(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#hjhhhj5hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjvhNhNubjK)}(hp**Parameters** ``struct iscsi_task *task`` iscsi task **Description** must be called with session back_lockh](h)}(h**Parameters**h]jU)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjk)}(hhh]jp)}(h'``struct iscsi_task *task`` iscsi task h](jv)}(h``struct iscsi_task *task``h]j|)}(hj(h]hstruct iscsi_task *task}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj"ubj)}(hhh]h)}(h iscsi taskh]h iscsi task}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1johj=hMhjubah}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jThjaubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubh)}(h%must be called with session back_lockh]h%must be called with session back_lock}(hjyhhhNhNubah}(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&]uh1jJhjvhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMyubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjhhhjhMyubj^)}(hiscsi_tcp_recv_segment_is_hdrh]jd)}(hiscsi_tcp_recv_segment_is_hdrh]hiscsi_tcp_recv_segment_is_hdr}(hjɇhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjŇubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjhhhjhMyubj)}(h!(struct iscsi_tcp_conn *tcp_conn)h]j)}(hstruct iscsi_tcp_conn *tcp_connh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubajM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(hiscsi_tcp_connh]hiscsi_tcp_conn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjˇsbc.iscsi_tcp_recv_segment_is_hdrasbuh1hhjubjM)}(h h]h }(hj#hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htcp_connh]htcp_conn}(hj>hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj݇ubah}(h]h ]h"]h$]h&]j|j}uh1j~hjhhhjhMyubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhjhhhjhMyubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hjhMyhjhhubj$)}(hhh]h)}(h#tests if we are reading in a headerh]h#tests if we are reading in a header}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMshjehhubah}(h]h ]h"]h$]h&]uh1j#hjhhhjhMyubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMwhjubjk)}(hhh]jp)}(h3``struct iscsi_tcp_conn *tcp_conn`` iscsi tcp conn h](jv)}(h#``struct iscsi_tcp_conn *tcp_conn``h]j|)}(hjh]hstruct iscsi_tcp_conn *tcp_conn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMthjubj)}(hhh]h)}(hiscsi tcp connh]hiscsi tcp conn}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMthjubah}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMvhjubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj)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 }(hj8hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj%hhhj7hMubj^)}(hiscsi_tcp_recv_skbh]jd)}(hiscsi_tcp_recv_skbh]hiscsi_tcp_recv_skb}(hjJhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjFubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj%hhhj7hMubj)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjM)}(h h]h }(hjshhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjbubh)}(hhh]jd)}(h iscsi_connh]h iscsi_conn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjLsbc.iscsi_tcp_recv_skbasbuh1hhjbubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjbubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubjd)}(hconnh]hconn}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj^ubj)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hj؉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԉubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjԉubh)}(hhh]jd)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.iscsi_tcp_recv_skbasbuh1hhjԉubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjԉubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԉubjd)}(hskbh]hskb}(hj/hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjԉubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj^ubj)}(hunsigned int offseth](j;)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hjVhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubj;)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubjM)}(h h]h }(hjrhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjDubjd)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjDubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj^ubj)}(hbool offloadedh](j;)}(hj h]hbool}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(h offloadedh]h offloaded}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj^ubj)}(h int *statush](j;)}(hinth]hint}(hj͊hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjɊubjM)}(h h]h }(hjۊhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjɊubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɊubjd)}(hstatush]hstatus}(hjhhhNhNubah}(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%hhhj7hMubeh}(h]h ]h"]h$]h&]j|j}juh1j4jjhj!hhhj7hMubah}(h]jah ](jjeh"]h$]h&]j j!)j"huh1j.hj7hMhjhhubj$)}(hhh]h)}(h Process skbh]h Process skb}(hj hhhNhNubah}(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#hjhhhj7hMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj8jFj8jGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj@ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj<ubjk)}(hhh](jp)}(h-``struct iscsi_conn *conn`` iscsi connection h](jv)}(h``struct iscsi_conn *conn``h]j|)}(hjah]hstruct iscsi_conn *conn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj_ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj[ubj)}(hhh]h)}(hiscsi connectionh]hiscsi connection}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1johjvhMhjXubjp)}(hG``struct sk_buff *skb`` network buffer with header and/or data segment h](jv)}(h``struct sk_buff *skb``h]j|)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubj)}(hhh]h)}(h.network buffer with header and/or data segmenth]h.network buffer with header and/or data segment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMhjXubjp)}(h&``unsigned int offset`` offset in skb h](jv)}(h``unsigned int offset``h]j|)}(hjӋh]hunsigned int offset}(hjՋhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjыubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj͋ubj)}(hhh]h)}(h offset in skbh]h offset in skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj͋ubeh}(h]h ]h"]h$]h&]uh1johjhMhjXubjp)}(h=``bool offloaded`` bool indicating if transfer was offloaded h](jv)}(h``bool offloaded``h]j|)}(hj h]hbool offloaded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubj)}(hhh]h)}(h)bool indicating if transfer was offloadedh]h)bool indicating if transfer was offloaded}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj!hMhjXubjp)}(h(``int *status`` iscsi TCP status result h](jv)}(h``int *status``h]j|)}(hjEh]h int *status}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjCubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj?ubj)}(hhh]h)}(hiscsi TCP status resulth]hiscsi TCP status result}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1johjZhMhjXubeh}(h]h ]h"]h$]h&]uh1jjhj<ubh)}(h**Description**h]jU)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThj~ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj<ubh)}(hUWill return status of transfer in **status**. And will return number of bytes copied.h](h"Will return status of transfer in }(hjhhhNhNubjU)}(h **status**h]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubh). And will return number of bytes copied.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj׌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 }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjӌhhhjhMubj^)}(hiscsi_tcp_task_inith]jd)}(hiscsi_tcp_task_inith]hiscsi_tcp_task_init}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hjӌhhhjhMubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hj!hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hj2hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j)}jjsbc.iscsi_tcp_task_initasbuh1hhjubjM)}(h h]h }(hjRhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(htaskh]htask}(hjmhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhj ubah}(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 j!)j"huh1j.hjhMhǰhhubj$)}(hhh]h)}(h1Initialize iSCSI SCSI_READ or SCSI_WRITE commandsh]h1Initialize iSCSI SCSI_READ or SCSI_WRITE commands}(hjhhhNhNubah}(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#hǰhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEjjFjjGjHjIuh1j)hhhjvhNhNubjK)}(h?**Parameters** ``struct iscsi_task *task`` scsi command taskh](h)}(h**Parameters**h]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjk)}(hhh]jp)}(h-``struct iscsi_task *task`` scsi command taskh](jv)}(h``struct iscsi_task *task``h]j|)}(hj؍h]hstruct iscsi_task *task}(hjڍhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj֍ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjҍubj)}(hhh]h)}(hscsi command taskh]hscsi command task}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubah}(h]h ]h"]h$]h&]uh1jhjҍubeh}(h]h ]h"]h$]h&]uh1johjhMhjύubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jJhjvhhhNhNubj)}(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}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chM"ubjM)}(h h]h }(hjAhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj.hhhj@hM"ubj^)}(hiscsi_tcp_task_xmith]jd)}(hiscsi_tcp_task_xmith]hiscsi_tcp_task_xmit}(hjShhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjOubah}(h]h ](jwjxeh"]h$]h&]j|j}uh1j]hj.hhhj@hM"ubj)}(h(struct iscsi_task *task)h]j)}(hstruct iscsi_task *taskh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjM)}(h h]h }(hj|hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjkubh)}(hhh]jd)}(h iscsi_taskh]h iscsi_task}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjUsbc.iscsi_tcp_task_xmitasbuh1hhjkubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjd)}(htaskh]htask}(hjȎhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjkubeh}(h]h ]h"]h$]h&]noemphj|j}uh1jhjgubah}(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 j!)j"huh1j.hj@hM"hj'hhubj$)}(hhh]h)}(hxmit normal PDU taskh]hxmit normal PDU task}(hjhhhNhNubah}(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'hhhj@hM"ubeh}(h]h ](jfunctioneh"]h$]h&]jDjjEj jFj jGjHjIuh1j)hhhjvhNhNubjK)}(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]jU)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jThjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubjk)}(hhh]jp)}(h/``struct iscsi_task *task`` iscsi command task h](jv)}(h``struct iscsi_task *task``h]j|)}(hj3h]hstruct iscsi_task *task}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj1ubah}(h]h ]h"]h$]h&]uh1juh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhj-ubj)}(hhh]h)}(hiscsi command taskh]hiscsi command task}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1johjHhMhj*ubah}(h]h ]h"]h$]h&]uh1jjhjubh)}(h**Description**h]jU)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jThjlubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/target:50: ./drivers/scsi/libiscsi_tcp.chMhjubh)}(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.}(hjhhhNhNubah}(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&]uh1jJhjvhhhNhNubeh}(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_handlerj͏error_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.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_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_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjhhjjj+j+j,j,j,j,j,j,jXjXjvjvjju nametypes}(jh݉jj+j,j,j,jXjvjuh}(jhhhjhj+jj'j0jjjjjjj j jjjjjbjgj j j!j!jc#jh#j$j$j&j&jt'jy'j(j(j)*j.*j,j+j,j+j,j ,jXj,j,j,j/j/j%1j*1j3j3j6j6j9j9jb;jg;j<j<jd>ji>j?j?j@AjEAj.Cj3CjDjDj0Fj5FjZHj_Hj KjKjLjMjQjQj2Sj7SjTjTjWjWjvjXjXjXj_j _jaejfejkjkjrjrjsjsj ujujjvjvjvjyjyj+{j0{j|j|j~j~jjjujzjjjjjjjj!jʌjόj%j*u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.