📄 ini-call-flow
字号:
The call flows in the initiator for purposes of locking/unlocking sess_lock
command process
iscsi_initiator_proc_info()
-> scan_manage_stuff
-> scan_force_stuff
-> scan_snack_stuff
-> scan_restore_stuff
-> configure_parameter
-> scan_ip_stuff
-> remove_session_from_hostdata
-----------------> create_session
-> build_session_skeleton
-> add_session_to_hostdata
---------> init_connection
=: iscsi_initiator_tx_thread
-> init_session
-> init_connection
=: iscsi_initiator_tx_thread
-> add_lun_to_sess
-> drive_text_negotiate
-> remove_session_from_hostdata
-> unbuild_session_skeleton
-> scan_test_stuff
-> do_test
-> find_connection
-> drive_text_negotiate
-> find_flag_parameter
---------> add_padding
---------> attach_pending_command
-> drive_nopout
-> tx_nopout
-> add_padding
-> attach_pending_command
-> drive_logout
---------> attach_pending_command
LOCK(host_data_lock)
-> print_config_info
---------> print_session_info
-> dump_instance_stats
UNLOCK(host_data_lock)
-> print_my_kmemory
-> print_iovs
read_proc_file
LOCK(host_data_lock)
->dump_sess_info
-> print_session_info
-> print_connection_info
-> print_session_params
->dump_conn_info
---------> print_connection_info
UNLOCK(host_data_lock)
scsi midlevel process
-> iscsi_initiator_detect
-> iscsi_initiator_release
-> unbuild_session_skeleton
-> remove_luns
-> remove_session_from_hostdata
-> iscsi_initiator_queuecommand
-> scsi_to_iscsi
-> get_connection
-> call_back_scsi_done
-> setup_command
-> setup_header_iovec
-> attach_pending_command
-> iscsi_initiator_abort
---------> find_aborted_command
-> tm_send_and_wait
-> attach_pending_command
-> find_aborted_command
-> free_pending_command
-> iscsi_initiator_reset
tx_thread - one per session
-> drive_nopout
-> check_for_retransmit
-> tx_retransmit_state1
-> free_r2t_cookie
-> build_write_command
-> tx_retransmit_state2
-> drive_nopout
-> tx_retransmit_state3
-> init_send_snack
-----------------> build_write_command
-> ready_to_xmit
-> setup_dataoutpdu
-> free_r2t_cookie
-> do_tx_send
---------> drive_logout
-----------------> create_rec_conn
-> tx_shutdown_thread
rx_thread - one per connection
-> rx_nopin
-> free_pending_command
-> tx_nopout
-> recv_pdu_header
---------> recv_iovector
-> rx_async_msg
-> drive_logout
-> drive_text_negotiate
-> rx_text_rsp
-> free_pending_command
-> drive_logout
-> attach_pending_command
-> rx_rsp
-----------------> init_do_error_recovery
-> init_digest_recovery
-> recv_ignore_data
-> recv_data_in_data
-> init_session_recovery
---------> init_session_recovery
-> do_scsi_response
-------------------------> init_session_recovery
-> rx_logout_rsp
-> free_pending_command
-> deal_with_connrec
-> create_rec_conn
-> create_session
-------------------------> init_session_recovery
---------> deal_with_connrec
-> rx_r2t
-----------------> init_do_error_recovery
-> rx_data
-> do_scsi_response
-------------------------> init_session_recovery
-> recv_data_in_data
-> recv_iovector
-> recv_data_in_error
-> init_do_error_recovery
-----------------> init_do_error_recovery
-------------------------> init_do_error_recovery
init_recovery_thread - one per session, acts like an rx thread
-> drive_logout
-> recv_ignore_data
-> recv_pdu_header
-------------------------> create_session
+----------------------------------+
| Functions that LOCK/UNLOCK locks |
+----------------------------------+
add_lun_to_sess
LOCK(sess_lock)
-> locked_add_lun_to_sess
UNLOCK(sess_lock)
add_session_to_hostdata
LOCK(host_data_lock)
LOCK(sess_lock)
->locked_add_lun_to_sess
-> add_conn_to_sess
UNLOCK(sess_lock)
UNLOCK(host_data_lock)
build_session_skeleton
-> unbuild_session_skeleton
build_write_command
-> setup_header_iovec
UNLOCK(sess_lock)
-> kmap
LOCK(sess_lock)
-> create_r2t_cookie
-> hookup_r2t_cookie
close_connection
LOCK(sess_lock)
UNLOCK(sess_lock)
close_session
-> close_connection
-> free_connection
create_rec_conn
-> find_used_lun
-> create_session
LOCK(host_data_lock)
LOCK(sess_lock)
-> locked_drop_lun_from_sess
-> locked_add_lun_to_sess
UNLOCK(sess_lock)
UNLOCK(host_data_lock)
create_session
-> build_session_skeleton
-> add_session_to_hostdata
-> init_connection
-> init_session
=: iscsi_initiator_tx_thread
-> add_lun_to_sess
LOCK(sess_lock)
-> drive_text_negotiate
UNLOCK(sess_lock)
-> remove_session_from_hostdata
-> unbuild_session_skeleton
deal_with_connrec
-> create_rec_conn
LOCK(sess_lock)
-> attach_pending_command
UNLOCK(sess_lock)
-> remove_session_from_hostdata
-> init_session_recovery
do_test
LOCK(host_data_lock)
-> find_connection
LOCK(sess_lock)
UNLOCK(host_data_lock)
-> drive_text_negotiate
-> drive_nopout
-> drive_logout
UNLOCK(sess_lock)
do_tx_send
UNLOCK(sess_lock)
->sock_sendmsg
LOCK(sess_lock)
drop_conn_from_session
-> locked_drop_lun_from_sess
-> locked_add_lun_to_sess
drop_lun_from_sess
LOCK(sess_lock)
-> locked_drop_lun_from_sess
UNLOCK(sess_lock)
find_aborted_command
LOCK(host_data_lock)
LOCK(sess_lock)
UNLOCK(host_data_lock)
UNLOCK(sess_lock)
init_connection
=: iscsi_initiator_tx_thread
init_recovery_thread
LOCK(sess_lock)
-> drive_logout
-> recv_ignore_data
-> recv_pdu_header
-> recv_ignore_data
UNLOCK(sess_lock)
-> remove_luns
-> create_session
LOCK(host_data_lock)
LOCK(sess_lock)
-> scsi_to_iscsi
UNLOCK(sess_lock)
-> clean_rec_group
UNLOCK(host_data_lock)
init_session
-> init_connection
init_session_recovery
UNLOCK(sess_lock)
LOCK(sess_lock)
iscsi_initiator_abort
-> find_aborted_command
-> tm_send_and_wait
-> free_pending_command
-> call_back_scsi_done
UNLOCK(sess_lock)
iscsi_initiator_halt
-> remove_luns
iscsi_initiator_login
LOCK(host_data_lock)
UNLOCK(host_data_lock)
-> find_parameter
LOCK(host_data_lock)
UNLOCK(host_data_lock)
iscsi_initiator_queuecommand
LOCK(host_data_lock)
-> set_rec_group
LOCK(sess_lock)
-> scsi_to_iscsi
UNLOCK(sess_lock)
UNLOCK(host_data_lock)
iscsi_initiator_release
-> unbuild_session_skeleton
-> remove_luns
iscsi_initiator_rx_thread
LOCK(sess_lock)
-> recv_pdu_header
-> check_and_update_cmd_sns
-> deal_with_connrec
-> init_do_error_recovery
-> recv_local_data
-> init_do_error_recovery
-> rx_nopin
-> rx_rsp
-> rx_task_mgt_rsp
-> rx_text_rsp
-> rx_data
-> rx_r2t
-> rx_async_msg
-> rx_rjt
-> free_pending_command
UNLOCK(sess_lock)
remove_session_from_hostdata
iscsi_initiator_tx_thread
restart_tx_timer
LOCK(sess_lock)
-> drive_nopout
-> build_write_command
-> setup_header_iovec
-> kmap
-> create_r2t_cookie
-> hookup_r2t_cookie
-> check_for_retransmit
-> ready_to_xmit
-> do_tx_send
-> free_pending_command
UNLOCK(sess_lock)
-> create_rec_conn
LOCK(sess_lock)
-> drive_logout
UNLOCK(sess_lock)
-> tx_shutdown_thread
ready_to_xmit
-> setup_dataoutpdu
-> free_r2t_cookie
recv_data_in_data
UNLOCK(sess_lock)
-> kmap
LOCK(sess_lock)
-> my_kmalloc(local buf)
-> recv_iovector
-> recv_data_in_error
recv_iovector
UNLOCK(sess_lock)
-> sock_recvmsg
LOCK(sess_lock)
remove_luns
-> remove_session_from_hostdata
remove_session_from_hostdata
LOCK(host_data_lock)
LOCK(sess_lock)
-> drop_conn_from_session
UNLOCK(sess_lock)
-> drop_lun_from_sess
UNLOCK(host_data_lock)
-> close_connection
-> free_connection
-> close_session
-> unbuild_session_skeleton
rx_data
-> recv_ignore_data
-----------------> init_do_error_recovery
-> recv_data_in_data
-> recv_iovector
-> recv_data_in_error
-> init_do_error_recovery
-> do_scsi_response
-------------------------> init_session_recovery
-> init_send_snack
rx_logout_rsp
-> free_pending_command
UNLOCK(sess_lock)
-> start_connrec_timer
-> deal_with_connrec
rx_nopin
-> free_pending_command
-> tx_nopout
rx_rjt
-> free_pending_command
rx_rsp
-----------------> init_do_error_recovery
-> do_scsi_response
rx_r2t
-> free_r2t_cookie
-----------------> init_do_error_recovery
rx_task_mgt_rsp
-> free_pending_command
rx_text_rsp
-> free_pending_command
-> drive_logout
-> attach_pending_command
scsi_to_iscsi
-> get_connection
-> call_back_scsi_done
-> setup_command
-> setup_header_iovec
-> attach_pending_command
setup_dataoutpdu
-> free_r2t_cookie
UNLOCK(sess_lock)
-> kmap
LOCK(sess_lock)
tm_send_and_wait
-> attach_pending_command
UNLOCK(sess_lock)
-> find_aborted_command
(LOCK(sess_lock))
-> free_pending_command
tx_shutdown_thread
LOCK(sess_lock)
UNLOCK(sess_lock)
-> remove_luns
+--------------------------------------------+
| State of locks on entry to major functions |
+--------------------------------------------+
major function host_data_lock sess_lock
-------------- -------------- ---------
add_conn_to_sess locked locked c-ok l-ok
add_lun_to_sess either locked c-ok l-ok f-ok
add_padding unlocked locked c-ok l-ok
add_session_to_hostdata unlocked unlocked c-ok l-ok f-ok
attach_pending_command either locked
build_session_skeleton unlocked unlocked c-ok l-ok
build_write_command unlocked locked c-ok l-ok f-ok
call_back_scsi_done unlocked locked
check_and_update_cmd_sns unlocked locked c-ok l-ok
check_for_retransmit unlocked locked c-ok l-ok
clear_free_conn unlocked unlocked
close_connection unlocked unlocked c-ok l-ok f-ok
close_session unlocked unlocked c-ok l-ok f-ok
create_rec_conn unlocked unlocked c-ok l-ok f-ok
create_session unlocked unlocked c-ok l-ok f-ok
deal_with_connrec
do_round_robin unlocked locked c-ok l-ok
do_tx_send unlocked locked c-ok l-ok f-ok
drive_logout unlocked locked c-ok l-ok
drive_nopout unlocked locked c-ok l-ok
drive_text_negotiate unlocked locked c-ok
drop_conn_from_session locked locked c-ok l-ok
drop_lun_from_sess locked unlocked c-ok l-ok f-ok
dump_conn_info locked unlocked c-ok l-ok
dump_instance_stats locked unlocked c-ok l-ok
dump_sess_info locked unlocked c-ok l-ok
find_aborted_command unlocked unlocked c-ok l-ok f-ok
find_connection locked unlocked c-ok l-ok
find_used_lun unlocked unlocked c-ok l-ok
free_connection unlocked unlocked c-ok l-ok
free_pending_command unlocked locked c-ok
get_connection either locked c-ok l-ok
init_connection unlocked unlocked c-ok l-ok
init_recovery_thread unlocked unlocked
init_send_snack unlocked locked
init_session unlocked unlocked c-ok l-ok
init_session_recovery unlocked locked
iscsi_initiator_abort unlocked unlocked c-ok l-ok f-ok
iscsi_initiator_halt unlocked unlocked c-ok l-ok
iscsi_initiator_queuecommand unlocked unlocked c-ok l-ok f-ok
iscsi_initiator_release unlocked unlocked c-ok l-ok
iscsi_initiator_rx_thread unlocked unlocked c-ok l-ok f-ok
iscsi_initiator_tx_thread unlocked unlocked c-ok l-ok f-ok
locked_add_lun_to_sess either locked c-ok l-ok
locked_drop_lun_from_sess locked locked c-ok l-ok
print_connection_info locked unlocked c-ok l-ok
print_session_info locked unlocked c-ok l-ok
print_session_params locked unlocked c-ok l-ok
read_proc_file unlocked unlocked c-ok l-ok f-ok
ready_to_xmit unlocked locked c-ok l-ok
recv_data_in_data unlocked locked c-ok l-ok f-ok
recv_iovector unlocked locked c-ok
recv_pdu_header unlocked locked c-ok
remove_luns unlocked unlocked c-ok l-ok
remove_session_from_hostdata unlocked unlocked c-ok l-ok f-ok
rx_async_msg unlocked locked c-ok l-ok
rx_data unlocked locked c-ok l-ok
rx_logout_rsp unlocked locked c-ok l-ok f-ok
rx_nopin unlocked locked c-ok l-ok
rx_rjt unlocked locked c-ok l-ok
rx_rsp unlocked locked c-ok l-ok
rx_r2t unlocked locked c-ok l-ok
rx_task_mgt_rsp unlocked locked c-ok l-ok
rx_text_rsp unlocked locked c-ok l-ok
scsi_to_iscsi locked locked c-ok l-ok f-ok
setup_command either locked
setup_dataoutpdu unlocked locked c-ok l-ok f-ok
setup_header_iovec either locked c-ok l-ok
tm_send_and_wait unlocked locked c-ok l-ok f-ok
tx_nopout unlocked locked c-ok l-ok
tx_retransmit_state1 unlocked locked c-ok l-ok
tx_retransmit_state2 unlocked locked c-ok l-ok
tx_retransmit_state3 unlocked locked c-ok l-ok
tx_shutdown_thread unlocked unlocked c-ok l-ok f-ok
unbuild_session_skeleton unlocked unlocked c-ok l-ok
c-ok means code is commented correctly about what has to be locked/unlocked
l-ok means locking/unlocking flow is given above (or is missing if no locking)
f-ok means references to lock_flags in code have been fixed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -