Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2261618imm; Thu, 7 Jun 2018 07:53:11 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJJBHpiJiXCONDNQjdLxH7ekvhfw699A0dKn1RyMOzjD/9IW4zf4rVp+h4b30HHCQ+R45Zf X-Received: by 2002:a63:9a52:: with SMTP id e18-v6mr1860121pgo.188.1528383191135; Thu, 07 Jun 2018 07:53:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528383191; cv=none; d=google.com; s=arc-20160816; b=BHqq7EXjLJ8F5chkkjfrWxM3nswXNctNtjroA1KSXFLEFUwq8le0YuFdJW2tptvZce tcfPMD10fBqOg9QFQDB2yxRwutOAnpHlijVWZMHvFc+dzy37SlW/LPvHdzwi6JAvAj89 uH2jV2p5yvtLsieAy4l3GG+HjEvfD+jOUAOxyyQyNunmTGaRHQ+v6pwsbpdRpyTmkqbO xbnwIjkHKLI2UXSE5FfxXmS5plAjUaeApG179zx9duSvj0z1I40ATQK3+SAxHLuwANZL HQrV/gljKdwD1ahVCh6AO0z7JJphpYG4KNlHf+bzqQBV0lfY1GlQpyYWOIOGhSFkVn5A AV8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:subject:message-id:date:cc:to :from:mime-version:content-transfer-encoding:content-disposition :arc-authentication-results; bh=brUmCWXlpYLhi15ZwutGoHeEJFvqFpEZM2nhSUttom4=; b=Oo05/wYpZXp71kM9mravfYdiOW0jeDhu4bq3dMC+fOurvyr9K5C26Fub+ql41HFD3g 2ZNF4n3TDKqLwiEkv3iRhYJ0+cXSxfBnz30QFd8zbz2aaB0rvyog71mvX34SJ/EHgOEV Heze05eao+Bxj8aGV8uZnXwyIZCh5Di3hWrFnrpHzfAqdjhX2tedD00Z8iP+WJAJjyGo Bfdc+guYLkfxoesIFuWmtWEgatf0Lq42kjAxh99NQDBc1WiVVfzkwfxORNWmjSicmqaz +nz3lPO06lIm0fO6UAwhiwA1lXaciP06pJ7DdRyt8IlZql/gEQT/+wXvsFvti8i3I0hO IywQ== ARC-Authentication-Results: i=1; mx.google.com; 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 y10-v6si2679843pgq.54.2018.06.07.07.52.56; Thu, 07 Jun 2018 07:53:11 -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; 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 S935105AbeFGOvz (ORCPT + 99 others); Thu, 7 Jun 2018 10:51:55 -0400 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:40760 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934148AbeFGOqP (ORCPT ); Thu, 7 Jun 2018 10:46:15 -0400 Received: from [148.252.241.226] (helo=deadeye) by shadbolt.decadent.org.uk with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1fQvbj-0005Zp-9L; Thu, 07 Jun 2018 15:09:43 +0100 Received: from ben by deadeye with local (Exim 4.91) (envelope-from ) id 1fQvb5-0002yQ-8E; Thu, 07 Jun 2018 15:09:03 +0100 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, "David Sterba" , "Josef Bacik" , "Liu Bo" Date: Thu, 07 Jun 2018 15:05:21 +0100 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) Subject: [PATCH 3.16 187/410] Btrfs: fix crash due to not cleaning up tree log block's dirty bits In-Reply-To: X-SA-Exim-Connect-IP: 148.252.241.226 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.57-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Liu Bo commit 1846430c24d66e85cc58286b3319c82cd54debb2 upstream. In cases that the whole fs flips into readonly status due to failures in critical sections, then log tree's blocks are still dirty, and this leads to a crash during umount time, the crash is about use-after-free, umount -> close_ctree -> stop workers -> iput(btree_inode) -> iput_final -> write_inode_now -> ... -> queue job on stop'd workers Fixes: 681ae50917df ("Btrfs: cleanup reserved space when freeing tree log on error") Signed-off-by: Liu Bo Reviewed-by: Josef Bacik Signed-off-by: David Sterba Signed-off-by: Ben Hutchings --- fs/btrfs/tree-log.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -2197,6 +2197,9 @@ static noinline int walk_down_log_tree(s clean_tree_block(trans, root, next); btrfs_wait_tree_block_writeback(next); btrfs_tree_unlock(next); + } else { + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags)) + clear_extent_buffer_dirty(next); } WARN_ON(root_owner != @@ -2275,6 +2278,9 @@ static noinline int walk_up_log_tree(str clean_tree_block(trans, root, next); btrfs_wait_tree_block_writeback(next); btrfs_tree_unlock(next); + } else { + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags)) + clear_extent_buffer_dirty(next); } WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID); @@ -2351,6 +2357,9 @@ static int walk_log_tree(struct btrfs_tr clean_tree_block(trans, log, next); btrfs_wait_tree_block_writeback(next); btrfs_tree_unlock(next); + } else { + if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags)) + clear_extent_buffer_dirty(next); } WARN_ON(log->root_key.objectid !=