⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ini-call-flow

📁 iscsi源代码 UNH的progect 有initiator端和target端的源码
💻
字号:
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 + -