Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2452702imm; Mon, 28 May 2018 08:20:34 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKgTGOezLQF+JnIBMyuEvDDnJaaBcWUIJY2IH/wz/qCzsFHLXXKTAMeXW2ZXHqu7HGPlY0D X-Received: by 2002:a62:d9c5:: with SMTP id b66-v6mr8734008pfl.41.1527520834873; Mon, 28 May 2018 08:20:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527520834; cv=none; d=google.com; s=arc-20160816; b=JoSRF3CCy9vgzVv/wuXa4htFCXBn9VK670uUixbinRnl16fbB3tSk+EhSQcLQsL2FQ Oq7IWOem13LfIeB77uBcZezdWio1bO6fAeocL9NQl8hVmDb6nwycuFWQ5ubAKczYwxC0 3LqYkkekfKr6jRjtNseoLk1S8l3QULQnxPJXsA3ghMEIdCAa62T2fgubxXaN+YQXfASM rk+rv9fTr8mstdb53i5mpcdJF46jFLDc7lviKKGfFMXSdfwiN+naoxDPkOVsEuB9lslp qEcTuQr0/u2kWjdL0gbijzbUopdE6cGmk+6KTuGuPG+grCaaegOJ9VNm/40nV0KD9USZ VWlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=3PNFU6Ez8iUm2WpMwVL83XeQ+O4/AVhFfJPBetcRAU8=; b=uOqPF2ODoKiiZuLg02kNYfQyO+X5X5y8HhJqveXShRl/66tviIT/kQ9PC/2QRtxlyD jqsOy0yHx4xXEKRRUYZKCW+QT1WOmmOYm4qhQkrY+cn+1qg1/C4rXwqy3ySchKrk/JKx 6gVIHgeIu2LeAa5BOSj2EK4sKmut/b1OaDkOYpkpaEKot1nawV1sO9jx/smclQ4xWluJ v9DSoGb4t6tRxsYwAlLVdbN5JRnkF2YWbDhH2jdBtQksyag048jpJqolqrjQFWHEsT6I o31QM077gJAvA2sCyCKxaiYG0mfiZcA8eO7xCRcOFG387UGE3aso+Jmcp8WD2E3+LElq Zc1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TcVUhSr5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p7-v6si23233710pgd.96.2018.05.28.08.20.19; Mon, 28 May 2018 08:20:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TcVUhSr5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1033407AbeE1KVz (ORCPT + 99 others); Mon, 28 May 2018 06:21:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:41258 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033391AbeE1KVs (ORCPT ); Mon, 28 May 2018 06:21:48 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A8E9820843; Mon, 28 May 2018 10:21:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527502907; bh=0XM78rTnTrmTJ3TSJ1pqG40C7LRLqOa/Asrz3AlET4k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TcVUhSr5XhNxLPUG/zMp0UTN97GhM6ktPBo9EiU/XX95Xdgn07jknHtb59iJr2ISV UecLOkjbzTmhOYrrHVmf2O86EqCl/rSqhMtLlEe173S95fuXoUeOexfYwBBFHpJy3W U10rrGMPdQF5ecB3AvY0DXDZCA40K6Lct4bKsZwk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jun Piao , Yiwen Jiang , Joseph Qi , Changwei Ge , Mark Fasheh , Joel Becker , Junxiao Bi , Andrew Morton , Linus Torvalds , Sasha Levin Subject: [PATCH 4.4 172/268] ocfs2/dlm: dont handle migrate lockres if already in shutdown Date: Mon, 28 May 2018 12:02:26 +0200 Message-Id: <20180528100221.879663710@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100202.045206534@linuxfoundation.org> References: <20180528100202.045206534@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jun Piao [ Upstream commit bb34f24c7d2c98d0c81838a7700e6068325b17a0 ] We should not handle migrate lockres if we are already in 'DLM_CTXT_IN_SHUTDOWN', as that will cause lockres remains after leaving dlm domain. At last other nodes will get stuck into infinite loop when requsting lock from us. The problem is caused by concurrency umount between nodes. Before receiveing N1's DLM_BEGIN_EXIT_DOMAIN_MSG, N2 has picked up N1 as the migrate target. So N2 will continue sending lockres to N1 even though N1 has left domain. N1 N2 (owner) touch file access the file, and get pr lock begin leave domain and pick up N1 as new owner begin leave domain and migrate all lockres done begin migrate lockres to N1 end leave domain, but the lockres left unexpectedly, because migrate task has passed [piaojun@huawei.com: v3] Link: http://lkml.kernel.org/r/5A9CBD19.5020107@huawei.com Link: http://lkml.kernel.org/r/5A99F028.2090902@huawei.com Signed-off-by: Jun Piao Reviewed-by: Yiwen Jiang Reviewed-by: Joseph Qi Reviewed-by: Changwei Ge Cc: Mark Fasheh Cc: Joel Becker Cc: Junxiao Bi Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- fs/ocfs2/dlm/dlmdomain.c | 14 -------------- fs/ocfs2/dlm/dlmdomain.h | 25 ++++++++++++++++++++++++- fs/ocfs2/dlm/dlmrecovery.c | 9 +++++++++ 3 files changed, 33 insertions(+), 15 deletions(-) --- a/fs/ocfs2/dlm/dlmdomain.c +++ b/fs/ocfs2/dlm/dlmdomain.c @@ -674,20 +674,6 @@ static void dlm_leave_domain(struct dlm_ spin_unlock(&dlm->spinlock); } -int dlm_shutting_down(struct dlm_ctxt *dlm) -{ - int ret = 0; - - spin_lock(&dlm_domain_lock); - - if (dlm->dlm_state == DLM_CTXT_IN_SHUTDOWN) - ret = 1; - - spin_unlock(&dlm_domain_lock); - - return ret; -} - void dlm_unregister_domain(struct dlm_ctxt *dlm) { int leave = 0; --- a/fs/ocfs2/dlm/dlmdomain.h +++ b/fs/ocfs2/dlm/dlmdomain.h @@ -28,7 +28,30 @@ extern spinlock_t dlm_domain_lock; extern struct list_head dlm_domains; -int dlm_shutting_down(struct dlm_ctxt *dlm); +static inline int dlm_joined(struct dlm_ctxt *dlm) +{ + int ret = 0; + + spin_lock(&dlm_domain_lock); + if (dlm->dlm_state == DLM_CTXT_JOINED) + ret = 1; + spin_unlock(&dlm_domain_lock); + + return ret; +} + +static inline int dlm_shutting_down(struct dlm_ctxt *dlm) +{ + int ret = 0; + + spin_lock(&dlm_domain_lock); + if (dlm->dlm_state == DLM_CTXT_IN_SHUTDOWN) + ret = 1; + spin_unlock(&dlm_domain_lock); + + return ret; +} + void dlm_fire_domain_eviction_callbacks(struct dlm_ctxt *dlm, int node_num); --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c @@ -1377,6 +1377,15 @@ int dlm_mig_lockres_handler(struct o2net if (!dlm_grab(dlm)) return -EINVAL; + if (!dlm_joined(dlm)) { + mlog(ML_ERROR, "Domain %s not joined! " + "lockres %.*s, master %u\n", + dlm->name, mres->lockname_len, + mres->lockname, mres->master); + dlm_put(dlm); + return -EINVAL; + } + BUG_ON(!(mres->flags & (DLM_MRES_RECOVERY|DLM_MRES_MIGRATION))); real_master = mres->master;