Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

target: Remove core TRANSPORT_FREE_CMD_INTR usage

This patch drops TRANSPORT_FREE_CMD_INTR usage from target core, which
includes the removal of transport_generic_free_cmd_intr() symbol,
TRANSPORT_FREE_CMD_INTR usage in transport_processing_thread(), and
special case LUN_RESET handling to skip TRANSPORT_FREE_CMD_INTR processing
in core_tmr_drain_cmd_list(). We now expect that fabric modules will
use an internal workqueue to provide process context when releasing
se_cmd descriptor resources via transport_generic_free_cmd().

Reported-by: Christoph Hellwig <hch@lst.de>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Roland Dreier <roland@purestorage.com>
Cc: Madhuranath Iyengar <mni@risingtidesystems.com>
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com>

-22
-10
drivers/target/target_core_tmr.c
··· 329 329 */ 330 330 if (prout_cmd == cmd) 331 331 continue; 332 - /* 333 - * Skip direct processing of TRANSPORT_FREE_CMD_INTR for 334 - * HW target mode fabrics. 335 - */ 336 - spin_lock(&cmd->t_state_lock); 337 - if (cmd->t_state == TRANSPORT_FREE_CMD_INTR) { 338 - spin_unlock(&cmd->t_state_lock); 339 - continue; 340 - } 341 - spin_unlock(&cmd->t_state_lock); 342 332 343 333 atomic_set(&cmd->t_transport_queue_active, 0); 344 334 atomic_dec(&qobj->queue_cnt);
-10
drivers/target/target_core_transport.c
··· 1718 1718 } 1719 1719 EXPORT_SYMBOL(transport_generic_handle_tmr); 1720 1720 1721 - void transport_generic_free_cmd_intr( 1722 - struct se_cmd *cmd) 1723 - { 1724 - transport_add_cmd_to_queue(cmd, TRANSPORT_FREE_CMD_INTR, false); 1725 - } 1726 - EXPORT_SYMBOL(transport_generic_free_cmd_intr); 1727 - 1728 1721 /* 1729 1722 * If the task is active, request it to be stopped and sleep until it 1730 1723 * has completed. ··· 4589 4596 break; 4590 4597 case TRANSPORT_PROCESS_WRITE: 4591 4598 transport_generic_process_write(cmd); 4592 - break; 4593 - case TRANSPORT_FREE_CMD_INTR: 4594 - transport_generic_free_cmd(cmd, 0); 4595 4599 break; 4596 4600 case TRANSPORT_PROCESS_TMR: 4597 4601 transport_generic_do_tmr(cmd);
-1
include/target/target_core_base.h
··· 89 89 TRANSPORT_PROCESS_TMR = 9, 90 90 TRANSPORT_ISTATE_PROCESSING = 11, 91 91 TRANSPORT_NEW_CMD_MAP = 16, 92 - TRANSPORT_FREE_CMD_INTR = 17, 93 92 TRANSPORT_COMPLETE_QF_WP = 18, 94 93 TRANSPORT_COMPLETE_QF_OK = 19, 95 94 };
-1
include/target/target_core_transport.h
··· 160 160 extern int transport_generic_handle_data(struct se_cmd *); 161 161 extern void transport_new_cmd_failure(struct se_cmd *); 162 162 extern int transport_generic_handle_tmr(struct se_cmd *); 163 - extern void transport_generic_free_cmd_intr(struct se_cmd *); 164 163 extern bool target_stop_task(struct se_task *task, unsigned long *flags); 165 164 extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, 166 165 struct scatterlist *, u32);