Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp2540277ioo; Mon, 23 May 2022 23:27:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2gYwNSxTvIea4PDHTyjW6rmiuN/XOmZfoLmdO878o52yOSkXXMCDhFp0FNwvSdZNEn1DF X-Received: by 2002:a17:90a:6e08:b0:1df:8df2:5f09 with SMTP id b8-20020a17090a6e0800b001df8df25f09mr3043543pjk.216.1653373678164; Mon, 23 May 2022 23:27:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653373678; cv=none; d=google.com; s=arc-20160816; b=glHNwrLmUL8V7cUK3GnXV+dKL+ZaUFSCMLJMITnURAsbmRyouCj+FwGm52qzn2KNNP GOiNvDQoU+5zCwCgfVjOiEmxL5WoFr1KxLI8qd2qT1cqoGjlu6ROm4G7WZKZKx30tz5z mhKI+q0cES2pYPt9ljQLohN1ymlSiUWiQyRaaRABLgukrj0lkgr02fzeRbvMhBqu9+Bd qH+jnAPiKDAg0q1khE5/9ek21se40/4BfSWwoV0Ey+CRxH5UW5DQLBv0VzYydWga9ou2 ZdSormscrKKDS0KRYgNjTU/6qMcSYXblGLuqrzr+7PYRPFQ+iQ72jrxMaxRgUPMD+ANN zBbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=oQkOSTrOE0hw6GlEh3j080MXLzCg+0WG/4Uv02/Tgr0=; b=zWRDFv+plBBwXTDtLTcNZIJh1wdfFm/GgHVbH06ubB+AZOWQe9OiIhrMtrqij19lMi BmwHYbQMe9JNnn9hI/sZdJRMTgDaA6PD7zbcQG0ZLbxzXhWVC/qdXSib9eLS9xHN2h4J r4eFAkm1BPDilEoA6rucZoB/YquWahP9k0Aexort2XqtQpyj9Uxav7m31PCGBJPcnVWt 5LkScLVoPYZcAuXe/MDyFhOyRacBFxTRwZytxiTI22eezrgtiJwVFtxzGGw+ueJphavF QnkuicrYKwWTQJWtE3y/0CFL4hFO1XwkjgiSheT/LbNjotgv7YM/ZjpeeMW7buM+f5hG Iflw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w2-20020a170902a70200b0016157654cf4si12185146plq.227.2022.05.23.23.27.45; Mon, 23 May 2022 23:27:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234503AbiEXEtN (ORCPT + 99 others); Tue, 24 May 2022 00:49:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232834AbiEXEtM (ORCPT ); Tue, 24 May 2022 00:49:12 -0400 Received: from zg8tmtyylji0my4xnjqumte4.icoremail.net (zg8tmtyylji0my4xnjqumte4.icoremail.net [162.243.164.118]) by lindbergh.monkeyblade.net (Postfix) with SMTP id 4535962215 for ; Mon, 23 May 2022 21:49:09 -0700 (PDT) Received: from ubuntu.localdomain (unknown [124.236.130.193]) by mail-app3 (Coremail) with SMTP id cC_KCgDX36OqY4xig7u_AA--.14600S2; Tue, 24 May 2022 12:48:55 +0800 (CST) From: Duoming Zhou To: linux-mtd@lists.infradead.org Cc: miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, linux-kernel@vger.kernel.org, Duoming Zhou Subject: [PATCH] mtd: Fix deadlock caused by cancel_work_sync in sm_release Date: Tue, 24 May 2022 12:48:41 +0800 Message-Id: <20220524044841.10517-1-duoming@zju.edu.cn> X-Mailer: git-send-email 2.17.1 X-CM-TRANSID: cC_KCgDX36OqY4xig7u_AA--.14600S2 X-Coremail-Antispam: 1UD129KBjvJXoW7ZFW5XrWkWFy8Zr1DZw1DZFb_yoW8Jw1Dpr WrCry8JFW8Ar4DJ34DKa13ZF4ru34kKFW7Kr1UK3W5ZrZ5XFnIg345KFyFgFWfGFy8A39I vFs2grW5ZF1rZw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkq14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lc2xSY4AK67AK6r45 MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr 0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0E wIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJV W8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAI cVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUjX4S5UUUUU== X-CM-SenderInfo: qssqjiasttq6lmxovvfxof0/1tbiAgQAAVZdtZ1wIAAZst X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is a deadlock between sm_release and sm_cache_flush_work which is a work item. The cancel_work_sync in sm_release will not return until sm_cache_flush_work is finished. If we hold mutex_lock and use cancel_work_sync to wait the work item to finish, the work item also requires mutex_lock. As a result, the sm_release will be blocked forever. The race condition is shown below: (Thread 1) | (Thread 2) sm_release | mutex_lock(&ftl->mutex) | sm_cache_flush_work | mutex_lock(&ftl->mutex) cancel_work_sync | ... This patch moves del_timer_sync and cancel_work_sync out of mutex_lock in order to mitigate deadlock. Fixes: 7d17c02a01a1 ("mtd: Add new SmartMedia/xD FTL") Signed-off-by: Duoming Zhou --- drivers/mtd/sm_ftl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c index 0cff2cda1b5..7f955fade83 100644 --- a/drivers/mtd/sm_ftl.c +++ b/drivers/mtd/sm_ftl.c @@ -1111,9 +1111,9 @@ static void sm_release(struct mtd_blktrans_dev *dev) { struct sm_ftl *ftl = dev->priv; - mutex_lock(&ftl->mutex); del_timer_sync(&ftl->timer); cancel_work_sync(&ftl->flush_work); + mutex_lock(&ftl->mutex); sm_cache_flush(ftl); mutex_unlock(&ftl->mutex); } -- 2.17.1