From patchwork Fri Dec 6 14:37:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276557 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AF28B139A for ; Fri, 6 Dec 2019 14:37:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8DF8E24673 for ; Fri, 6 Dec 2019 14:37:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="ao6vMuKc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726386AbfLFOhZ (ORCPT ); Fri, 6 Dec 2019 09:37:25 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:33842 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726256AbfLFOhY (ORCPT ); Fri, 6 Dec 2019 09:37:24 -0500 Received: by mail-qt1-f194.google.com with SMTP id 5so7362470qtz.1 for ; Fri, 06 Dec 2019 06:37:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=zDFN2zKwXeVtsdPwXg0XMsqbZs7OxQin/tviYZXQ9os=; b=ao6vMuKcj7d1ANlsQInpJ98BC2VO+JOmVW6Teb+lAXUp9s/8tmlg5i0D0EaLaXS/pG 4Q9PqC4VCh//oEWznGfSOYiNdka7hryhwqOcwej7TjFfnkq8O1Xnj1RVOkVU2fmA3DmL n7zYyfG15gN+6frxABcJi1CjXvigOLYdoPmw47K3HvyygxZVvcxzgeTDAkiaj+w6Q0Mt 3RcTe3f/KoHViGh97RYpVG5OJ+oNOtfjcQbv8OARqWv/4F2Dwk/yEeZz6/luzzm9Ya6V vLqPKe4WrwPgAv4n8JTcQG59Hs9YfwAm+5AlhByO0u5yJV0XaWftUsHryIBXgdCmJWJv TM9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zDFN2zKwXeVtsdPwXg0XMsqbZs7OxQin/tviYZXQ9os=; b=eU0b1BB1026avBLjKVRWrJo+QrDRJIO9FkaZYH/+BomiFLUCTVr9KSItZV58jpsIgv 3/Ewv+Wp6Suxom6I/xTgxRwn1ZWDJHM95wRqhkIPXxMHkw2+XIvkXKZa1Bi0z3B7jrY5 qgdKk52EsIi9jgrt4JSVGA33u9/+MJnOFE/Jnw3o48AKoi5OtLSnum7BSuafEtkGn8lf C9jRRCPmgsEI0UsfrxjuW9wl4WNXhN35gZX8gcSKr/GBJr1chOTm1FB8xZk96DywaE0g ZxOKpz1pMXBwLdTkRZ4EuHmhUIKteBMdd/01xCL3doSiqyWyZyxGvJUPYmolVCWORRXz cQ/A== X-Gm-Message-State: APjAAAWPLFDSWPpX8+EU8H3KvAZpwcBeKbqr7NNdM+/hHQJ5IE8A3XK+ hIlP3+RkyKBldbyrl20xIqKqpeO7NGg9WQ== X-Google-Smtp-Source: APXvYqzRNS3o+ou6bcQugLQJGAwHFT6lJuiTAbarRT0YKxmTq9VJb8tSU/dUqYcVeFkCBw42wJkJsA== X-Received: by 2002:ac8:614a:: with SMTP id d10mr12761117qtm.373.1575643043438; Fri, 06 Dec 2019 06:37:23 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id 50sm6391259qtv.88.2019.12.06.06.37.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:37:22 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 1/5] btrfs: drop log root for dropped roots Date: Fri, 6 Dec 2019 09:37:14 -0500 Message-Id: <20191206143718.167998-2-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206143718.167998-1-josef@toxicpanda.com> References: <20191206143718.167998-1-josef@toxicpanda.com> MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we fsync on a subvolume and create a log root for that volume, and then later delete that subvolume we'll never clean up its log root. Fix this by making switch_commit_roots free the log for any dropped roots we encounter. Signed-off-by: Josef Bacik Reviewed-by: Filipe Manana --- fs/btrfs/transaction.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index cfc08ef9b876..55d8fd68775a 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -147,13 +147,14 @@ void btrfs_put_transaction(struct btrfs_transaction *transaction) } } -static noinline void switch_commit_roots(struct btrfs_transaction *trans) +static noinline void switch_commit_roots(struct btrfs_trans_handle *trans) { + struct btrfs_transaction *cur_trans = trans->transaction; struct btrfs_fs_info *fs_info = trans->fs_info; struct btrfs_root *root, *tmp; down_write(&fs_info->commit_root_sem); - list_for_each_entry_safe(root, tmp, &trans->switch_commits, + list_for_each_entry_safe(root, tmp, &cur_trans->switch_commits, dirty_list) { list_del_init(&root->dirty_list); free_extent_buffer(root->commit_root); @@ -165,16 +166,17 @@ static noinline void switch_commit_roots(struct btrfs_transaction *trans) } /* We can free old roots now. */ - spin_lock(&trans->dropped_roots_lock); - while (!list_empty(&trans->dropped_roots)) { - root = list_first_entry(&trans->dropped_roots, + spin_lock(&cur_trans->dropped_roots_lock); + while (!list_empty(&cur_trans->dropped_roots)) { + root = list_first_entry(&cur_trans->dropped_roots, struct btrfs_root, root_list); list_del_init(&root->root_list); - spin_unlock(&trans->dropped_roots_lock); + spin_unlock(&cur_trans->dropped_roots_lock); + btrfs_free_log(trans, root); btrfs_drop_and_free_fs_root(fs_info, root); - spin_lock(&trans->dropped_roots_lock); + spin_lock(&cur_trans->dropped_roots_lock); } - spin_unlock(&trans->dropped_roots_lock); + spin_unlock(&cur_trans->dropped_roots_lock); up_write(&fs_info->commit_root_sem); } @@ -1421,7 +1423,7 @@ static int qgroup_account_snapshot(struct btrfs_trans_handle *trans, ret = commit_cowonly_roots(trans); if (ret) goto out; - switch_commit_roots(trans->transaction); + switch_commit_roots(trans); ret = btrfs_write_and_wait_transaction(trans); if (ret) btrfs_handle_fs_error(fs_info, ret, @@ -2301,7 +2303,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) list_add_tail(&fs_info->chunk_root->dirty_list, &cur_trans->switch_commits); - switch_commit_roots(cur_trans); + switch_commit_roots(trans); ASSERT(list_empty(&cur_trans->dirty_bgs)); ASSERT(list_empty(&cur_trans->io_bgs)); From patchwork Fri Dec 6 14:37:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276559 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 60513139A for ; Fri, 6 Dec 2019 14:37:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3EEB224673 for ; Fri, 6 Dec 2019 14:37:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="xLixmouU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726400AbfLFOh1 (ORCPT ); Fri, 6 Dec 2019 09:37:27 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:33054 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726256AbfLFOh0 (ORCPT ); Fri, 6 Dec 2019 09:37:26 -0500 Received: by mail-qk1-f196.google.com with SMTP id c124so6681728qkg.0 for ; Fri, 06 Dec 2019 06:37:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HxHuv0PZ9eZrYr0EmgG8kKcUxMyKn/q2A73WhZ6BK1Q=; b=xLixmouUpo948cJINiO80zMBgKzJjSJYgfuVD/GA+fhPoemdxkj3dg8DPPbsTBOixW Si668Hl6sm5i4QzgirkqjtvtCpWpEK0HBBT9FVMifeYswZv/gNR0BcZ7Rr7ceDI6DpRS oUWjdxqaS1/iIg+ZlEX6W3QLuKkEXOF1+7gIQdBbj0DTpTrG11BHenXypaTEjZxP+K4s wNi6AmsUUvB7e6GbAcoqosNDEhPAF3CnCg3oLxyR3qTJS3/EW95UWXKTGN5TtKNKuUWL OXp4JflwBEh09fBD9OiD9/mTYad8TL6/mMvpzXCcuShF3bJwVxFo0QqaSCmp3KIz5KpX lgEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HxHuv0PZ9eZrYr0EmgG8kKcUxMyKn/q2A73WhZ6BK1Q=; b=QuAAR6cP4b+OeXcq5I4ykyQgAIYDzAr2Ca4BQTt7QX0ymPNIf6SUDwDdEz8akU0A2+ WWctAMWuy+J9G7P7HPbxGQgwii8qlWEFhNdLPDF0eTFkB7L6qLXuP0VO6DrY3F8tOUPf KRKGuQ3cPJ3x9332kMo580CL2wsqjlt7/XUQGEMy6rKsG39vbTfITs2kJJ6oaHTwA7lv mtA9O/55AbjRsUby67kqFcrp61XyKZAX5FYkiRxBQAOMszLll7G3Aj2bUdsi9w4tEgJD 8yRHPVVFlZu8swOkCtWAs143tIRbA1p8MbjTRq2PiL+FzpvHQngeD1KXoliZg/OLiBPz gzeQ== X-Gm-Message-State: APjAAAUxTnNS8Ujp3gaw4bMYrp+f9Elu6X0veN0mTzgjdaTX9zurBtxQ TojsteT5iSFIrlYNi98MrOZ9EtbibD3xMA== X-Google-Smtp-Source: APXvYqxNbv5/KP6flx1/yPMxSL1ppERfZnDUh+AbzWlmN2j9gprK9wcCwIgQZyjIN84L8matgU7Qcw== X-Received: by 2002:a05:620a:13c4:: with SMTP id g4mr14076247qkl.305.1575643045201; Fri, 06 Dec 2019 06:37:25 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id s2sm5889204qke.113.2019.12.06.06.37.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:37:24 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 2/5] btrfs: don't BUG_ON in create_subvol Date: Fri, 6 Dec 2019 09:37:15 -0500 Message-Id: <20191206143718.167998-3-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206143718.167998-1-josef@toxicpanda.com> References: <20191206143718.167998-1-josef@toxicpanda.com> MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We can just abort the transaction here, and in fact do that for every other failure in this function except these two cases. Signed-off-by: Josef Bacik Reviewed-by: Filipe Manana Reviewed-by: Johannes Thumshirn --- fs/btrfs/ioctl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index a1ee0b775e65..375befdecc19 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -704,11 +704,17 @@ static noinline int create_subvol(struct inode *dir, btrfs_i_size_write(BTRFS_I(dir), dir->i_size + namelen * 2); ret = btrfs_update_inode(trans, root, dir); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + goto fail; + } ret = btrfs_add_root_ref(trans, objectid, root->root_key.objectid, btrfs_ino(BTRFS_I(dir)), index, name, namelen); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + goto fail; + } ret = btrfs_uuid_tree_add(trans, root_item->uuid, BTRFS_UUID_KEY_SUBVOL, objectid); From patchwork Fri Dec 6 14:37:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276561 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4BC4C14BD for ; Fri, 6 Dec 2019 14:37:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2A30124673 for ; Fri, 6 Dec 2019 14:37:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="UJV1FEW5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726407AbfLFOh3 (ORCPT ); Fri, 6 Dec 2019 09:37:29 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:46312 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726256AbfLFOh2 (ORCPT ); Fri, 6 Dec 2019 09:37:28 -0500 Received: by mail-qt1-f196.google.com with SMTP id 38so7271597qtb.13 for ; Fri, 06 Dec 2019 06:37:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=+4734BTgvOemryDNeGVwvVsStlsreybYIWJyzs2ZW0o=; b=UJV1FEW55/rlcVG5vUyKDRgYMMJUnli0niUVYAogIykbnyFn1r6LzyVdmqBf//kpms hX8xfSrFMHEwE+O5/FwhK6Wd3DuUYUMceGV5KFlqsTLCsp7SMDLDzavJuuYdXPsp99gP n1ZI4IcDFbROFIwDdA8G7P30BjE5uXVEoJQMHGrSmU2D0fbyaXXUL5O7i9ap0SaHqzSU MErigHTXTThu9PUEO4OhqEmxl5w8C1+5+upLUYy0tV+VyfkQj/oiHouMyYV1YM5vjVYs W9KgNpgX3VWqHQ1VGSjEQyjMp6pa45gj4+wQNuORn8Y8M/oEyzCRc6DQGOoqDcVgDClT 3HWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+4734BTgvOemryDNeGVwvVsStlsreybYIWJyzs2ZW0o=; b=skvtZvmFSUEm77Xc9olGkwSQr6E0AqQVbk6FkqMtBXpmla3o3Pu33E6MzUbwC1ur7X Z4Ky2ZThIkfUcCtMhGyzxNwVquIZqsj+2SyjzKfzkNy9UsNIq/Zf3ys+gdUTY2yuMdrV 9hvlOtqGxgfu+dzKpXxA0gy3as3D97K0xX8TrAxY0zzL1oXCe4xzFqS4A6wsZnjuKnvm h6W1hsjA0+274c4o+DAmj6ZeRQGjURwmZzeqNwWPY3N9BcYtjT9Nexwlk+grDffLAo3P i5sGumFMhKYFRryHjVZeyKOczVx+KWKQw9rhT1P0HrzsEB+XuikCtAg8CECzzKy5iEIf Gc0g== X-Gm-Message-State: APjAAAXx/e34j5ebtCBMaU3ohdlDXzcaC//USaeZLrmoBW1/HB5i/7X5 xkXzu6B3n6rYbFv57k3ZEx+dWht5Sc0tpw== X-Google-Smtp-Source: APXvYqzpjO/UrXHETuV5+r3qkHV8g4IxYONcIO84XH/vgfYH5WwCagDJ+dO++goZ3i922CgrVZlZfg== X-Received: by 2002:ac8:195d:: with SMTP id g29mr13032337qtk.65.1575643047255; Fri, 06 Dec 2019 06:37:27 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id e13sm6250345qtr.80.2019.12.06.06.37.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:37:26 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 3/5] btrfs: handle ENOENT in btrfs_uuid_tree_iterate Date: Fri, 6 Dec 2019 09:37:16 -0500 Message-Id: <20191206143718.167998-4-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206143718.167998-1-josef@toxicpanda.com> References: <20191206143718.167998-1-josef@toxicpanda.com> MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we get an -ENOENT back from btrfs_uuid_iter_rem when iterating the uuid tree we'll just continue and do btrfs_next_item(). However we've done a btrfs_release_path() at this point and no longer have a valid path. So increment the key and go back and do a normal search. Signed-off-by: Josef Bacik --- fs/btrfs/uuid-tree.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/uuid-tree.c b/fs/btrfs/uuid-tree.c index 91caab63bdf5..8871e0bb3b69 100644 --- a/fs/btrfs/uuid-tree.c +++ b/fs/btrfs/uuid-tree.c @@ -324,6 +324,8 @@ int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info, } if (ret < 0 && ret != -ENOENT) goto out; + key.objectid++; + goto again_search_slot; } item_size -= sizeof(subid_le); offset += sizeof(subid_le); From patchwork Fri Dec 6 14:37:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276563 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 73EAC14BD for ; Fri, 6 Dec 2019 14:37:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5288B24675 for ; Fri, 6 Dec 2019 14:37:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="OdOmkkXy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726418AbfLFOhb (ORCPT ); Fri, 6 Dec 2019 09:37:31 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:44791 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726256AbfLFOha (ORCPT ); Fri, 6 Dec 2019 09:37:30 -0500 Received: by mail-qk1-f193.google.com with SMTP id i18so6600511qkl.11 for ; Fri, 06 Dec 2019 06:37:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=v+z2SkDbccNVosD6dQOgtBQoLlmbc33cD/hYLUh/w3o=; b=OdOmkkXyFeE8dR7Mmb9iTlxGUdm4D0KoTCuYit2Ili5qNbSr1PVrHcY9wskAGyxJAn ldu9fg0XllpYm6LDL7Duj4XURPzsFTmN+gJekXmz6Vo+GYUd8lUscIk1UQvRz+LfLmu4 +JC7giA7LoC4cYB5heroGOpy+qdUORTu+/3WobGZ1vftldw1qDmvKqN+LFn5470fHmeG b6BXxpOjJGOV26oFJsb6kFrCFEJVTWe0ZGPOAw8BwnkYbRk92b8SzMfGZeji8z6evIhq uhvQHwT6ks7wqO9nhv8GR8OvSZyxVXHt17C/aRo9q3deNrw92SU9bEtKSYbCskonoFT5 KFbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v+z2SkDbccNVosD6dQOgtBQoLlmbc33cD/hYLUh/w3o=; b=fVyTf4K+SgNOiqBH2FTA8MrML9cJuVy1rhiKLuvgLl0dSBqJKr6uEHoUCks4u9yFrg 3GYTlTU9L4igOSfkURa+lGG6slMnsXW1fCpWFuwtHmpwmHXXOjCzkZEhNR9veSyioDVX 87nwLRiA/8fS+yakgofon41ce1TroKD+eE/ZjiIhLOxqjoB2JBQy/QHHSDmXoqCosRZ5 IdU5UuVjsz28SY8yMaYhdNtZMRpv5oOj6BbO7p9v2/rReIikUQLTB2mobQ7t3yt989WF DoSweg4lp1DCpJ4MgME+d9uOWNMxAxNquM84W/HSEAa7u1BUD+zFbtiwXu9/RRowdnsQ X1IQ== X-Gm-Message-State: APjAAAXeEBmB3/FPkilOnCQivavduwMF+Npd/5PlhKggKAmkZJWxqQyM wiTFpN0PUVmXsnLmF03SNwDn5iLQT78+Fg== X-Google-Smtp-Source: APXvYqx1jtBLGVwMpUPHSqMb/QIdoAK9esNkxZReiZhWkQX/1Qa3DxpOTghlfCgZdxZ1K+fcJ9JT3w== X-Received: by 2002:a37:4d45:: with SMTP id a66mr14294252qkb.65.1575643049014; Fri, 06 Dec 2019 06:37:29 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id s27sm4589696qkm.97.2019.12.06.06.37.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:37:28 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 4/5] btrfs: skip log replay on orphaned roots Date: Fri, 6 Dec 2019 09:37:17 -0500 Message-Id: <20191206143718.167998-5-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206143718.167998-1-josef@toxicpanda.com> References: <20191206143718.167998-1-josef@toxicpanda.com> MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org My fsstress modifications coupled with generic/475 uncovered a failure to mount and replay the log if we hit a orphaned root. We do not want to replay the log for an orphan root, but it's completely legitimate to have an orphaned root with a log attached. Fix this by simply skipping replaying the log. We still need to pin it's root node so that we do not overwrite it while replaying other logs, as we re-read the log root at every stage of the replay. Signed-off-by: Josef Bacik Reviewed-by: Filipe Manana --- fs/btrfs/tree-log.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 6f757361db53..4bbb4fd490b5 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6294,9 +6294,28 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) wc.replay_dest = btrfs_read_fs_root_no_name(fs_info, &tmp_key); if (IS_ERR(wc.replay_dest)) { ret = PTR_ERR(wc.replay_dest); + + /* + * We didn't find the subvol, likely because it was + * deleted. This is ok, simply skip this log and go to + * the next one. + * + * We need to exclude the root because we can't have + * other log replays overwriting this log as we'll read + * it back in a few more times. This will keep our + * block from being modified, and we'll just bail for + * each subsequent pass. + */ + if (ret == -ENOENT) + ret = btrfs_pin_extent_for_log_replay(fs_info, + log->node->start, + log->node->len); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); kfree(log); + + if (!ret) + goto next; btrfs_handle_fs_error(fs_info, ret, "Couldn't read target root for tree log recovery."); goto error; @@ -6328,7 +6347,6 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) &root->highest_objectid); } - key.offset = found_key.offset - 1; wc.replay_dest->log_root = NULL; free_extent_buffer(log->node); free_extent_buffer(log->commit_root); @@ -6336,9 +6354,10 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) if (ret) goto error; - +next: if (found_key.offset == 0) break; + key.offset = found_key.offset - 1; } btrfs_release_path(path); From patchwork Fri Dec 6 14:37:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276565 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B00E2139A for ; Fri, 6 Dec 2019 14:37:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8F1F024673 for ; Fri, 6 Dec 2019 14:37:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="NEPDL9XN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726421AbfLFOhc (ORCPT ); Fri, 6 Dec 2019 09:37:32 -0500 Received: from mail-qv1-f68.google.com ([209.85.219.68]:34261 "EHLO mail-qv1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726256AbfLFOhc (ORCPT ); Fri, 6 Dec 2019 09:37:32 -0500 Received: by mail-qv1-f68.google.com with SMTP id o18so2724831qvf.1 for ; Fri, 06 Dec 2019 06:37:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Ldo5fnCi3eBdP6CdyfBFH6O1QFUGoUipCvtg1jMdxMQ=; b=NEPDL9XNfs0jd7sjoofmCXqWp0RtS9v0SfgFm6nTAdtulQzHg5zsoymsojRNNCrncT 8CyATZcDNoTJLWN3680PiGyeYN4vZDs0OYKIq4uMi4TW65raP89yChLT2X58XqTtP+aJ 2LEepYU52Oy1xzoKgyP2E0exNlATYCFwCebwCqGwEBnKIBAP1ElMhJ5X4BJ1Ukq6i6+R xcgqoiWozSap8nf8Qee+SXdpSGTDdGHafgsWln4t48bteLuxPNtw0hk3t5Z4lU0hFZ+M aGcaSWQhpxz/Np2x4ytGfUcCBF3N4NdbUqoqWlY5LuY+5+W43SeIk2g99EHzZOxefpaC cLog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ldo5fnCi3eBdP6CdyfBFH6O1QFUGoUipCvtg1jMdxMQ=; b=nGFFKb0cazvRYBfhMc66gw+WDKSC20uMAs+KshVdvtyQoJfj4wcvubzZF+49+AU5py Svsjz1WESLq3AIyyXixM/SrT+wApaskHPd/dNTnnILxWhapXZEiuy+6LEx0BMvyQhwNE prDywVJqYbcPsZlMKaSfycr3exBauxN5uOZVXTqZcSI+1KFNTfUEFhJML+ViEyupCUHE TAnVr7YJIfdD8oSbrDXpof6dMYl1vOuDReuMfjcUQ8LOG/3VnlbukkeFIJKgpYNRITm7 B/MAEc+QwBKWvDgqi9eKCaXyqcqe1bKH9X+6P0wDVF9+ZLULSKBhRc0naX+G8btTkkEb zOrw== X-Gm-Message-State: APjAAAV1iUCL2suSdsXoIr5QC8CQtJpJJE5LF7HdyrLNdLfoWaaXTKuz aft6JNp6xM47wKJAilLmj96vSoG4+LQj1w== X-Google-Smtp-Source: APXvYqwCsyl1FbC+9rDxlUcY0ILEgTVr47+SrwsCUmu0rHyg+GDkVKtavZe38ylu/khDZb9dyBJP4g== X-Received: by 2002:ad4:5525:: with SMTP id ba5mr12397370qvb.117.1575643050734; Fri, 06 Dec 2019 06:37:30 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v7sm6457110qtk.89.2019.12.06.06.37.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:37:30 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 5/5] btrfs: do not leak reloc root if we fail to read the fs root Date: Fri, 6 Dec 2019 09:37:18 -0500 Message-Id: <20191206143718.167998-6-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206143718.167998-1-josef@toxicpanda.com> References: <20191206143718.167998-1-josef@toxicpanda.com> MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we fail to read the fs root corresponding with a reloc root we'll just break out and free the reloc roots. But we remove our current reloc_root from this list higher up, which means we'll leak this reloc_root. Fix this by adding ourselves back to the reloc_roots list so we are properly cleaned up. Signed-off-by: Josef Bacik Reviewed-by: Filipe Manana Reviewed-by: Johannes Thumshirn --- fs/btrfs/relocation.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index a857fc8271d2..c5fcddad1c15 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4554,6 +4554,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) fs_root = read_fs_root(fs_info, reloc_root->root_key.offset); if (IS_ERR(fs_root)) { err = PTR_ERR(fs_root); + list_add_tail(&reloc_root->root_list, &reloc_roots); goto out_free; }