drivers/target/iscsi/iscsi_target_nodeattrib.c
Source file repositories/reference/linux-study-clean/drivers/target/iscsi/iscsi_target_nodeattrib.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/target/iscsi/iscsi_target_nodeattrib.c- Extension
.c- Size
- 7311 bytes
- Lines
- 255
- Domain
- Driver Families
- Bucket
- drivers/target
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
target/target_core_base.htarget/iscsi/iscsi_target_core.hiscsi_target_device.hiscsi_target_tpg.hiscsi_target_util.hiscsi_target_nodeattrib.h
Detected Declarations
function iscsit_set_default_node_attribuesfunction iscsit_na_dataout_timeoutfunction iscsit_na_dataout_timeout_retriesfunction iscsit_na_nopin_timeoutfunction list_for_each_entryfunction iscsit_na_nopin_response_timeoutfunction iscsit_na_random_datain_pdu_offsetsfunction iscsit_na_random_datain_seq_offsetsfunction iscsit_na_random_r2t_offsetsfunction iscsit_na_default_erl
Annotated Snippet
if (se_sess) {
sess = se_sess->fabric_sess_ptr;
spin_lock(&sess->conn_lock);
list_for_each_entry(conn, &sess->sess_conn_list,
conn_list) {
if (conn->conn_state !=
TARG_CONN_STATE_LOGGED_IN)
continue;
spin_lock(&conn->nopin_timer_lock);
__iscsit_start_nopin_timer(conn);
spin_unlock(&conn->nopin_timer_lock);
}
spin_unlock(&sess->conn_lock);
}
spin_unlock_bh(&se_nacl->nacl_sess_lock);
}
return 0;
}
int iscsit_na_nopin_response_timeout(
struct iscsi_node_acl *acl,
u32 nopin_response_timeout)
{
struct iscsi_node_attrib *a = &acl->node_attrib;
if (nopin_response_timeout > NA_NOPIN_RESPONSE_TIMEOUT_MAX) {
pr_err("Requested NopIn Response Timeout %u larger"
" than maximum %u\n", nopin_response_timeout,
NA_NOPIN_RESPONSE_TIMEOUT_MAX);
return -EINVAL;
} else if (nopin_response_timeout < NA_NOPIN_RESPONSE_TIMEOUT_MIN) {
pr_err("Requested NopIn Response Timeout %u smaller"
" than minimum %u\n", nopin_response_timeout,
NA_NOPIN_RESPONSE_TIMEOUT_MIN);
return -EINVAL;
}
a->nopin_response_timeout = nopin_response_timeout;
pr_debug("Set NopIn Response Timeout to %u for"
" Initiator Node %s\n", a->nopin_timeout,
iscsit_na_get_initiatorname(acl));
return 0;
}
int iscsit_na_random_datain_pdu_offsets(
struct iscsi_node_acl *acl,
u32 random_datain_pdu_offsets)
{
struct iscsi_node_attrib *a = &acl->node_attrib;
if (random_datain_pdu_offsets != 0 && random_datain_pdu_offsets != 1) {
pr_err("Requested Random DataIN PDU Offsets: %u not"
" 0 or 1\n", random_datain_pdu_offsets);
return -EINVAL;
}
a->random_datain_pdu_offsets = random_datain_pdu_offsets;
pr_debug("Set Random DataIN PDU Offsets to %u for"
" Initiator Node %s\n", a->random_datain_pdu_offsets,
iscsit_na_get_initiatorname(acl));
return 0;
}
int iscsit_na_random_datain_seq_offsets(
struct iscsi_node_acl *acl,
u32 random_datain_seq_offsets)
{
struct iscsi_node_attrib *a = &acl->node_attrib;
if (random_datain_seq_offsets != 0 && random_datain_seq_offsets != 1) {
pr_err("Requested Random DataIN Sequence Offsets: %u"
" not 0 or 1\n", random_datain_seq_offsets);
return -EINVAL;
}
a->random_datain_seq_offsets = random_datain_seq_offsets;
pr_debug("Set Random DataIN Sequence Offsets to %u for"
" Initiator Node %s\n", a->random_datain_seq_offsets,
iscsit_na_get_initiatorname(acl));
return 0;
}
int iscsit_na_random_r2t_offsets(
struct iscsi_node_acl *acl,
Annotation
- Immediate include surface: `target/target_core_base.h`, `target/iscsi/iscsi_target_core.h`, `iscsi_target_device.h`, `iscsi_target_tpg.h`, `iscsi_target_util.h`, `iscsi_target_nodeattrib.h`.
- Detected declarations: `function iscsit_set_default_node_attribues`, `function iscsit_na_dataout_timeout`, `function iscsit_na_dataout_timeout_retries`, `function iscsit_na_nopin_timeout`, `function list_for_each_entry`, `function iscsit_na_nopin_response_timeout`, `function iscsit_na_random_datain_pdu_offsets`, `function iscsit_na_random_datain_seq_offsets`, `function iscsit_na_random_r2t_offsets`, `function iscsit_na_default_erl`.
- Atlas domain: Driver Families / drivers/target.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.