Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1131671ybt; Tue, 7 Jul 2020 08:27:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzIxlwU67oZCaDs4y77FSC7rcP6+iz5PEKaGVrXk+Mqi43kjMOsKXENcXL1l94L/WZXVNF3 X-Received: by 2002:a17:906:ecf4:: with SMTP id qt20mr5386545ejb.485.1594135660270; Tue, 07 Jul 2020 08:27:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594135660; cv=none; d=google.com; s=arc-20160816; b=unmOxYRVsgNIMfcpXuPOja9cB74uYYMksfPAKMfscHwIYAzoPUO+rNXbzacCWx6Y8f nl5xqqrq8pXoE1H7CuEXsCUwaddOazsfWkw+61U/ykK39M82Z+uP/16gLLTjkDvCe9hw JT5fRTDVGPtDqmY/cya3/BZgC1sKz6AgHXPrmwe27s/5pfo235tVRR4et21AxrVTNK/y LMX/femEbLwnC7FD4wBFGCC1Y7r/KsB4YRZpsBYa6IBTSkt7nJSSFZHs7sym+oqEVG7o HLcXPrA+UcjfMkJdDH8yiZdD7sub+z96+OZQApHZiNWyyaY6q7YP0ks+M++oHGn2kcLO mCCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pLcEVytdO26VBuR08Zgy+AZ6nxXCjjhzAJoEA9VroQA=; b=gAw7e8kkpWCd5WUJJBCEnQrLHcYo/wF2jZ3VZZCSlEFYxmudhy/cDkJIE01d1pJw7b bpMboOLY4rhxKPQrXLDCoRH+e0N14UI8ICtx37OXbLpP/bkwnf/RxcveOJWJqn72pYEI mWBBRVq/zvXFkEAzlK/JCMCOrj5NFtmJkEYtt/yvaNnO9lgBWudqch88a+FYsWrW0ddQ g8R7m0CSynitgHVewxwmyU+KVe7bqtpz5u+22MXTNovmAXca33ci2kOMWUNbGftShtJl WYE1BUrMrPiHm4QuiZDLTLhUxu26sqmTfD+z5lMaKdPVaRsfUIfvEm/SKrjH0/316uhJ dfgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=s6swsNK9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sd17si15077368ejb.306.2020.07.07.08.27.17; Tue, 07 Jul 2020 08:27:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=s6swsNK9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730280AbgGGP03 (ORCPT + 99 others); Tue, 7 Jul 2020 11:26:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:40636 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730270AbgGGP0W (ORCPT ); Tue, 7 Jul 2020 11:26:22 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 500C02078D; Tue, 7 Jul 2020 15:26:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594135581; bh=ISNzpa7ny7l40jBlFAU0uG+mNebx2zp/Zz4x0X73iKQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s6swsNK9Y8CVrBSl90XS0UkOjyRK435JKytFrFML0u4LirvlMZjCO1WmEjW9jTkkQ Zy1c2wZdZEktLsJQzuYQ+n8YoCXTIeqrv2t/XkNFLadFPuwKxCyxMZwihCmYl46qj4 0sQIP6YulB0YhXxcO6wuv22nRM9Txy9sJjm5tt0Q= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bob Peterson , Andreas Gruenbacher Subject: [PATCH 5.7 098/112] gfs2: fix trans slab error when withdraw occurs inside log_flush Date: Tue, 7 Jul 2020 17:17:43 +0200 Message-Id: <20200707145805.638478632@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200707145800.925304888@linuxfoundation.org> References: <20200707145800.925304888@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bob Peterson commit 58e08e8d83ab03a1ca25d53420bd0b87f2dfe458 upstream. Log flush operations (gfs2_log_flush()) can target a specific transaction. But if the function encounters errors (e.g. io errors) and withdraws, the transaction was only freed it if was queued to one of the ail lists. If the withdraw occurred before the transaction was queued to the ail1 list, function ail_drain never freed it. The result was: BUG gfs2_trans: Objects remaining in gfs2_trans on __kmem_cache_shutdown() This patch makes log_flush() add the targeted transaction to the ail1 list so that function ail_drain() will find and free it properly. Cc: stable@vger.kernel.org # v5.7+ Signed-off-by: Bob Peterson Signed-off-by: Andreas Gruenbacher Signed-off-by: Greg Kroah-Hartman --- fs/gfs2/log.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c @@ -987,6 +987,16 @@ void gfs2_log_flush(struct gfs2_sbd *sdp out: if (gfs2_withdrawn(sdp)) { + /** + * If the tr_list is empty, we're withdrawing during a log + * flush that targets a transaction, but the transaction was + * never queued onto any of the ail lists. Here we add it to + * ail1 just so that ail_drain() will find and free it. + */ + spin_lock(&sdp->sd_ail_lock); + if (tr && list_empty(&tr->tr_list)) + list_add(&tr->tr_list, &sdp->sd_ail1_list); + spin_unlock(&sdp->sd_ail_lock); ail_drain(sdp); /* frees all transactions */ tr = NULL; }