From: Steve French Date: Fri, 12 Nov 2021 15:55:03 +0000 (-0600) Subject: cifs: release lock earlier in dequeue_mid error case X-Git-Tag: v5.16-rc1~19^2~8 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=9e7ffa77b26a8a00a12b6631aa13f161d9900b0c;p=linux-block.git cifs: release lock earlier in dequeue_mid error case In dequeue_mid we can log an error while holding a spinlock, GlobalMid_Lock. Coverity notes that the error logging also grabs a lock so it is cleaner (and a bit safer) to release the GlobalMid_Lock before logging the warning. Addresses-Coverity: 1507573 ("Thread deadlock") Reviewed-by: Paulo Alcantara (SUSE) Signed-off-by: Steve French --- diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index df3365958603..ae21dff02f30 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -709,13 +709,14 @@ dequeue_mid(struct mid_q_entry *mid, bool malformed) * Trying to handle/dequeue a mid after the send_recv() * function has finished processing it is a bug. */ - if (mid->mid_flags & MID_DELETED) + if (mid->mid_flags & MID_DELETED) { + spin_unlock(&GlobalMid_Lock); pr_warn_once("trying to dequeue a deleted mid\n"); - else { + } else { list_del_init(&mid->qhead); mid->mid_flags |= MID_DELETED; + spin_unlock(&GlobalMid_Lock); } - spin_unlock(&GlobalMid_Lock); } static unsigned int