Patch "target: Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
target: Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
target-fix-compare_and_write-caw_sem-leak-during-se_cmd-quiesce.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1d6ef276594a781686058802996e09c8550fd767Mon Sep 17 00:00:00 2001
From: Jiang Yi <[email protected]>
Date: Sun, 25 Jun 2017 12:28:50 -0700
Subject: target: Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce
From: Jiang Yi <[email protected]>
commit 1d6ef276594a781686058802996e09c8550fd767 upstream.
This patch addresses a COMPARE_AND_WRITE se_device->caw_sem leak, that would be triggered during normal se_cmd shutdown or abort via __transport_wait_for_tasks().
This would occur because target_complete_cmd() would catch this early and do complete_all(&cmd->t_transport_stop_comp), but since target_complete_ok_work() or target_complete_failure_work() are never called to invoke se_cmd->transport_complete_callback(), the COMPARE_AND_WRITE specific callbacks never release caw_sem.
To address this special case, go ahead and release caw_sem directly from target_complete_cmd().
(Remove '&& success' from check, to release caw_sem regardless
of scsi_status - nab)
--- drivers/target/target_core_transport.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/target/target_core_transport.c +9 -0
@@ -753,6 +753,15 @@ void target_complete_cmd(struct se_cmd *if (cmd->transport_state &CMD_T_ABORTED || cmd->transport_state &CMD_T_STOP ) {spin_unlock_irqrestore (&cmd->t_state_lock, flags); +/* +* If COMPARE_AND_WRITE was stopped by __transport_wait_for_tasks(), +* release se_device->caw_sem obtained by sbc_compare_and_write() +* since target_complete_ok_work() or target_complete_failure_work() +* won't be called to invoke the normal CAW completion callbacks. +*/ +if (cmd->se_cmd_flags &SCF_COMPARE_AND_WRITE ) { +up (&dev->caw_sem); + }complete_all (&cmd->t_transport_stop_comp);return ; }else if (!success) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/target-fix-compare_and_write-caw_sem-leak-during-se_cmd-quiesce.patch