From patchwork Fri Dec 6 14:44:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276583 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 CFDA213B6 for ; Fri, 6 Dec 2019 14:45:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A481624675 for ; Fri, 6 Dec 2019 14:45:46 +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="FHeufxef" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726278AbfLFOpp (ORCPT ); Fri, 6 Dec 2019 09:45:45 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:44285 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpp (ORCPT ); Fri, 6 Dec 2019 09:45:45 -0500 Received: by mail-qt1-f195.google.com with SMTP id g17so1374428qtp.11 for ; Fri, 06 Dec 2019 06:45:44 -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=xl1J5b4iVgtui8x+f3BoLKOYLCMYZl0W57rvKAE6w2Y=; b=FHeufxeflOGqJvcPwzwflkzmul1rBc+cehSe24m0slRAulUK9fLrHH/y7JfAY6xEwL yHg3fpjHyhg1vF62uiOcz0JqVbSEYpJbEslqH8nw/mIuTwEjV+6E28DVhkAFJAJXRL/9 aBm85mY6hdzjWbsM8SoWGUt+mz7AVXC9E3dAhUbh05UAhaCeAIQXAhfLjM0CYz+7wX1q mRmsm9MWbbER/2Pjp5lTUHNclrA7Xmw/i7OnXMtaD0ruapZCEGza17NeSPfp+mATwMST 5omZye/AsnAhsVz42VgkExV5Rpy49uJXvKIsZuAO8OYTci1IV2+4+vQELYYfNueKJe3f H/UA== 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=xl1J5b4iVgtui8x+f3BoLKOYLCMYZl0W57rvKAE6w2Y=; b=DUyPGu1AVmWo0H9pNeqmbxemudg4SQMNxKcltzG5Tp5lD0tREo7gtMSmsZ28Knn8Wa ITj+UyPlnfbYVlwMDGNPi53UtV5lPHgwL6hndjBDxrLPwGWOv38bVxaAQIG1O0j2rIKP SV7gN9LUfxXmovbQWzDGltNDW7e2afEowHAVKii1TGa7crCYNJAuzOi/7MiViwgiJIbd rrZ3kvnK+ZjCgaSnnDK9vX6McnQdB1ecin7gVWvKyMeU7sL1DG4qzrQYjm4pTuJeWfU6 4xCSzxBnabKDcVJIxqlBKmCMc+9bPFDOsMfav2IjpCFhbt8s78zO3e5lYwT9vk0oywXL wn1Q== X-Gm-Message-State: APjAAAUsxvpTCLLxV6a1/o391qbb5AKYlsVFT/KFniWRSdpvzfJeT1oR pYK1cTPUM5E+0S8/4qzsTY7fxclaun2qjQ== X-Google-Smtp-Source: APXvYqzU7t3s7jiiE0I+1GE4SHPIPVnmaFwzw3XL2rniOSc4IS7Vhq/aCy3CFTXVtZsv4GUhP1dK+A== X-Received: by 2002:ac8:7615:: with SMTP id t21mr12107711qtq.95.1575643543461; Fri, 06 Dec 2019 06:45:43 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id w76sm5982500qkb.8.2019.12.06.06.45.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:42 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 01/44] btrfs: push __setup_root into btrfs_alloc_root Date: Fri, 6 Dec 2019 09:44:55 -0500 Message-Id: <20191206144538.168112-2-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 There's no reason to not init the root at alloc time, and with later patches it actually causes problems if we error out mounting the fs before the tree_root is init'ed because we expect it to have a valid ref count. Fix this by pushing __setup_root into btrfs_alloc_root. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 8783d86f487d..ee0ddd4f45f0 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1132,6 +1132,7 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, u64 objectid) { bool dummy = test_bit(BTRFS_FS_STATE_DUMMY_FS_INFO, &fs_info->fs_state); + root->fs_info = fs_info; root->node = NULL; root->commit_root = NULL; root->state = 0; @@ -1200,11 +1201,11 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, } static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info, - gfp_t flags) + u64 objectid, gfp_t flags) { struct btrfs_root *root = kzalloc(sizeof(*root), flags); if (root) - root->fs_info = fs_info; + __setup_root(root, fs_info, objectid); return root; } @@ -1217,12 +1218,11 @@ struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info) if (!fs_info) return ERR_PTR(-EINVAL); - root = btrfs_alloc_root(fs_info, GFP_KERNEL); + root = btrfs_alloc_root(fs_info, BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL); if (!root) return ERR_PTR(-ENOMEM); /* We don't use the stripesize in selftest, set it as sectorsize */ - __setup_root(root, fs_info, BTRFS_ROOT_TREE_OBJECTID); root->alloc_bytenr = 0; return root; @@ -1246,12 +1246,11 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, * context to avoid deadlock if reclaim happens. */ nofs_flag = memalloc_nofs_save(); - root = btrfs_alloc_root(fs_info, GFP_KERNEL); + root = btrfs_alloc_root(fs_info, objectid, GFP_KERNEL); memalloc_nofs_restore(nofs_flag); if (!root) return ERR_PTR(-ENOMEM); - __setup_root(root, fs_info, objectid); root->root_key.objectid = objectid; root->root_key.type = BTRFS_ROOT_ITEM_KEY; root->root_key.offset = 0; @@ -1311,12 +1310,10 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans, struct btrfs_root *root; struct extent_buffer *leaf; - root = btrfs_alloc_root(fs_info, GFP_NOFS); + root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, GFP_NOFS); if (!root) return ERR_PTR(-ENOMEM); - __setup_root(root, fs_info, BTRFS_TREE_LOG_OBJECTID); - root->root_key.objectid = BTRFS_TREE_LOG_OBJECTID; root->root_key.type = BTRFS_ROOT_ITEM_KEY; root->root_key.offset = BTRFS_TREE_LOG_OBJECTID; @@ -1403,14 +1400,12 @@ static struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, if (!path) return ERR_PTR(-ENOMEM); - root = btrfs_alloc_root(fs_info, GFP_NOFS); + root = btrfs_alloc_root(fs_info, key->objectid, GFP_NOFS); if (!root) { ret = -ENOMEM; goto alloc_fail; } - __setup_root(root, fs_info, key->objectid); - ret = btrfs_find_root(tree_root, key, path, &root->root_item, &root->root_key); if (ret) { @@ -2205,12 +2200,11 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, return -EIO; } - log_tree_root = btrfs_alloc_root(fs_info, GFP_KERNEL); + log_tree_root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, + GFP_KERNEL); if (!log_tree_root) return -ENOMEM; - __setup_root(log_tree_root, fs_info, BTRFS_TREE_LOG_OBJECTID); - log_tree_root->node = read_tree_block(fs_info, bytenr, fs_info->generation + 1, level, NULL); @@ -2642,8 +2636,10 @@ int __cold open_ctree(struct super_block *sb, int clear_free_space_tree = 0; int level; - tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, GFP_KERNEL); - chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, GFP_KERNEL); + tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, + BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL); + chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, + BTRFS_CHUNK_TREE_OBJECTID, GFP_KERNEL); if (!tree_root || !chunk_root) { err = -ENOMEM; goto fail; @@ -2821,8 +2817,6 @@ int __cold open_ctree(struct super_block *sb, goto fail_alloc; } - __setup_root(tree_root, fs_info, BTRFS_ROOT_TREE_OBJECTID); - invalidate_bdev(fs_devices->latest_bdev); /* @@ -3018,8 +3012,6 @@ int __cold open_ctree(struct super_block *sb, generation = btrfs_super_chunk_root_generation(disk_super); level = btrfs_super_chunk_root_level(disk_super); - __setup_root(chunk_root, fs_info, BTRFS_CHUNK_TREE_OBJECTID); - chunk_root->node = read_tree_block(fs_info, btrfs_super_chunk_root(disk_super), generation, level, NULL); From patchwork Fri Dec 6 14:44:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276585 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 C025F138D for ; Fri, 6 Dec 2019 14:45:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9D7A920706 for ; Fri, 6 Dec 2019 14:45:47 +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="i6PqTQnJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726317AbfLFOpr (ORCPT ); Fri, 6 Dec 2019 09:45:47 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:41157 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpq (ORCPT ); Fri, 6 Dec 2019 09:45:46 -0500 Received: by mail-qt1-f194.google.com with SMTP id v2so7332029qtv.8 for ; Fri, 06 Dec 2019 06:45:45 -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=99YzAon65ySDW6BX2ck3WJGLqSl97Oa341j+3cGFBLM=; b=i6PqTQnJnpviviP7ZMO7+MbqA+Ex80oXmuwItzY8DLULqCHM8ziKGfexSm9Qqo1zCS a2MEhKYVd+C8recd7ThVFFNzSso8gY2P+km2aebouQP24fqdN+qeCn2ChvbHuj22+Dv6 qmYibm8XzlEntb02Z9CS+6Ua8fiZU9RleFvpssE7xZ42KWwUkuDqjtz8Pc3Qb78ZkWQ5 njGCqrs7WOMWbIENzw5J1l/x09Q3oBNHrJcDIRZzOly0KcD3CwCWqV8p5k6HwNYXP+B4 yU8x0GuSZ+ieTfc2KjdZHceo7wTzWuXypTJkVb4BQrBnZzMWSOPQhi73jjg/J6nRZMI3 TxPw== 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=99YzAon65ySDW6BX2ck3WJGLqSl97Oa341j+3cGFBLM=; b=e5xMTGJEvh0pPh95hNegFVVdfYihtIQ+lh5k3CPuPw2X/9K96U78DI8LghHg80fwfX Mg8tVgIPtpNY24QHJc+2xs9VHcMwjpfXZOH+SpWqpUsY4fcETDwzhvZ6cFaYF+fSrXS9 EfQN3rBEnAGrlFn9qWqAg7zcNzIOrQe9hOzdEP2fs38KjO2tsWMey1uYj29VqcnjwVGU wm8O78YdcaVE18/IJdpWJ8o8U769lv6NN3DOQQw8nQwTbAxRVeRCTyHOLJd7wovoINlG J9RvGTcAVeXK7OwxeF4H3sL1siW/arrXv6a92YowvwqOh7+0ME6ivEvDExeFZ46EHWmv O+lQ== X-Gm-Message-State: APjAAAXnqcfHhhq09vWJrXfQMKvQD6Gcl0iEBxeA41CGuZ5qcImXw1a3 4926ld9j2Io7AWiTflW5qneRZ4mzMes7Lg== X-Google-Smtp-Source: APXvYqxHkpYXU8eZxXxpQyXeVLPE1mi9btZyPwSG51nAop0PYkAstFMa3ISdwz+j/31UlyhuTynbhw== X-Received: by 2002:ac8:65ce:: with SMTP id t14mr12928995qto.72.1575643545031; Fri, 06 Dec 2019 06:45:45 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id x6sm5982869qkh.20.2019.12.06.06.45.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:44 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 02/44] btrfs: move fs root init stuff into btrfs_init_fs_root Date: Fri, 6 Dec 2019 09:44:56 -0500 Message-Id: <20191206144538.168112-3-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 have a helper for reading fs roots that just reads the fs root off the disk and then sets REF_COWS and init's the inheritable flags. Move this into btrfs_init_fs_root so we can later get rid of this helper and consolidate all of the fs root reading into one helper. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index ee0ddd4f45f0..c65825029553 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1447,12 +1447,6 @@ struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root, root = btrfs_read_tree_root(tree_root, location); if (IS_ERR(root)) return root; - - if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { - set_bit(BTRFS_ROOT_REF_COWS, &root->state); - btrfs_check_and_init_root_item(&root->root_item); - } - return root; } @@ -1476,6 +1470,11 @@ int btrfs_init_fs_root(struct btrfs_root *root) } root->subv_writers = writers; + if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { + set_bit(BTRFS_ROOT_REF_COWS, &root->state); + btrfs_check_and_init_root_item(&root->root_item); + } + btrfs_init_free_ino_ctl(root); spin_lock_init(&root->ino_cache_lock); init_waitqueue_head(&root->ino_cache_wait); From patchwork Fri Dec 6 14:44:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276587 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 6138D138D for ; Fri, 6 Dec 2019 14:45:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3FB0724675 for ; Fri, 6 Dec 2019 14:45:49 +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="oicjLvut" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726328AbfLFOps (ORCPT ); Fri, 6 Dec 2019 09:45:48 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:37736 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOps (ORCPT ); Fri, 6 Dec 2019 09:45:48 -0500 Received: by mail-qk1-f193.google.com with SMTP id m188so6674460qkc.4 for ; Fri, 06 Dec 2019 06:45:47 -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/1MUHQh186WHeONpwvXL7aadzf1MSQfMqeYAqYnwo=; b=oicjLvutTfTcOTBIuN0yrtrIF6RMmSV8vEU0+AOhsxYRxBZsDndmtwYLi6lXQs7NZ8 Q11KUJC0Q0znZVp3IaaKAIS59gggWkIsmzC+dd4cy5m8F7pA50xWLULHcmeoPKAmuFgu as0mmhGkgaCr/U58HPCfJXIjE2hiHYz41LuXNXrazQtfZjyECwk4uInEYZOsDFvtTwcC Jza0Jw66xTDw1n9jdk0pI10SvgzSRxneHzlHfB/BZiP+Km/MdncZxWSeJV85e4tDCQEX wI2hIxmZ4IjMmNDhQqOwwrnmU1+Vas4igUc/iUUlodOwQt6FwxJSEqFoZRSrRqe0HuRV Osyg== 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/1MUHQh186WHeONpwvXL7aadzf1MSQfMqeYAqYnwo=; b=iugBTXyC3sFpTUYxpDoMVkCgNlEX+rBly/XQGbKwL3SbCjSz4AO7oXDRWJdhvCN8QW iKHFTSWsW8PKSpKNluo4pmp9zAQ4Cr1Nuery3lQwgTKAa1ZJYy7izLyOVGXBq8+X8yX3 EQUgCXOSFnTX31RLp5Y9zHBgYIS1jUxf1GNZdNrUp258YXwBmsUWSAh3X8OL7WhaUByJ GiT0VuOGoL5ReNQSt+Lid8g/AgQgW930xSPRQ1zjqkH59weEGsi9p2Rs1HlE/NIGJE7B zAffe9byEseSOYdd+nOQzGT1gK41x9SKkLCU81i3b+3E7PV4aSmv5+RnbH3Jm9CoKKFz 82yg== X-Gm-Message-State: APjAAAXWhZbRoE0uT1+2hjvH97suJRUkOKmRR7cfotw0/D3qXV0RmKcS EHJtUOYDa15uOGOdBtSZz1LGJdUVPB4Jyw== X-Google-Smtp-Source: APXvYqyYFcq2dmhGBEYXmAYuo9KfdKfY+8xAB+dyWW5wpvItwTZmi1pgmLeYoQ4ZA1tRLfESbqxVmg== X-Received: by 2002:a37:aa45:: with SMTP id t66mr13961339qke.218.1575643546745; Fri, 06 Dec 2019 06:45:46 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id m8sm6337480qti.91.2019.12.06.06.45.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:45 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 03/44] btrfs: make btrfs_find_orphan_roots use btrfs_get_fs_root Date: Fri, 6 Dec 2019 09:44:57 -0500 Message-Id: <20191206144538.168112-4-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 btrfs_find_orphan_roots has this weird thing where it looks up the root in cache to see if it is there before just reading the root. But the read it uses just reads the root, it doesn't do any of the init work, we do that by hand here. But this is unnecessary, all we really want is to see if the root still exists and add it to the dead roots list to be cleaned up, otherwise we delete the orphan item. Fix this by just using btrfs_get_fs_root directly with check_ref set to false so we get the orphan root items. Then we just handle in cache and out of cache roots the same, add them to the dead roots list and carry on. Signed-off-by: Josef Bacik --- fs/btrfs/root-tree.c | 37 +++---------------------------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 3b17b647d002..9617dcedf521 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -255,25 +255,7 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) root_key.objectid = key.offset; key.offset++; - /* - * The root might have been inserted already, as before we look - * for orphan roots, log replay might have happened, which - * triggers a transaction commit and qgroup accounting, which - * in turn reads and inserts fs roots while doing backref - * walking. - */ - root = btrfs_lookup_fs_root(fs_info, root_key.objectid); - if (root) { - WARN_ON(!test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, - &root->state)); - if (btrfs_root_refs(&root->root_item) == 0) { - set_bit(BTRFS_ROOT_DEAD_TREE, &root->state); - btrfs_add_dead_root(root); - } - continue; - } - - root = btrfs_read_fs_root(tree_root, &root_key); + root = btrfs_get_fs_root(fs_info, &root_key, false); err = PTR_ERR_OR_ZERO(root); if (err && err != -ENOENT) { break; @@ -300,21 +282,8 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) continue; } - err = btrfs_init_fs_root(root); - if (err) { - btrfs_free_fs_root(root); - break; - } - - set_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state); - - err = btrfs_insert_fs_root(fs_info, root); - if (err) { - BUG_ON(err == -EEXIST); - btrfs_free_fs_root(root); - break; - } - + WARN_ON(!test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, + &root->state)); if (btrfs_root_refs(&root->root_item) == 0) { set_bit(BTRFS_ROOT_DEAD_TREE, &root->state); btrfs_add_dead_root(root); From patchwork Fri Dec 6 14:44:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276589 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 0F1BE138D for ; Fri, 6 Dec 2019 14:45:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E0ABE24675 for ; Fri, 6 Dec 2019 14:45:50 +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="hOStE/40" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726359AbfLFOpu (ORCPT ); Fri, 6 Dec 2019 09:45:50 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:46559 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpt (ORCPT ); Fri, 6 Dec 2019 09:45:49 -0500 Received: by mail-qk1-f194.google.com with SMTP id f5so6611959qkm.13 for ; Fri, 06 Dec 2019 06:45:49 -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=AnrtVS26ct5BFRG9vT41BcI4OdIfQkucKsgxtAfxakQ=; b=hOStE/40E/PSnC5QCXWEfxytxMwjjo8rP6OMP0/aiEoZaAPRL8B9zm+yokGqZSole7 mOZDkd8pk4LrlQOviPXo6dpifeusEfZ01xJI3ScfgEQUMcbamu7PaK3o1d7X3lrtqDS6 6tKHmuuYUzd9UcBp4duSzlXQdSbj8sqOT2oYGoIgwe7lneai2sfKgKWxXWz3MYQqe+e7 co8RLpcV75Uvy/vLzdYCljFG0Plft9lXOtDqcRjJ+7dty/PHCedb6eo6cFAPc+dIscK7 tIR3zOZhXbltS3oxbuKqMjr9U97QJhKv1gi90PF5vMWamU8uKpflBt8F8yEIXyDLgBot aJ4Q== 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=AnrtVS26ct5BFRG9vT41BcI4OdIfQkucKsgxtAfxakQ=; b=Xlxl/OO/LwwP0SOJ76xe2fB4U2huLkfxqTljSTgyD/cIIx/BrUw2dZ8DBpzlhUqce8 bjpE6obWhLfC/dPT7YPEi6OlFutMdUW93ehgN5FchuTi2bk0R7CboeuBXWUrxa8h9ciU +f36XvcjM9MS9lTa5S81NFuot2AuR11Qh0BJ6B/4yfSoCB0lEgY2zxin3rHZkn1psutG M8Ii74HSosMImCShftDfxPB2uGwT2lcXV32It2N1WSYJmDYt7IYMRdTg4OQZl7zooVeH y+V5PHYbNvh44hUNU8LZL77CrYWjyJoxEodwPjfsPNlM62s1SPRt0vhRJnLqf3+SsZ1I ZY5Q== X-Gm-Message-State: APjAAAWAMdDySeO17TZP2D8VlZKLegwGNw8nrjRg0G3ZkTMVyRe2JWvj XbG3jdUBKqQo7y8M9D+tOjMWEwRZ0J6Fwg== X-Google-Smtp-Source: APXvYqyk1ErC1C4gkUFCFKsaugshmA9c2cf0abJEQeXnPaFkj+hEeXTD3qvabDYwMQCBYyMIVI0kfA== X-Received: by 2002:a37:6087:: with SMTP id u129mr13772918qkb.219.1575643548522; Fri, 06 Dec 2019 06:45:48 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y200sm6021807qkb.1.2019.12.06.06.45.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:47 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 04/44] btrfs: export and use btrfs_read_tree_root Date: Fri, 6 Dec 2019 09:44:58 -0500 Message-Id: <20191206144538.168112-5-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 log-tree uses btrfs_read_fs_root to load its log, but this just calls btrfs_read_tree_root. We don't save the log roots in our root cache, so just export this helper and use it in the logging code. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 4 ++-- fs/btrfs/disk-io.h | 2 ++ fs/btrfs/tree-log.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index c65825029553..2b91c40df27a 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1386,8 +1386,8 @@ int btrfs_add_log_tree(struct btrfs_trans_handle *trans, return 0; } -static struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, - struct btrfs_key *key) +struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, + struct btrfs_key *key) { struct btrfs_root *root; struct btrfs_fs_info *fs_info = tree_root->fs_info; diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 76f123ebb292..cb12dd4825da 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -58,6 +58,8 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev); int btrfs_read_dev_one_super(struct block_device *bdev, int copy_num, struct buffer_head **bh_ret); int btrfs_commit_super(struct btrfs_fs_info *fs_info); +struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, + struct btrfs_key *key); struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root, struct btrfs_key *location); int btrfs_init_fs_root(struct btrfs_root *root); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 4bbb4fd490b5..881d117a07db 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6279,7 +6279,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) if (found_key.objectid != BTRFS_TREE_LOG_OBJECTID) break; - log = btrfs_read_fs_root(log_root_tree, &found_key); + log = btrfs_read_tree_root(log_root_tree, &found_key); if (IS_ERR(log)) { ret = PTR_ERR(log); btrfs_handle_fs_error(fs_info, ret, From patchwork Fri Dec 6 14:44:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276591 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 1AB37138D for ; Fri, 6 Dec 2019 14:45:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ECB8E20706 for ; Fri, 6 Dec 2019 14:45:52 +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="QmL2cazW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726370AbfLFOpw (ORCPT ); Fri, 6 Dec 2019 09:45:52 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:43793 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpv (ORCPT ); Fri, 6 Dec 2019 09:45:51 -0500 Received: by mail-qt1-f195.google.com with SMTP id q8so7324709qtr.10 for ; Fri, 06 Dec 2019 06:45:51 -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=ENVsROW9UDKoUK9mSa8sWB5bCjOT99XVr3GA2//FRrM=; b=QmL2cazWKkTucPs7XrkPJQfW8Co/p0mj84QenbArY+9cIj9bY0UHQrChWX8eb6tIRj INAwyxgiTs820zMBINP9mcd9DxE2agHTGUSUBvM7QcX0YmdKYVKOZ52aaiWl3y7pWtVj vyBSPrUiqAJuTLsxiqjpVnSsAW1aODKZmEEraBHxq6IYIZcY8zhBRwqDm4se5kXMk3po Pv2lNdvtkMTFM0WNLkH/22sx5QoF7K8BgjuMvORqVggXI+aWksiId5T1kaYlHWF1VAJA hK/DrFUUPkkqF6TbfkceulYddN+3xDtfivoa5rsSvJCi4lSXpU1ab5htP7MY1k3ZvXhr 78Eg== 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=ENVsROW9UDKoUK9mSa8sWB5bCjOT99XVr3GA2//FRrM=; b=R7cOt7FKbburX76k8c02BWFeuEG8Tn7P/6jA6MDm9Lt5YKpgz90/paib40lUlf+C2L 1c3Z7qt5wkRL8EBo+5zOFxmqxx1G2VKVTL/M0Db0/XnDbZ7S1bhTopFQRYiBk/l4KmJO WfxnaII61obJdE/Q7zTrzQxylSEm/nt1jGyWjmScaO/rwgDOBQ/DgO6Fh8bMgQWLL6Rq e4ypRVv7T0zJIU+/xcfsv8xoiq04ExZQJzvLfKLmbzprmeM7vRGmc/YztExJ+2vu/cXa LG4qeX2SRlh4ASmU753lzqTTn2xT0iCUoT3+A8ZAwnr2ZylUROocGvE3GdnqBiXH8XQZ BavA== X-Gm-Message-State: APjAAAWnHQcjKKwsWHZdYFfAssFtTE6QEdvDbDdLnqr2LBT64rIsx+We YQZMZh0STx5LtNn63OGPtURaKQVRtaQtMQ== X-Google-Smtp-Source: APXvYqzYeOV+yXmmCb413aAHYeJtKudtNiZwnYAobedLNPcl58+qriyf829SnEc+x6GClfJu1MqPJw== X-Received: by 2002:ac8:5319:: with SMTP id t25mr13148552qtn.242.1575643550165; Fri, 06 Dec 2019 06:45:50 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id p126sm5981611qke.108.2019.12.06.06.45.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:49 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 05/44] btrfs: make relocation use btrfs_read_tree_root() Date: Fri, 6 Dec 2019 09:44:59 -0500 Message-Id: <20191206144538.168112-6-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Relocation has it's special roots, we don't want to save these in the root cache either, so swap it to use btrfs_read_tree_roo(). However the reloc root does need REF_COWS set, so make sure we set it everywhere we use this helper, as it no longer does the REF_COWS setting. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index c5fcddad1c15..3f11491e01eb 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1415,8 +1415,9 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans, BUG_ON(ret); kfree(root_item); - reloc_root = btrfs_read_fs_root(fs_info->tree_root, &root_key); + reloc_root = btrfs_read_tree_root(fs_info->tree_root, &root_key); BUG_ON(IS_ERR(reloc_root)); + set_bit(BTRFS_ROOT_REF_COWS, &reloc_root->state); reloc_root->last_trans = trans->transid; return reloc_root; } @@ -4486,12 +4487,13 @@ int btrfs_recover_relocation(struct btrfs_root *root) key.type != BTRFS_ROOT_ITEM_KEY) break; - reloc_root = btrfs_read_fs_root(root, &key); + reloc_root = btrfs_read_tree_root(root, &key); if (IS_ERR(reloc_root)) { err = PTR_ERR(reloc_root); goto out; } + set_bit(BTRFS_ROOT_REF_COWS, &reloc_root->state); list_add(&reloc_root->root_list, &reloc_roots); if (btrfs_root_refs(&reloc_root->root_item) > 0) { From patchwork Fri Dec 6 14:45:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276593 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 842CD138D for ; Fri, 6 Dec 2019 14:45:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 61A6620706 for ; Fri, 6 Dec 2019 14:45:54 +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="faOe63U7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726386AbfLFOpx (ORCPT ); Fri, 6 Dec 2019 09:45:53 -0500 Received: from mail-qv1-f42.google.com ([209.85.219.42]:33976 "EHLO mail-qv1-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpx (ORCPT ); Fri, 6 Dec 2019 09:45:53 -0500 Received: by mail-qv1-f42.google.com with SMTP id o18so2735726qvf.1 for ; Fri, 06 Dec 2019 06:45:52 -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=sIkaHJ5188XjF7UhYf4jTNIcOUG/UXpuayeJR6uBMl4=; b=faOe63U7E4UdN69JQJ0Hs1GxNbW47TBskkgMQp3bAcsZAB+LPn7L3y7aeWzXz/J5+R 2ZUN2969AxWkmPYScekLPpIPUETzTgNxLHhsj5VxR9kia3yHRGGYaFx/yodJXmjYq0pX 23eWIhvu+ioeAKNuJZ041GlVAGpwuefTQswXGxb2YyA9peARjAAQbHVDejBsUly/LDb/ COjy8gCmuDdJoCxLko/vhO9ERtdZizpAvVmHyK2qO7y/EPBvM77CQTBcg0ek24sy/te0 9wXCoNBFItjt7BPBDqUrgycRGvs2Y9AZ3tu5wf4wvU812mh+qo3zztHNNdPwFN5KVr+0 GPIQ== 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=sIkaHJ5188XjF7UhYf4jTNIcOUG/UXpuayeJR6uBMl4=; b=Yvo/VMqTAhekSAMYMRKWNyo7YggoXuPhLiCxpvIZ6dmHhW+TV/ghgafsOMx0KqmVZD HQBE70xvxhB50pvpe5Tif9EiLcAcIpUVwhvNalsAFlFXroS+PzY7l2aRQAP4rST19tkv ZcNWXgT0YJ1eTIGVDsgkdoRWiZcEOo2y+0vihH6Hsob/1zL364Duh5hi4g6aXygdXWrd KXepdi6r8DaWfcthlluuWynbjJidbc10RL6eTLP2SNeGo5z9NgtPogYochYAm3gwShIc h5dbwNzKQ5a8AgAwj6tDIosxkjDGs7vMFCJdVNjn9q95wuQAovFSBCgaCfoOq9Gke7UH 2NOg== X-Gm-Message-State: APjAAAU3THE/PQizuRsKxKvmJJzZU3Ka3q+tYDEngE6xtilWwaoj9HH3 SaWC0gK479KxZMhbnYTl+Cot097EeZGCgg== X-Google-Smtp-Source: APXvYqz0/tgUMd9eLtZN9P5HPmAu/YkSC81ycI9/ooCm2WTSgdLIvZ0iZM6pxxEhCf8BsCtfJts+GA== X-Received: by 2002:a0c:aacc:: with SMTP id g12mr13013566qvb.217.1575643551836; Fri, 06 Dec 2019 06:45:51 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id 206sm5927195qkf.132.2019.12.06.06.45.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:51 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 06/44] btrfs: kill btrfs_read_fs_root Date: Fri, 6 Dec 2019 09:45:00 -0500 Message-Id: <20191206144538.168112-7-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 All helpers should either be using btrfs_get_fs_root() or btrfs_read_tree_root(). Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 13 +------------ fs/btrfs/disk-io.h | 2 -- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 2b91c40df27a..e3957d6b6bab 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1439,17 +1439,6 @@ struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, goto out; } -struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root, - struct btrfs_key *location) -{ - struct btrfs_root *root; - - root = btrfs_read_tree_root(tree_root, location); - if (IS_ERR(root)) - return root; - return root; -} - int btrfs_init_fs_root(struct btrfs_root *root) { int ret; @@ -1570,7 +1559,7 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, return root; } - root = btrfs_read_fs_root(fs_info->tree_root, location); + root = btrfs_read_tree_root(fs_info->tree_root, location); if (IS_ERR(root)) return root; diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index cb12dd4825da..614802bd709d 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -60,8 +60,6 @@ int btrfs_read_dev_one_super(struct block_device *bdev, int copy_num, int btrfs_commit_super(struct btrfs_fs_info *fs_info); struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, struct btrfs_key *key); -struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root, - struct btrfs_key *location); int btrfs_init_fs_root(struct btrfs_root *root); struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, u64 root_id); From patchwork Fri Dec 6 14:45:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276595 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 67F0513B6 for ; Fri, 6 Dec 2019 14:45:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3284C21835 for ; Fri, 6 Dec 2019 14:45:56 +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="cHWq2FJo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726400AbfLFOpz (ORCPT ); Fri, 6 Dec 2019 09:45:55 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:33709 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOpz (ORCPT ); Fri, 6 Dec 2019 09:45:55 -0500 Received: by mail-qt1-f193.google.com with SMTP id d5so7378541qto.0 for ; Fri, 06 Dec 2019 06:45:54 -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=RlO45UzFmp1e7heFJX4bWcaYC6KEXzixfUKphjQntXw=; b=cHWq2FJo51OizX/xKRX3CayWGNuOdNMssi8JkfpWNJrHLrtYn2nPdN4oz5tJwWfftO K7EJAPLE7P2WpSDZcft1WCupD/UCJeyNZJCoIA1C/jfBbvtCAfTxSi17VxewuKRR2pbo 3QpHViuwT9BFUJgOavLxriOcdnQ4ky1AdZrV0nMhHBDqIZDbfgbomK2vt8LYqizES0oK nSUkU+nCcniVZArWEEj1+ZdTQPE2xbbOjJJcQeg9t5Iq/8ItMy6SA7ApY9tE0KaTXcMO 7JGHuUwSu+MAh6ikeJLRL9Uvc/807mgGgoqXaNr4CKp1sMlcHKctD6s4Xwq0jB8zZBzv hD8A== 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=RlO45UzFmp1e7heFJX4bWcaYC6KEXzixfUKphjQntXw=; b=eitgxdVvfn0ywM5W/TaYFLOlSpnZFCo6aF34wCqJUmgTVWQ8p7M9GY0hmwICOJaJOG vipF09WWGo1XAuZ7OMFF+RCKe1VrIj1JRLatJmki3BoccRb8cLPzhYmMK6ZN+/+fE7ne DbWeOpGiRb6oD0ira5/soGynTz6VAa7QZOXtJ9dj40xgIIraywsDodrwRTI34psnILq/ NpTRo0vnXoneqeGqa6FH7i6quFo9p3UF/FLM8iQ3I7UetsRCovGcEEbPBZN6mAaRuxEN X1B1IxFDb2exF4ETG1sHYFSiKaO0LQcK0oH/tJxtcUvS3+7mWYT7Ul/5NooYkrM7cGfn tpjA== X-Gm-Message-State: APjAAAWcpkIquL68MDkTFDC/vqr/n7pGvJcHR/SLsE0PM4cu8m2d7EY3 2jDURmm7fqlyHnOQ30hH/qr6VWTAL59ovg== X-Google-Smtp-Source: APXvYqxlqWuqsICl2gzA82DIGoXPRiGEhgXoibB3IX4ksW6ikMepjnUZDuht4ZlVQ9APPTNs9scEiw== X-Received: by 2002:ac8:42cd:: with SMTP id g13mr12865028qtm.168.1575643553505; Fri, 06 Dec 2019 06:45:53 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id a85sm2593678qkc.23.2019.12.06.06.45.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:52 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 07/44] btrfs: kill the btrfs_read_fs_root_no_name helper Date: Fri, 6 Dec 2019 09:45:01 -0500 Message-Id: <20191206144538.168112-8-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 All this does is call btrfs_get_fs_root() with check_ref == true. Just use btrfs_get_fs_root() so we don't have a bunch of different helpers that do the same thing. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 2 +- fs/btrfs/disk-io.h | 6 ------ fs/btrfs/export.c | 2 +- fs/btrfs/file.c | 2 +- fs/btrfs/inode.c | 6 +++--- fs/btrfs/ioctl.c | 12 ++++++------ fs/btrfs/scrub.c | 2 +- fs/btrfs/send.c | 4 ++-- fs/btrfs/super.c | 2 +- fs/btrfs/transaction.c | 2 +- fs/btrfs/tree-log.c | 2 +- fs/btrfs/volumes.c | 2 +- 12 files changed, 19 insertions(+), 25 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index e3957d6b6bab..fba2ca4965c4 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3179,7 +3179,7 @@ int __cold open_ctree(struct super_block *sb, location.type = BTRFS_ROOT_ITEM_KEY; location.offset = 0; - fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location); + fs_info->fs_root = btrfs_get_fs_root(fs_info, &location, true); if (IS_ERR(fs_info->fs_root)) { err = PTR_ERR(fs_info->fs_root); btrfs_warn(fs_info, "failed to read fs tree: %d", err); diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 614802bd709d..f5ef9ace903a 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -70,12 +70,6 @@ void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info); struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_key *key, bool check_ref); -static inline struct btrfs_root * -btrfs_read_fs_root_no_name(struct btrfs_fs_info *fs_info, - struct btrfs_key *location) -{ - return btrfs_get_fs_root(fs_info, location, true); -} int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info); void btrfs_btree_balance_dirty(struct btrfs_fs_info *fs_info); diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c index 72e312cae69d..08cd8c4a02a5 100644 --- a/fs/btrfs/export.c +++ b/fs/btrfs/export.c @@ -77,7 +77,7 @@ static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, index = srcu_read_lock(&fs_info->subvol_srcu); - root = btrfs_read_fs_root_no_name(fs_info, &key); + root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { err = PTR_ERR(root); goto fail; diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 32e620981485..8baa1b44d514 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -287,7 +287,7 @@ static int __btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, index = srcu_read_lock(&fs_info->subvol_srcu); - inode_root = btrfs_read_fs_root_no_name(fs_info, &key); + inode_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(inode_root)) { ret = PTR_ERR(inode_root); goto cleanup; diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index fc0624fbe387..138c21f5ed12 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2514,7 +2514,7 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - root = btrfs_read_fs_root_no_name(fs_info, &key); + root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { if (PTR_ERR(root) == -ENOENT) return 0; @@ -2698,7 +2698,7 @@ static noinline int relink_extent_backref(struct btrfs_path *path, index = srcu_read_lock(&fs_info->subvol_srcu); - root = btrfs_read_fs_root_no_name(fs_info, &key); + root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); if (PTR_ERR(root) == -ENOENT) @@ -5675,7 +5675,7 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info, btrfs_release_path(path); - new_root = btrfs_read_fs_root_no_name(fs_info, location); + new_root = btrfs_get_fs_root(fs_info, location, true); if (IS_ERR(new_root)) { err = PTR_ERR(new_root); goto out; diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 375befdecc19..95b0488b7da6 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -666,7 +666,7 @@ static noinline int create_subvol(struct inode *dir, goto fail; key.offset = (u64)-1; - new_root = btrfs_read_fs_root_no_name(fs_info, &key); + new_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(new_root)) { ret = PTR_ERR(new_root); btrfs_abort_transaction(trans, ret); @@ -2179,7 +2179,7 @@ static noinline int search_ioctl(struct inode *inode, key.objectid = sk->tree_id; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - root = btrfs_read_fs_root_no_name(info, &key); + root = btrfs_get_fs_root(info, &key, true); if (IS_ERR(root)) { btrfs_free_path(path); return PTR_ERR(root); @@ -2314,7 +2314,7 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, key.objectid = tree_id; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - root = btrfs_read_fs_root_no_name(info, &key); + root = btrfs_get_fs_root(info, &key, true); if (IS_ERR(root)) { ret = PTR_ERR(root); goto out; @@ -2408,7 +2408,7 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, key.objectid = treeid; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - root = btrfs_read_fs_root_no_name(fs_info, &key); + root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { ret = PTR_ERR(root); goto out; @@ -2653,7 +2653,7 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp) key.objectid = BTRFS_I(inode)->root->root_key.objectid; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - root = btrfs_read_fs_root_no_name(fs_info, &key); + root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { ret = PTR_ERR(root); goto out; @@ -3986,7 +3986,7 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) location.type = BTRFS_ROOT_ITEM_KEY; location.offset = (u64)-1; - new_root = btrfs_read_fs_root_no_name(fs_info, &location); + new_root = btrfs_get_fs_root(fs_info, &location, true); if (IS_ERR(new_root)) { ret = PTR_ERR(new_root); goto out; diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index e2c87220600f..eed3a8492092 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -652,7 +652,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, root_key.objectid = root; root_key.type = BTRFS_ROOT_ITEM_KEY; root_key.offset = (u64)-1; - local_root = btrfs_read_fs_root_no_name(fs_info, &root_key); + local_root = btrfs_get_fs_root(fs_info, &root_key, true); if (IS_ERR(local_root)) { ret = PTR_ERR(local_root); goto err; diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index ae2db5eb1549..73e2e350f4a1 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7200,7 +7200,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) index = srcu_read_lock(&fs_info->subvol_srcu); - clone_root = btrfs_read_fs_root_no_name(fs_info, &key); + clone_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(clone_root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); ret = PTR_ERR(clone_root); @@ -7239,7 +7239,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) index = srcu_read_lock(&fs_info->subvol_srcu); - sctx->parent_root = btrfs_read_fs_root_no_name(fs_info, &key); + sctx->parent_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(sctx->parent_root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); ret = PTR_ERR(sctx->parent_root); diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index a98c3c71fc54..e387ca1ac0e5 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1077,7 +1077,7 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, key.objectid = subvol_objectid; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - fs_root = btrfs_read_fs_root_no_name(fs_info, &key); + fs_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(fs_root)) { ret = PTR_ERR(fs_root); goto err; diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 55d8fd68775a..e194d3e4e3a9 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1631,7 +1631,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, } key.offset = (u64)-1; - pending->snap = btrfs_read_fs_root_no_name(fs_info, &key); + pending->snap = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(pending->snap)) { ret = PTR_ERR(pending->snap); btrfs_abort_transaction(trans, ret); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 881d117a07db..a4321bdcbf3e 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6291,7 +6291,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) tmp_key.type = BTRFS_ROOT_ITEM_KEY; tmp_key.offset = (u64)-1; - wc.replay_dest = btrfs_read_fs_root_no_name(fs_info, &tmp_key); + wc.replay_dest = btrfs_get_fs_root(fs_info, &tmp_key, true); if (IS_ERR(wc.replay_dest)) { ret = PTR_ERR(wc.replay_dest); diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index d8e5560db285..904c3e03467f 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4372,7 +4372,7 @@ static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, key.objectid = subid; key.type = BTRFS_ROOT_ITEM_KEY; key.offset = (u64)-1; - subvol_root = btrfs_read_fs_root_no_name(fs_info, &key); + subvol_root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(subvol_root)) { ret = PTR_ERR(subvol_root); if (ret == -ENOENT) From patchwork Fri Dec 6 14:45:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276597 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 26CF413B6 for ; Fri, 6 Dec 2019 14:45:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 05F6221835 for ; Fri, 6 Dec 2019 14:45:58 +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="tMaJOVV7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726407AbfLFOp5 (ORCPT ); Fri, 6 Dec 2019 09:45:57 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:46569 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726234AbfLFOp5 (ORCPT ); Fri, 6 Dec 2019 09:45:57 -0500 Received: by mail-qk1-f193.google.com with SMTP id f5so6612288qkm.13 for ; Fri, 06 Dec 2019 06:45:56 -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=eM74Qhf90adFFXMMYOsNfwd0edDFEp5pWt/y2NDeBzU=; b=tMaJOVV7OgSBwSLD+NHGSU/TMJc7VBtm+qmT0Ot/7elZ+F0xLldBffsV/lLuyHqITA Bepk6lmCUj1ajMH1CM1YOIzNpRNeBSUY2DwK1v+/Ao98GHez13zAoRcQadfT08PHclhJ 5ptx6epfKP3TUKbBSZ0jRkl9dR9M8MEFo24QEIYgn3nIkZwNHu38MzJ0Pdr5mSze3ObT Rz31AvILRGBR2eehyGcRUjwB2/6+wQEBsfXdaz+UkE8El8EafaRhTsQhFs/PPtsSvorl 5ANaiUImLUigW+v8EMjr4lVVoz5+2RI5kmvD4bMGmnEeEUzmQzH2Ug6UuULZoLZdeLC0 JzTA== 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=eM74Qhf90adFFXMMYOsNfwd0edDFEp5pWt/y2NDeBzU=; b=bwZ4EJT1Kg9xZTORL2TK+AZriyQM8yuy2b2O+8sghHVpNugpoVsNeB6BxrYhrQqKGp PW5CD8s2i5sciFLLteIK/6MA1VRwhtJ/9wP2v4gjhb3xh34tcC5xwDPgwSbwble6vvV5 AySknkLy2LBg+DQIaXNhz+c1JKHYANSc4WDb88DVJX8aPIoLzWJ0uCIVVvjcLqD/ClUy 8cKJ9PaWlE6G0gfRppI+hnNg2SDOvK8geQdzHzkHwwfz5nS5zSLvhvtFsh0ORz0nhTdY GSJ4yCwIw87sdJ8su3wcc+ZMLk+Pg5Huh93vP00f2Y9dj7v60RW9Kq3t7X24tK1b48Cf XGIA== X-Gm-Message-State: APjAAAU33RgR27DVowTNF5ouuVq0SogDIeyKMvLoafgxslhrX4r0XGYW 3RJ4l0YccChSZDw9cQaz2Ld7IswToWU4ow== X-Google-Smtp-Source: APXvYqwXmW981PmO1cEnJnIaw5Uasqtg/QItWNCWq0FJ5W7MqmT93HfYvmdj3iMvSUnb1XzieP7YZA== X-Received: by 2002:a37:27cf:: with SMTP id n198mr14062447qkn.188.1575643555589; Fri, 06 Dec 2019 06:45:55 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id f13sm6247307qtj.14.2019.12.06.06.45.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:54 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 08/44] btrfs: make the fs root init functions static Date: Fri, 6 Dec 2019 09:45:02 -0500 Message-Id: <20191206144538.168112-9-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Now that the orphan cleanup stuff doesn't use this directly we can just make them static. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 6 +++--- fs/btrfs/disk-io.h | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index fba2ca4965c4..4c55db4b3147 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1439,7 +1439,7 @@ struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, goto out; } -int btrfs_init_fs_root(struct btrfs_root *root) +static int btrfs_init_fs_root(struct btrfs_root *root) { int ret; struct btrfs_subvolume_writers *writers; @@ -1490,8 +1490,8 @@ int btrfs_init_fs_root(struct btrfs_root *root) return ret; } -struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, - u64 root_id) +static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, + u64 root_id) { struct btrfs_root *root; diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index f5ef9ace903a..5b38558e164d 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -60,9 +60,6 @@ int btrfs_read_dev_one_super(struct block_device *bdev, int copy_num, int btrfs_commit_super(struct btrfs_fs_info *fs_info); struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, struct btrfs_key *key); -int btrfs_init_fs_root(struct btrfs_root *root); -struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, - u64 root_id); int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_root *root); void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info); From patchwork Fri Dec 6 14:45:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276599 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 50BA7138D for ; Fri, 6 Dec 2019 14:46:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2575921835 for ; Fri, 6 Dec 2019 14:46:00 +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="vnZWs3Pw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726410AbfLFOp7 (ORCPT ); Fri, 6 Dec 2019 09:45:59 -0500 Received: from mail-qv1-f66.google.com ([209.85.219.66]:39838 "EHLO mail-qv1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOp6 (ORCPT ); Fri, 6 Dec 2019 09:45:58 -0500 Received: by mail-qv1-f66.google.com with SMTP id y8so2722283qvk.6 for ; Fri, 06 Dec 2019 06:45:58 -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=BHAJCZpUixrFOo6YxjTvdeyJ+SbmjrYnDz0qcyoWdoY=; b=vnZWs3PwFRxWXC3Y8h7RWOLCvnOkpdfbmSvQE4zbMssEVIZ7ZLyBB51smZtyXnULf8 FgI55LCJn5u6/0RMv5n7JxTrsHrtFo03X1UQUV/lUOkPXtTpbFVGajq9ohVtFctXnR7J eLi28gFtpoXbZ8ut+BUrkfhAhpEI20Ex+Wp5+dA2ImvJcs6kBqrP42T71DeBslokVrFp h3AVZuKbpLIrh9lAgFltdFd5EhWzqsKwksEQVulD36UnOjTcJucIUO7Zt6zVg00qrUxd vCJI0VbVwreQ8azOWsPjbqUvXyX7qLsFwvVP+KIrEwiDCUKPSOR5UZsntytRBm7vbyEQ zQ+w== 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=BHAJCZpUixrFOo6YxjTvdeyJ+SbmjrYnDz0qcyoWdoY=; b=PqHSXB5IB4xgRfAa/gOqscocUa5K5JMlP1eXbBb8CsUw22yfS8WdQYYAxQIKDrbNgw 6tHjR7W50shv/QrSoTV6NG8vSWoi0a6JZ+jIK3l/AbzZ0ltbisfSJw8hzVEe8xrVcqQ9 n0dSHNy97nVVoMf6cSzOSI4R4GzGWuZsW2vUHbQgT7uE3K+QDXfAlBZwqbnIhoEQ7nDj tP5ENvfmy4phdpT4GqF+mrEtGnCU/gdkAirKBISU3yWEROt+bWLxpSB4EIy5RDCrEG8D 1Sdrr78BWNgrRc+mCN9d7vmKsrCUqL1+QnDgCst7dBIJH7THrHLr9RjQj9WIaSy1PCHo u+GA== X-Gm-Message-State: APjAAAX0alSjp4L37FZPoVc/xKmyMKamVUFDezsKmN3bEOyEJd1snTXB OPQyAApnn10yhY0F+eZR3Bc6+eNCGgC6Lw== X-Google-Smtp-Source: APXvYqxCxHvZc1Wz/yR2nr1CwUsd+nOLFkTDi8vYXxDGLL+U0u54Ff/hf2GMhm58ZAQAne0mUxy5ow== X-Received: by 2002:a0c:962f:: with SMTP id 44mr13023362qvx.103.1575643557456; Fri, 06 Dec 2019 06:45:57 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id i4sm5850971qki.45.2019.12.06.06.45.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:56 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 09/44] btrfs: handle NULL roots in btrfs_put_fs_root() Date: Fri, 6 Dec 2019 09:45:03 -0500 Message-Id: <20191206144538.168112-10-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 want to use this for dropping all roots, and in some error cases we may not have a root, so handle this to make the cleanup code easier. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 5b38558e164d..1685dd2cf7ab 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -95,6 +95,9 @@ static inline struct btrfs_root *btrfs_grab_fs_root(struct btrfs_root *root) static inline void btrfs_put_fs_root(struct btrfs_root *root) { + if (!root) + return; + if (refcount_dec_and_test(&root->refs)) kfree(root); } From patchwork Fri Dec 6 14:45:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276601 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 5CCEB138D for ; Fri, 6 Dec 2019 14:46:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3B07720706 for ; Fri, 6 Dec 2019 14:46:02 +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="InXdKraI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726418AbfLFOqB (ORCPT ); Fri, 6 Dec 2019 09:46:01 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:34684 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqB (ORCPT ); Fri, 6 Dec 2019 09:46:01 -0500 Received: by mail-qk1-f193.google.com with SMTP id d202so6687584qkb.1 for ; Fri, 06 Dec 2019 06:46:00 -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=X+dDBN36nIO9Ue8qnQBxsC4EQZnEqI2HnSGzAQBPEHQ=; b=InXdKraIl56luJ9+96L1tLtlqhhchby4OMrTHCDjpkyPnf6M8PH3liXax/fdn58Vz7 MHNt9gT0SNnGaqbfEs7BFTlbowQpv5l4+CtO79NpuhQ4RRKfVMQ8y9zgQJaqQZWJnnsG YiF20Xuswk5rZjxXtxbFjALyKJCFXQmMmfMueoyF6el+ZN5MM/DxhQAiFih/ftmR8zpS vrloxnVwoUM40cxNSM/vMVCpQh1Wb6Dnmd6+u5iZUwsRZQG/nWo8P3bVQf5aHxYZlTu0 T3cR4fGiBsfFtuKduaz75z6z1hA3ojbOdsqib6rRE3nt1fJrF9aFjM3ejopk3c8BuccJ wVnQ== 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=X+dDBN36nIO9Ue8qnQBxsC4EQZnEqI2HnSGzAQBPEHQ=; b=FEwcSOEoVSa53OQp1peAiTS+bfvIC5OHsymZlx/f22tLCEfQm0FEDiZx2pzg3CXr0h MSHGXtL9UHcP5uerIYjCjl9TzjITITlcBzuFI+cA7Yk3BCozecze3lvqG4rWJluhOc1F 7cqPEvrWK51Cz+ptvsDpLos0U1wfkGAmDmclsjR1+9cNUn3gFngUI+HAQrqgLTr2Rm5z pW+4xBgbsMECuuG5i5yF0ZUh6OGsHx6F5fAXIXP+GO3MueZ8zNzF+ZGrNA+MrV9C12nd mSkZMCIy2YXoZ/Df7pJ0VUBQ09rUQMenxyVL4aOyYYzl63fD0z6IESm4OB+VDw58GzaJ 6Ksg== X-Gm-Message-State: APjAAAVei2bGgPV/UPpwplbUOCFgHvzqwHOC5T6qqSkSyCKixfWOQJCh YxgoCJgayzEsVpQ3AA0jMl7XVCikxvjhkg== X-Google-Smtp-Source: APXvYqzJ/R59qpdGUOiqG71zN258nPPA86FwETj4c/3G1HiiV/63OTcc+6/EH737McubvG1u1QFx6A== X-Received: by 2002:a37:b044:: with SMTP id z65mr13829725qke.424.1575643559838; Fri, 06 Dec 2019 06:45:59 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id h34sm6651540qtc.62.2019.12.06.06.45.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:45:59 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 10/44] btrfs: hold a ref on fs roots while they're in the radix tree Date: Fri, 6 Dec 2019 09:45:04 -0500 Message-Id: <20191206144538.168112-11-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're sitting in the radix tree, we should probably have a ref for the radix tree. Grab a ref on the root when we insert it, and drop it when it gets deleted. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 4c55db4b3147..dfeeabfc341b 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1515,8 +1515,10 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, ret = radix_tree_insert(&fs_info->fs_roots_radix, (unsigned long)root->root_key.objectid, root); - if (ret == 0) + if (ret == 0) { + btrfs_grab_fs_root(root); set_bit(BTRFS_ROOT_IN_RADIX, &root->state); + } spin_unlock(&fs_info->fs_roots_radix_lock); radix_tree_preload_end(); @@ -3816,6 +3818,8 @@ void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info, spin_lock(&fs_info->fs_roots_radix_lock); radix_tree_delete(&fs_info->fs_roots_radix, (unsigned long)root->root_key.objectid); + if (test_and_clear_bit(BTRFS_ROOT_IN_RADIX, &root->state)) + btrfs_put_fs_root(root); spin_unlock(&fs_info->fs_roots_radix_lock); if (btrfs_root_refs(&root->root_item) == 0) From patchwork Fri Dec 6 14:45:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276603 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 E526C13B6 for ; Fri, 6 Dec 2019 14:46:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C3B6F21835 for ; Fri, 6 Dec 2019 14:46:03 +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="SU6t2k/3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726425AbfLFOqD (ORCPT ); Fri, 6 Dec 2019 09:46:03 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:45368 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqC (ORCPT ); Fri, 6 Dec 2019 09:46:02 -0500 Received: by mail-qt1-f194.google.com with SMTP id p5so7308346qtq.12 for ; Fri, 06 Dec 2019 06:46:02 -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=JLk4SYGy37fJBjRDw7Ytdl7Bh55Sf6BqQikAUfeWGHU=; b=SU6t2k/3Hwh2cSzSXNj5sChGiEZY6UnPnKR6cVXcgZBLiWDQkU+5JJSo+iUvPbzVTn VuZOdsAXrN+h3SxZcv7Ea1/v3ZhB2APqjhzbhZgY1IQyHEygPj736A8vLFMhVC6xcNZu 8bzx+Lk78qW15UOf43HHYsWIMZLe2894cl0JubsYb/5YjXKMqaQjh6hUj2/sJW2kJM1S Hv1m3LH7AoWR2qoxDVMJCREToSzFy57N6wcKKgmFKDy7eqiuOg5/JyyCXIzl1/t9h4M3 dUC3I6ROI+OypTQA9jj7iTMqTPkYi4wCZBxO/uX7M1ZuACHH/A2gdIB3f+o74KAohapd erRA== 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=JLk4SYGy37fJBjRDw7Ytdl7Bh55Sf6BqQikAUfeWGHU=; b=O9jXEVBQeADHS3Tq6LtAh+9i9veFSb/R7qx3v7ksWA/Gthuij56L4cdU5bueDzcoe2 niUFTjXtIw2x7yDS5RtGaTvkFIhl1xX3gzfmIo7Y+v5G7/HW3IoRIjzFAtFxqmg6GK2O zuy15sE5mTVPp7ytqwzWYDPzlI8rTTtfFAMqVG+j2pLJSZlkoAXbg99i5i+jKkyn6Axn BiLs9BXBc8a/bquG1O6HLXA7+j+MDV5skcdIUfrOX+wK2fABHmSKNY3YrhOPk+XB2QYu zuR4VKVTNaqeeaI3+88MfHG2/gL4rt8b+CKwLZ6R1avs9Yz//8lgpTmiPcC9qzqv+DAY YKgg== X-Gm-Message-State: APjAAAVRXnZF03Eu8FtxeTCHaIp1HXGJEmo4ORx3HLVRgqOIC24cYNFU 8aw+5iiLNxq8voQFboytXMNKqnuUIyDXkw== X-Google-Smtp-Source: APXvYqxuGCfcgj6sQ/ColfmW6mSATnjlUBCBiPQtpUwS0QFzejYY7ChcFhLWXljva5Oop9zxGAjv7g== X-Received: by 2002:aed:3e82:: with SMTP id n2mr13101024qtf.367.1575643561582; Fri, 06 Dec 2019 06:46:01 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id j16sm6446356qta.59.2019.12.06.06.46.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:00 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 11/44] btrfs: hold a ref on the root in resolve_indirect_ref Date: Fri, 6 Dec 2019 09:45:05 -0500 Message-Id: <20191206144538.168112-12-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're looking up a random root, we need to hold a ref on it while we're using it. Signed-off-by: Josef Bacik --- fs/btrfs/backref.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index e5d85311d5d5..193747b6e1f9 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -524,7 +524,13 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info, if (IS_ERR(root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); ret = PTR_ERR(root); - goto out; + goto out_free; + } + + if (!btrfs_grab_fs_root(root)) { + srcu_read_unlock(&fs_info->subvol_srcu, index); + ret = -ENOENT; + goto out_free; } if (btrfs_is_testing(fs_info)) { @@ -577,6 +583,8 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info, ret = add_all_parents(root, path, parents, ref, level, time_seq, extent_item_pos, total_refs, ignore_offset); out: + btrfs_put_fs_root(root); +out_free: path->lowest_level = 0; btrfs_release_path(path); return ret; From patchwork Fri Dec 6 14:45:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276605 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 BB7BA13B6 for ; Fri, 6 Dec 2019 14:46:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 99B0420706 for ; Fri, 6 Dec 2019 14:46:05 +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="IIsGxeTc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726444AbfLFOqE (ORCPT ); Fri, 6 Dec 2019 09:46:04 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:44638 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqE (ORCPT ); Fri, 6 Dec 2019 09:46:04 -0500 Received: by mail-qk1-f193.google.com with SMTP id i18so6623854qkl.11 for ; Fri, 06 Dec 2019 06:46:04 -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=jfbRXZ/5/MBFQWWw54MEoM9lTLz/KmX5CXwHy/coLzY=; b=IIsGxeTcd3eveCbIvURL4N6LNAitZCJEOOk7pCUn/AOtyc5LYZ1yi/RkXLDY+xMbtP Zaa6aG+Dv87PgKw3xPHOJTJDd3/8UFxrxIFs2xH4lCkRH6t6V9ivUWI6IyclC4gaQ8B6 1FJGl8+iGBuPGjL1bZe8Ot3zuVTkzJ9kV2zATjx+lSey6BbNSwG6jd2+SduBFAoK6MoF HTFZrKLmKIlIWpbCQHYNnxvzP1NXScLmQHUslOYTHIaS1DUpNkaeatlNuYADIhcO6eXU Vz/gj6QXBBOInNJiJ9budUeQDcmPhHMXaZOO5DYjTlqzIs0ottUiGEBQDwbxeVcRYJPz gJ1Q== 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=jfbRXZ/5/MBFQWWw54MEoM9lTLz/KmX5CXwHy/coLzY=; b=sIf4Q6uxFxGWz33Fg5GezrIHynOc9UjmEPqbsh+26Iloc779+vzb8ujPx2uEBP+4Ei vPOMlJlb/2mU/PbE7BC6A8FUBeko427S47iVVKxdEKm9rM4EcPXyI13oMJz2SJTgqmWo rzU5f+uTF+aBtiD3f3UsM7SFk2fTAdHNINZ/yPCxSK8XQrnBGQAoUSchlTVlZuKFEOSj 4Xv7zIxsggZxrcaqZ4iEPYOfRS4cvYM+e20zD4G5GT6Q0u8G0M1BRFwM1fiHN5LVqRr3 2KMf2KCoGUMTIk3zES5Q1NAE2Elu4MBYETP/ffDomK+C/BRWDsrlZ8ASfb/iZQWmkgT6 tfig== X-Gm-Message-State: APjAAAXPoAmhXD8BAchGqgttlraJN0tXV/HoFAAvtrdx9hNBiocZ6B7Z M6FeiRedHh53e7S3E71sTqJ86wJjeNLoXQ== X-Google-Smtp-Source: APXvYqx/p7FE72MAbe1AOv4urLeYIcj8dUxiZth8SL8IMFO282CTH/il8u7/os+7OoSnlUZ0YrUpXQ== X-Received: by 2002:a05:620a:548:: with SMTP id o8mr1526375qko.490.1575643563177; Fri, 06 Dec 2019 06:46:03 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id s20sm5893325qkg.131.2019.12.06.06.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:02 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 12/44] btrfs: hold a root ref in btrfs_get_dentry Date: Fri, 6 Dec 2019 09:45:06 -0500 Message-Id: <20191206144538.168112-13-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Looking up the inode we need to search the root, make sure we hold a reference on that root while we're doing the lookup. Signed-off-by: Josef Bacik --- fs/btrfs/export.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c index 08cd8c4a02a5..eba6c6d27bad 100644 --- a/fs/btrfs/export.c +++ b/fs/btrfs/export.c @@ -82,12 +82,17 @@ static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, err = PTR_ERR(root); goto fail; } + if (!btrfs_grab_fs_root(root)) { + err = -ENOENT; + goto fail; + } key.objectid = objectid; key.type = BTRFS_INODE_ITEM_KEY; key.offset = 0; inode = btrfs_iget(sb, &key, root); + btrfs_put_fs_root(root); if (IS_ERR(inode)) { err = PTR_ERR(inode); goto fail; From patchwork Fri Dec 6 14:45:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276607 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 7A329138D for ; Fri, 6 Dec 2019 14:46:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 58DA721835 for ; Fri, 6 Dec 2019 14:46:07 +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="1JJkTFzO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726461AbfLFOqG (ORCPT ); Fri, 6 Dec 2019 09:46:06 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:38386 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqG (ORCPT ); Fri, 6 Dec 2019 09:46:06 -0500 Received: by mail-qt1-f195.google.com with SMTP id 14so7344662qtf.5 for ; Fri, 06 Dec 2019 06:46:05 -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=jwJhWMl33WBxBZPZsNUeTq/Ywm6VHshAJl9lKM0tdLc=; b=1JJkTFzOSwVRWj36pFab8gomTi9JxnE7jO2RLmknqMijQFMppUNE89luI8egnQfUio 6QVsUpgMEgKhju+AMPTBAWLGGe3Ax7K12VLW877mlTuKyZuThWfwB8pkSZYAN7lOmx+o hwc7qiRjrZSf0/EufSFxD7Iuz3TkPQykkGYJkaHW8PgTr5nprsI7dyhp7HiRl24eJKVQ W+6cWbTwkSUxnLNWmegqQgpjVUWO5bfPVrK9449GCWDUcR/s9EM55zaGOHNndSzWTczg apJUTUwRmjjSNAj+GAaFptzLkudBkwvXi4+EPS4BzlRDZUIwea1TeH3Q3THa06EW02AO XfnA== 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=jwJhWMl33WBxBZPZsNUeTq/Ywm6VHshAJl9lKM0tdLc=; b=PKP9pK+XvjfiPeJc3kXfKz/lPp3xsYeQK+c5MUHKakPv+SY8Xe1NNJkulDOOITx9+x K85Un3CSpqiJm6vuUxnXqdV84rgBD8Iderce1UfXaO2ki8ZISZMEE84+dmtBtYxdpB2i vBlKWnGQhz0lSSJftBNJPqMqo9qdKMrtytZGPggFXMgqc4WmmyNNk/mKoxKr/RGPmLzz PRkAhiK/6bFq0tfCKr9t2hYT27t3WCm8b+HgYHkGxmwxpqz1DbmG7ZjiHCA/DpyPq0EA qdihdAeSTxvR2oPZf+UXwLpt3NrkVN7cuF0DZW0IyfMJrN3URlGhKN+gcufx2d71YiDh bsDw== X-Gm-Message-State: APjAAAViqzIlM6EOhG1W+6dXtuwCdCoGUvhfUQqAoeJxx4DzYy8v+SSX BTdEri9FlWeWZgh0gO9YSGKHW6St7habbg== X-Google-Smtp-Source: APXvYqwqlgBdIW+k6wsTU89PeopFF2xpuPXeA9Zd+ytJvFj80ohDpxH541f1PI/+hx2P4r2XnQjLtQ== X-Received: by 2002:ac8:538d:: with SMTP id x13mr13187409qtp.375.1575643564827; Fri, 06 Dec 2019 06:46:04 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l31sm6414737qte.30.2019.12.06.06.46.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:04 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 13/44] btrfs: hold a ref on the root in __btrfs_run_defrag_inode Date: Fri, 6 Dec 2019 09:45:07 -0500 Message-Id: <20191206144538.168112-14-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 are looking up an arbitrary inode, we need to hold a ref on the root while we're doing this. Signed-off-by: Josef Bacik --- fs/btrfs/file.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 8baa1b44d514..f8e16f44a970 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -292,11 +292,16 @@ static int __btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, ret = PTR_ERR(inode_root); goto cleanup; } + if (!btrfs_grab_fs_root(inode_root)) { + ret = -ENOENT; + goto cleanup; + } key.objectid = defrag->ino; key.type = BTRFS_INODE_ITEM_KEY; key.offset = 0; inode = btrfs_iget(fs_info->sb, &key, inode_root); + btrfs_put_fs_root(inode_root); if (IS_ERR(inode)) { ret = PTR_ERR(inode); goto cleanup; From patchwork Fri Dec 6 14:45:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276609 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 21ACB13B6 for ; Fri, 6 Dec 2019 14:46:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F3BBC20706 for ; Fri, 6 Dec 2019 14:46:08 +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="LQHPIyGn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726472AbfLFOqI (ORCPT ); Fri, 6 Dec 2019 09:46:08 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:46248 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqH (ORCPT ); Fri, 6 Dec 2019 09:46:07 -0500 Received: by mail-qt1-f193.google.com with SMTP id 38so7296849qtb.13 for ; Fri, 06 Dec 2019 06:46:07 -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=CrGSROngNYHMrJo4yO4MKSjdAhSy80c70V3zqgJu568=; b=LQHPIyGnCujdsDV0b8Wctq5bd3lu/XAvr6t1hKzrtEEn+yQPiG/PwuWMXbz5+TOS8z EA2K1lmv9VFO4MNMzIr0+kmAuSgEKjcGei/zVJ1fcASkjRHA3OTeb0EnEedGzRRFYGIC EJBWmkBkkvSvL8IiFBBaLXj0SJBfokiCoGp02F9RBXg4GXOTShbtGfXhzZiosAMROmGw wc3eUQ67byxINRkS9FyP4YbfdNKtR5T7/WaeqHGeMkd2L4GQUzJAoFB4nB+a/x/CQd8A VbmiLygH4og4uyWMvoW0pTYXuwko+lwLlCAUnvPkOedGd20KSIThEAeUBg9I6glErpRZ J26w== 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=CrGSROngNYHMrJo4yO4MKSjdAhSy80c70V3zqgJu568=; b=GRByjodHZxDnxKlUYkrXIQoNaKzwOx9xMflgO6oXOk7eC4emAR+TiQABsKArnesu8H zbsnU3ZOvDXg8B4lD8Jn4reCqEgCC1SpjVBy+Ss0s+gvST4cymxZQlCJYZuOU2lteEIw eSGBvCzQ+3hHgKlUzphV2gkut51tgjEdaOoYKOIH/gKaZHMsI79cRTFANVVlySVyYgP2 wT2/EkQWoi0oNW2kcEDDKiqKX+oD982zh4RaLl6iuHiBMS4veGt16b4ObS1kTY4JtQO6 bUiq3x4gXbHMQ/LuFKOI4HB6PAPOF04EDwN3bGWkSsUV1+teR+VjyGEvuQ/yW+VJkuj+ iAzg== X-Gm-Message-State: APjAAAVk8OOgG/sFJSAa23V56/ILSW3DGA/yAzpYN1Cnykf0uTSMgvXC XN3UQW1okT/t3+BW8YhL4jtpSxnrOcdxBw== X-Google-Smtp-Source: APXvYqyX5GvM+PiscEehyTDpPle2Q6mrPargaBYZ5S7RJP1yL99kPOmuXIulBfxv2x7y2OXLHFR2pg== X-Received: by 2002:ac8:2310:: with SMTP id a16mr12815095qta.46.1575643566454; Fri, 06 Dec 2019 06:46:06 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y10sm5801939qky.6.2019.12.06.06.46.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:05 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 14/44] btrfs: hold a ref for the root in record_one_backref Date: Fri, 6 Dec 2019 09:45:08 -0500 Message-Id: <20191206144538.168112-15-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're looking up in an arbitrary root, we need to hold a ref on that root. Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 138c21f5ed12..88f3d6eace7a 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2523,6 +2523,8 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, inum, offset, root_id); return PTR_ERR(root); } + if (!btrfs_grab_fs_root(root)) + return 0; key.objectid = inum; key.type = BTRFS_EXTENT_DATA_KEY; @@ -2532,8 +2534,10 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, key.offset = offset; ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); - if (WARN_ON(ret < 0)) + if (WARN_ON(ret < 0)) { + btrfs_put_fs_root(root); return ret; + } ret = 0; while (1) { @@ -2603,6 +2607,7 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, backref_insert(&new->root, backref); old->count++; out: + btrfs_put_fs_root(root); btrfs_release_path(path); WARN_ON(ret); return ret; From patchwork Fri Dec 6 14:45:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276611 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 6E29213B6 for ; Fri, 6 Dec 2019 14:46:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4BDAC20706 for ; Fri, 6 Dec 2019 14:46:10 +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="jmTufhu8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726476AbfLFOqJ (ORCPT ); Fri, 6 Dec 2019 09:46:09 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:46254 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqJ (ORCPT ); Fri, 6 Dec 2019 09:46:09 -0500 Received: by mail-qt1-f195.google.com with SMTP id 38so7296937qtb.13 for ; Fri, 06 Dec 2019 06:46:08 -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=Dq5JqmytmL2LRBFHvkJmYCNUIRPTDJAEUEN4BtRVplo=; b=jmTufhu8U7hFaQr2GuSaYa1XzJHOEyvD8jxCJreas1j4N6FhLrTYNphXaRaK0otjAL 7pSagm98FJfT8JRcI3QrIV5smoPtQVJRSLVSU658CjRN0rBHntuk6lNPEWnyugw4U1Cm +/OrdUXc7fDMq8/nkvqfuZPURwKxzpn5nF8Seaxx6owkWGw4AWTCWL6mYfrSuWNvU8cY 35S9IYdHo+nH2jMp44sZBl52aoDpQ64wfBAzK1SPA2Jjuu3xcPSUBmyczZ5ZVnMj9zUn b0CQvsC3fb5bFD0Q31hzwH9djHby+nGXnnJzUThVyohn1OW7aFIMYKFxdEsjkaue66Wa IJPg== 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=Dq5JqmytmL2LRBFHvkJmYCNUIRPTDJAEUEN4BtRVplo=; b=IoGGEp2NIa7Cfu++nWSNj5HRUSF7AlIk4Nmsdu/isYHoH0Mmrq9+YLvUNN6xCYvil3 GiATSNrH10zhZhCgsRvceX3yZCiJpGJUnuWmHLlppeow5XF0bwjVsvE0NnVnsW9rpcaW 0ZVPCQ0K8EaEAKyoC1zClcbq1ofMTuLXhwYMHiVs58KX6JV13oTzA8jwExT2pwaJhDla j9s5ukO0pTOu9fHu7vAGcD5fsCX+OCm2nfDDCQqmy3PC8Gwxc0bJrJ3bnuC1UdFnmrug wAfQVZfopPkEbEf0QMNipGqussh4+UqQBqjWRNVcNk1MKZn0n20L2nEd/Roe/zmMUwYE uelw== X-Gm-Message-State: APjAAAXU8/ooec8QhMJFI/uZ8l4Hpfsk+FaiiTqRpuSXIAdEUFQPsm6M SQ0YB7Bthta8DshSAl8hSVJmrEjFMQgdIg== X-Google-Smtp-Source: APXvYqy33sKF2uNFCt7xGuFDTdiZokFNjHpLcFRmbw8bKRldoPwXtr7hiCf70y525ewoEBLKtzWF9A== X-Received: by 2002:aed:30c3:: with SMTP id 61mr13112075qtf.251.1575643568115; Fri, 06 Dec 2019 06:46:08 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id z6sm5903615qkz.101.2019.12.06.06.46.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:07 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 15/44] btrfs: grab a ref on the root in relink_extent_backref Date: Fri, 6 Dec 2019 09:45:09 -0500 Message-Id: <20191206144538.168112-16-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're doing an arbitrary lookup on an fs_root, we need to hold a ref on that root. Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 88f3d6eace7a..3dc9bc9530e2 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2711,6 +2711,9 @@ static noinline int relink_extent_backref(struct btrfs_path *path, return PTR_ERR(root); } + if (!btrfs_grab_fs_root(root)) + return 0; + if (btrfs_root_readonly(root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); return 0; @@ -2722,6 +2725,7 @@ static noinline int relink_extent_backref(struct btrfs_path *path, key.offset = 0; inode = btrfs_iget(fs_info->sb, &key, root); + btrfs_put_fs_root(root); if (IS_ERR(inode)) { srcu_read_unlock(&fs_info->subvol_srcu, index); return 0; From patchwork Fri Dec 6 14:45:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276613 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 347BD138D for ; Fri, 6 Dec 2019 14:46:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 132FE21835 for ; Fri, 6 Dec 2019 14:46:12 +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="xXYBNmkr" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726483AbfLFOqL (ORCPT ); Fri, 6 Dec 2019 09:46:11 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:35671 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqL (ORCPT ); Fri, 6 Dec 2019 09:46:11 -0500 Received: by mail-qt1-f193.google.com with SMTP id s8so7378170qte.2 for ; Fri, 06 Dec 2019 06:46:10 -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=SIQ/P7FQ7arouhkzuzw7ujgnmYAn8fc5SJbQDjIRoc8=; b=xXYBNmkrjhtPCCd7qQ9EuT/RyTK5mGFB0OETubmV/vpFiBR4qg7Oai9edk3UVw3+wX eKCMaqFa9dtEoZJ/VKuq/FU628uyyM/9L+asCeX3GlDM3aWQsMAJH3Lrx5BYJ5bja1Kd oB2ZP2OD7IPGrKG4A/VMVYCGufB83is2XvSXym2EF6RerJ8qKZnjjIBGO5d7qfzZMMeG 7mKBXjWQhsHx2Rgmab2GE6VXey6yYjGC6JVI+fcomEObcLSm9oA3dbHZI7A9Stifl23Q b0jg7TcMQ45FM07YHev6sNGuUsn3Q69/VnRCFmeRd6jw0DgpLacRXiZ4XaDRcnMygGej gBfQ== 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=SIQ/P7FQ7arouhkzuzw7ujgnmYAn8fc5SJbQDjIRoc8=; b=W9YxsboJQQDaIKc1N9lHVibJJ62fg6k4UgxIpKIAmHj2ixtJfKNl79KcGwng9opPGw V4Hb+eQeRkriOxXwrYrZt7uMhJUj6lHFz0+YBc38kKRhDXzDinosBmN06HP3dR2dxcpL Xgi0dcdx4kMR35eoxE8RBSyTDVl/Ug9cgFPPdNIGYQqe6f9ElbFL843ShjbtpsiYyY8z clawt2nzs01wjHrEel/ovz+/oRz09R/Zd2DDXXZlbnCjtSuGe7geJvfBsemB/E0PWMud AgmKc7F6Bp3yQDud2I6Zkms32M2m5yQe3ic+utonnSN/tt8wuHgmyCEhlZCEboe+9YGc llzQ== X-Gm-Message-State: APjAAAXy6AU7fe38K/cuEGqoq1LV6SNxg0ba6spAuda00JZbfXH5arl+ zx5CzmlJFy4cS4CIhZ4nYU/xa7+bzBGKXQ== X-Google-Smtp-Source: APXvYqySOhB6bsGxRJL14qL4zfc7yEEZ6WaPGhECTv6RzAf3qUkWVYVBBPQQfWEucK5zf07UQ/fhVg== X-Received: by 2002:ac8:c4f:: with SMTP id l15mr12951958qti.177.1575643569734; Fri, 06 Dec 2019 06:46:09 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id d13sm5990070qkk.136.2019.12.06.06.46.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:09 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 16/44] btrfs: hold a ref on the root in fixup_tree_root_location Date: Fri, 6 Dec 2019 09:45:10 -0500 Message-Id: <20191206144538.168112-17-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Looking up the inode from an arbitrary tree means we need to hold a ref on that root. Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 3dc9bc9530e2..5fa39ac23472 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5689,6 +5689,10 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info, err = PTR_ERR(new_root); goto out; } + if (!btrfs_grab_fs_root(new_root)) { + err = -ENOENT; + goto out; + } *sub_root = new_root; location->objectid = btrfs_root_dirid(&new_root->root_item); @@ -5927,6 +5931,8 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) } else { inode = btrfs_iget(dir->i_sb, &location, sub_root); } + if (root != sub_root) + btrfs_put_fs_root(sub_root); srcu_read_unlock(&fs_info->subvol_srcu, index); if (!IS_ERR(inode) && root != sub_root) { From patchwork Fri Dec 6 14:45:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276615 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 1DB4D13B6 for ; Fri, 6 Dec 2019 14:46:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F008E20706 for ; Fri, 6 Dec 2019 14:46:13 +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="dhY/9Vw7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726491AbfLFOqN (ORCPT ); Fri, 6 Dec 2019 09:46:13 -0500 Received: from mail-qv1-f65.google.com ([209.85.219.65]:40036 "EHLO mail-qv1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqM (ORCPT ); Fri, 6 Dec 2019 09:46:12 -0500 Received: by mail-qv1-f65.google.com with SMTP id i3so2720427qvv.7 for ; Fri, 06 Dec 2019 06:46:12 -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=7VlXuMmW6vkmcDdGX4eAWzkcyjFhrGSVL6+MEgHg3UY=; b=dhY/9Vw78RU8eZX43NuLpRJ3Nd+dSU2LBgeCMMib6PUkx0SKwDt6HOlD2w1MGOuqcJ 00jCf1/VAj13icfFsd8FKYvAi4BnXHEDr0Xw9tTEXNh5yU+fK+IHqpg/vzql71VuJHgp UJxcDFpzjCHJCQos/IsASWFl457i9dosvRm7RovcQl5kmPGY2dPNHUpMto9qeN2QJ+Ja Zh4WwGlC4+nVf2V5Rh2r03+Zj4KjLwHTVXoyYYJb6iS+xzVY+C6S47htY025zs476Z2S J93SzsqIGuHBPW7iVX1IxDmrr/CaGMyEZDUKjxvcegux65C/jOLV6jPhtCZC4WelVMx+ O5Kg== 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=7VlXuMmW6vkmcDdGX4eAWzkcyjFhrGSVL6+MEgHg3UY=; b=sa0B5bVWhwlpS+T6SKIWBXD1JAWkKX1E1r8gOCm5yArp2D7zYojt26qMIu+noZnyBK 8aCIRXWHiUQo+Q6EWZO6cUz9vEifacp132JuuRn6ValS+YDUlFYU6Y+6YW5bnxLGgZI/ Cb0YzZZEfAmTOj+8raJTdqhXvj1GHlAsZNOwGFfbAMVNzfAXU8Jq7g2CnPP3/U9HNGiD ipif1ahXPoymFJyYvyTTgJ4EK2xlQ7VDc8lPx5K4NW2Gwe0fKbRJkjVhSGZZAdLn60jE eJIWdq7ziy7AB6P46jMD9aMoc7j8OqCWg9GyJIJ7jV0yOTs/5BBE3N2TVYi/JM/utjMJ XFXg== X-Gm-Message-State: APjAAAXKDCo/oZ9z+64+Ppt9aGL6udUanjXyGhhjUy6v58qTE1+wGeAR 8q/GnwSIMd3w2m2vbpdbvpZmOe005FgVqw== X-Google-Smtp-Source: APXvYqz6qP7GiwNZik5O8RMH49TRVR6UJr6H1b7WAhU40+Dx8qIFbgI7eWdsF01W5MBYtKt20aCaqQ== X-Received: by 2002:a0c:f792:: with SMTP id s18mr13010839qvn.118.1575643571444; Fri, 06 Dec 2019 06:46:11 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id r41sm6688039qtr.60.2019.12.06.06.46.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:10 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 17/44] btrfs: hold a ref on the root in create_subvol Date: Fri, 6 Dec 2019 09:45:11 -0500 Message-Id: <20191206144538.168112-18-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're creating the new root here, but we should hold the ref until after we've initialized the inode for it. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 95b0488b7da6..29c363a70fe7 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -672,10 +672,16 @@ static noinline int create_subvol(struct inode *dir, btrfs_abort_transaction(trans, ret); goto fail; } + if (!btrfs_grab_fs_root(new_root)) { + ret = -ENOENT; + btrfs_abort_transaction(trans, ret); + goto fail; + } btrfs_record_root_in_trans(trans, new_root); ret = btrfs_create_subvol_root(trans, new_root, root, new_dirid); + btrfs_put_fs_root(new_root); if (ret) { /* We potentially lose an unused inode item here */ btrfs_abort_transaction(trans, ret); From patchwork Fri Dec 6 14:45:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276617 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 0A1A713B6 for ; Fri, 6 Dec 2019 14:46:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DCF8821835 for ; Fri, 6 Dec 2019 14:46:15 +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="s7JlJCCe" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726506AbfLFOqO (ORCPT ); Fri, 6 Dec 2019 09:46:14 -0500 Received: from mail-qv1-f65.google.com ([209.85.219.65]:34772 "EHLO mail-qv1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqO (ORCPT ); Fri, 6 Dec 2019 09:46:14 -0500 Received: by mail-qv1-f65.google.com with SMTP id o18so2736171qvf.1 for ; Fri, 06 Dec 2019 06:46:14 -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=NuQnZrNm+zWRDf4U3gbj/yt1uwasHUr7OtgrIEG2bHM=; b=s7JlJCCeIwuSiKcBxRqn0ukfy1uOqIRNgclWp7zMbPhHi/TP3ImE6FjQAZBHH4joOy UI3bhBuouBVHY8G6UaT5coGzsDXUi4s6hcGexEuj9ksZSCB9m78efY9oO2q+mi+hEgzo 8LXh9cYqYwDgmoQOWB2K2gBC3HPTf4DZe209qb2UnNTn2eqs2vCar08DgIT5LtolmRce 8XNeLeOcHw5dMEt27N1y9HOX0hFGxJmHjOMcakIRggvmnWWk+0iBkaOM70w17cLBUhjN dxWG1QFC2PoJQXjlQmziMX3m+k3qFUWbnpbLt2kVlVfmvYBmkWOjP1ePt/XXRRRnmQsV 0vvg== 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=NuQnZrNm+zWRDf4U3gbj/yt1uwasHUr7OtgrIEG2bHM=; b=mXzI1WfGpp2F7hlet/2urthjRkWqyFmCzhNhex0hzmHbcsZZYK0nLTyrtNrUvCXPXe Z/eU1SVBFsEdRB30YbOPx2Ma11fAHFOg74pMg0hUtEr8SjhlrwxmGUXPOHuA9Ws4zgB0 /M+U9DMLn1xA80wOhk7u5inzGl50wdhUfjlQpleRQzCPfxJutKiX2yKzqyxYSoutp01R naNtawLODhHMKYprRe8tu+2Bbqnj7zooCe0NK341+S4h6NXetpFhwvHdxvwfO6VGSkqE LOGbz9pOYPbetS7o8qNZ9JIlMzuDFP001YYkmHW5+SosS9azJ+u9ADrDa3Sw1IYVCHKh 7ObA== X-Gm-Message-State: APjAAAWo+dMIslgqGgzfOdtvjk2XSagv6gju9skrHLl2peC9rPQPRE88 99ko47UveGS2M7LWF6luGaZ01zcTXHI+iw== X-Google-Smtp-Source: APXvYqySAOuj6/RmFePM7E0yOzLMtK9L9Om1UQjy7D9v7rno+2/ipIF3WOnUjQ87R3De5duUPB8Yjw== X-Received: by 2002:a0c:d6c8:: with SMTP id l8mr13094291qvi.44.1575643573214; Fri, 06 Dec 2019 06:46:13 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id f26sm6462532qtv.77.2019.12.06.06.46.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:12 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 18/44] btrfs: hold a ref on the root in search_ioctl Date: Fri, 6 Dec 2019 09:45:12 -0500 Message-Id: <20191206144538.168112-19-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup a arbitrary fs root, we need to hold a ref on that root. If we're using our own inodes root then grab a ref on that as well to make the cleanup easier. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 29c363a70fe7..e01363cd2bbe 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2180,7 +2180,7 @@ static noinline int search_ioctl(struct inode *inode, if (sk->tree_id == 0) { /* search the root of the inode that was passed */ - root = BTRFS_I(inode)->root; + root = btrfs_grab_fs_root(BTRFS_I(inode)->root); } else { key.objectid = sk->tree_id; key.type = BTRFS_ROOT_ITEM_KEY; @@ -2190,6 +2190,10 @@ static noinline int search_ioctl(struct inode *inode, btrfs_free_path(path); return PTR_ERR(root); } + if (!btrfs_grab_fs_root(root)) { + btrfs_free_path(path); + return -ENOENT; + } } key.objectid = sk->min_objectid; @@ -2214,6 +2218,7 @@ static noinline int search_ioctl(struct inode *inode, ret = 0; err: sk->nr_items = num_found; + btrfs_put_fs_root(root); btrfs_free_path(path); return ret; } From patchwork Fri Dec 6 14:45:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276619 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 84069138D for ; Fri, 6 Dec 2019 14:46:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 62B1421835 for ; Fri, 6 Dec 2019 14:46:18 +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="uVE3+hOY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726516AbfLFOqR (ORCPT ); Fri, 6 Dec 2019 09:46:17 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:44350 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqQ (ORCPT ); Fri, 6 Dec 2019 09:46:16 -0500 Received: by mail-qt1-f193.google.com with SMTP id g17so1376113qtp.11 for ; Fri, 06 Dec 2019 06:46:16 -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=HltDQJl7stAB1vD8G+8gZKXtWOW2fcNixCaDMOY4h3g=; b=uVE3+hOYCdkUwOFWnOja5PA46E5LJl8rKLa6ielCevlw3vkHBmQL/rhxUFHhFBwWqR HZqMa1vs+WviEGBWVRYctbXUr0zaclHz5FgxS9H1haDrvXgQkn6H6jZwXe+khCA3fewN WXmtaIItPifcb8+Af57y0cLv53zW+OMJKHLGEzN+V/dDrdhFX6a3LwrOB1eeTSejjGB2 51tvLivYhTaiq/mzhxJVnUMvDheHL1JxkuCZoTTuIBXVtdm40gNeDp6dMYwkM0Ri8LOf 8LAQ66o6C0QgYjpx58nuChTXGpG5sadv0ENzOMrSki4FUYcEcmq6BG11jTww0duGzC0k JdGw== 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=HltDQJl7stAB1vD8G+8gZKXtWOW2fcNixCaDMOY4h3g=; b=U3nZ9MVH0+YvXJnMeGXW1UXitMHyZNLJAxkXnd0fnwyn6b5IdI5ne5/jxneSXCAfcb UzHS6SAOmnt43h7BaE7jbzothb8LFMn5th1DQLbMUnMH+Xzl1W98KxAZBqjOA2NvsoKM +E/+Xuyw4RQk97XTh6+NJnomPr9llMXkSQwRmB8OYRnw7CbHqJES/Je38SjMZOX3cXov Ljdr59O0M8gBXtGoI+pLf6KiO7hXrGHitldNolxj2J7j+O0NDOhaEFxapSjy+kxcCQDH zGIeHMNUA1ommTgNCBWqkIZlcd8bP2Og2NgS/+ZsCs4BxOJFSmymRzGH2NugzJ22EL0K UHlQ== X-Gm-Message-State: APjAAAUJ76gIW8x1fNBkg4DA3kJQFE+eH9Xz5h4AGCBi7DXNN6VE6PFY EXH0eMxiyP7DmP/7gZnRK1Az63GrLzPs0g== X-Google-Smtp-Source: APXvYqzeVxi1Wa/7YFRhVNZGHYNh8dcAQmMonAGoeXQNE/XlDqh6SLVsnkWxAhiLTS9VOcAOgCUm0g== X-Received: by 2002:ac8:1afc:: with SMTP id h57mr12877188qtk.250.1575643575238; Fri, 06 Dec 2019 06:46:15 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y3sm233900qti.57.2019.12.06.06.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:14 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 19/44] btrfs: hold a ref on the root in btrfs_search_path_in_tree Date: Fri, 6 Dec 2019 09:45:13 -0500 Message-Id: <20191206144538.168112-20-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up an arbitrary fs root, we need to hold a ref on it while we're doing our search. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index e01363cd2bbe..b8b5432423e6 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2328,6 +2328,12 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, root = btrfs_get_fs_root(info, &key, true); if (IS_ERR(root)) { ret = PTR_ERR(root); + root = NULL; + goto out; + } + if (!btrfs_grab_fs_root(root)) { + ret = -ENOENT; + root = NULL; goto out; } @@ -2378,6 +2384,8 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, name[total_len] = '\0'; ret = 0; out: + if (root) + btrfs_put_fs_root(root); btrfs_free_path(path); return ret; } From patchwork Fri Dec 6 14:45: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: 11276621 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 55D43138D for ; Fri, 6 Dec 2019 14:46:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3456921835 for ; Fri, 6 Dec 2019 14:46:20 +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="X2noEWcL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726538AbfLFOqT (ORCPT ); Fri, 6 Dec 2019 09:46:19 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:46274 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726268AbfLFOqS (ORCPT ); Fri, 6 Dec 2019 09:46:18 -0500 Received: by mail-qt1-f194.google.com with SMTP id 38so7297379qtb.13 for ; Fri, 06 Dec 2019 06:46:17 -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=oc0fPepNq7xu/SGSZfzXEwOFvheWAxvSaU04owUSiAc=; b=X2noEWcLaHYQFK9TBPYSvRHEOYkf1AG7KWe8Pc6FVKM1/RU87s9rPchklRDeeMDQEj 5jmK5Rdgey+E/FRKYQpZkNFndQZ+khWoDGqAbU+nBM4BCS5lRKOZmsXn0WccFS2KgUFM G2zmM0k+IzZJwOANjz2tZXdj5poyrorY1wsxpLJL76XkwkPkLopQhDHrnCho/y2jpy4e M01HKzT4PFrUdeIENernAASx8oB7NFZEXCsNvLr89RE9QySS5Egn4nXvJx+qrpyoWM4D JzUBfOljvbBhB6MyueBOLsYrRWZwCGZurXPFM0gjLBYEHZ+yvIi9+XNuyIu0vUsMGlwP gLpw== 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=oc0fPepNq7xu/SGSZfzXEwOFvheWAxvSaU04owUSiAc=; b=aBAJd7egi2JK8c6d/TVP7W2+1oiMEVYwhT8N3YSrVaXgn30xV1NIgZkp0+zE0vYT10 CVMJQHdMj+NqSTuMeWqJH9yRnyhs8zg7F06+7FdahesyG3DCv/PndUJlEL/YRjsE8qMW aHQrzAt5+NxeZmOgOJGBwyRHiv6d4w6rxRRXtLHp/oXnU9ju+umZr7ZwFdBcY+Wt4v/M trPgPpaVb7IWhr3AQ17MZYg9M7lWbqK9m4VXtq4wKxkXRxsCICzDZw2dFuR16ZSDktBJ 0eZMLULS4OixMYOdRA6OCQCifCgWLiTeeiqmkhU7KIbdlswYqfMYRQnDfdallusqH2Xe 2qkA== X-Gm-Message-State: APjAAAW28EgpRoMnkOuUIAYzO4PdrPnDm2Wl++9QaPvaAgeFSwNLOYSL nQjTeCcU68Um3Y32792zhYKWRk3Zwdlf+w== X-Google-Smtp-Source: APXvYqx7Kh6RVIajzn1cJgAPDaoWvH3vh4IIr0rvy+rwbVlhATTJcslLS357WmOQO896O2fNcAtcuQ== X-Received: by 2002:ac8:6f3b:: with SMTP id i27mr13091419qtv.145.1575643576874; Fri, 06 Dec 2019 06:46:16 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id e2sm2953368qkl.3.2019.12.06.06.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:16 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 20/44] btrfs: hold a ref on the root in btrfs_search_path_in_tree_user Date: Fri, 6 Dec 2019 09:45:14 -0500 Message-Id: <20191206144538.168112-21-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 wander into a different root, so grab a ref on the root we look up. Later on we make root = fs_info->tree_root so we need this separate out label to make sure we do the right cleanup only in the case we're looking up a different root. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index b8b5432423e6..2eb5a5dc07bd 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2432,6 +2432,10 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, ret = PTR_ERR(root); goto out; } + if (!btrfs_grab_fs_root(root)) { + ret = -ENOENT; + goto out; + } key.objectid = dirid; key.type = BTRFS_INODE_REF_KEY; @@ -2439,15 +2443,15 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, while (1) { ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); if (ret < 0) { - goto out; + goto out_put; } else if (ret > 0) { ret = btrfs_previous_item(root, path, dirid, BTRFS_INODE_REF_KEY); if (ret < 0) { - goto out; + goto out_put; } else if (ret > 0) { ret = -ENOENT; - goto out; + goto out_put; } } @@ -2461,7 +2465,7 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, total_len += len + 1; if (ptr < args->path) { ret = -ENAMETOOLONG; - goto out; + goto out_put; } *(ptr + len) = '/'; @@ -2472,10 +2476,10 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, ret = btrfs_previous_item(root, path, dirid, BTRFS_INODE_ITEM_KEY); if (ret < 0) { - goto out; + goto out_put; } else if (ret > 0) { ret = -ENOENT; - goto out; + goto out_put; } leaf = path->nodes[0]; @@ -2483,26 +2487,26 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, btrfs_item_key_to_cpu(leaf, &key2, slot); if (key2.objectid != dirid) { ret = -ENOENT; - goto out; + goto out_put; } temp_inode = btrfs_iget(sb, &key2, root); if (IS_ERR(temp_inode)) { ret = PTR_ERR(temp_inode); - goto out; + goto out_put; } ret = inode_permission(temp_inode, MAY_READ | MAY_EXEC); iput(temp_inode); if (ret) { ret = -EACCES; - goto out; + goto out_put; } if (key.offset == upper_limit.objectid) break; if (key.objectid == BTRFS_FIRST_FREE_OBJECTID) { ret = -EACCES; - goto out; + goto out_put; } btrfs_release_path(path); @@ -2513,6 +2517,7 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, memmove(args->path, ptr, total_len); args->path[total_len] = '\0'; + btrfs_put_fs_root(root); btrfs_release_path(path); } @@ -2551,6 +2556,9 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, out: btrfs_free_path(path); return ret; +out_put: + btrfs_put_fs_root(root); + goto out; } static noinline int btrfs_ioctl_ino_lookup(struct file *file, From patchwork Fri Dec 6 14:45: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: 11276623 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 6A074138D for ; Fri, 6 Dec 2019 14:46:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 47FC121835 for ; Fri, 6 Dec 2019 14:46:21 +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="sm5fhQ/r" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726552AbfLFOqU (ORCPT ); Fri, 6 Dec 2019 09:46:20 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:43848 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726527AbfLFOqT (ORCPT ); Fri, 6 Dec 2019 09:46:19 -0500 Received: by mail-qt1-f196.google.com with SMTP id q8so7326135qtr.10 for ; Fri, 06 Dec 2019 06:46:19 -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=nY6S260pkkxadnMHJ613U0xHjLJQFjsfniOa6pD87ek=; b=sm5fhQ/rLwGCL2pAq4rl9aogFlSkegE15usX3CyYsWesuXLDSxnJGzDhE/6OZK9Why StbKnrLyjF78ToROC2u/TKK5WIOvaABHnZCyWh31i0unxp1aWwMBSis4QlXuySD442tx OuUzTJHjMr8GjTXCx7LVw+CfaZs9hJ+uOzIeguDEzYY2OHhRxGaefNMD6OVBgBL+p0au 5aC/5r7K1NVIR6kuU/oD31JdHwHA1m+YCGZB7JfLEzK02FoI3/Gi7U7B+FjaJDs6L5Iu TcGueF8vKojgPnEuVNU1tdA6Gz8mM+p2z0kwzAzPBt4yGM9qzExPgBWZ+rPPKI6NRJ/N FzRA== 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=nY6S260pkkxadnMHJ613U0xHjLJQFjsfniOa6pD87ek=; b=UtTIdTh2RG2O6eG8RRRSxAiIVYb3qFnSEaHgguZURThdricRhQUC3wAYL95BNgIUrY MOPY1a5TY/Jdh0H/kQVRe1BUTw4UNeLpxX5gdj9mdYwgjzi8pX4W7ziaax+/XPBFHWow Dpz6981Cua7w/PpWSMvmseRVqnjxZFg8mkpuJzqm7klUL07HrAVvfeg+IhXLHNgcC1vz wAtgV/Od8jDus2vLIH1aHY3+2RCeNAJfvrGHYOWwcvClCkEkwbssU2Dq2YaW+tQld2+p y+qCl2LKlSR5P5T0dV8SkWHWDwKmVxfgyq96G3Q8jdNCdzp3iYAr6XwB/BOlLBVQ78WO eeKw== X-Gm-Message-State: APjAAAW1ymf8lIvVj1k2IYI8ER29mCURuzFQrZ2/hSDnTrVPxLjoKeCA iWBdnYUmpw40vEVHfaqQtB90s212e3Ea3w== X-Google-Smtp-Source: APXvYqzOQIsMHTiDI42scemRuCRnV1pknaErflLafJzsAa77NlP0ez/COx2bYhSbTEUXNBYfMVAM6w== X-Received: by 2002:ac8:28a1:: with SMTP id i30mr13381075qti.245.1575643578451; Fri, 06 Dec 2019 06:46:18 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id f22sm6738396qtc.43.2019.12.06.06.46.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:17 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 21/44] btrfs: hold a ref on the root in btrfs_ioctl_get_subvol_info Date: Fri, 6 Dec 2019 09:45:15 -0500 Message-Id: <20191206144538.168112-22-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up whatever root userspace has given us, we need to hold a ref throughout this operation. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 2eb5a5dc07bd..2797a1249f25 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2683,6 +2683,10 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp) root = btrfs_get_fs_root(fs_info, &key, true); if (IS_ERR(root)) { ret = PTR_ERR(root); + goto out_free; + } + if (!btrfs_grab_fs_root(root)) { + ret = -ENOENT; goto out; } root_item = &root->root_item; @@ -2760,6 +2764,8 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp) ret = -EFAULT; out: + btrfs_put_fs_root(root); +out_free: btrfs_free_path(path); kzfree(subvol_info); return ret; From patchwork Fri Dec 6 14:45: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: 11276625 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 ADDAF138D for ; Fri, 6 Dec 2019 14:46:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8CE4B21835 for ; Fri, 6 Dec 2019 14:46:23 +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="CJeKmP7N" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726566AbfLFOqW (ORCPT ); Fri, 6 Dec 2019 09:46:22 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41229 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726527AbfLFOqV (ORCPT ); Fri, 6 Dec 2019 09:46:21 -0500 Received: by mail-qt1-f193.google.com with SMTP id v2so7333853qtv.8 for ; Fri, 06 Dec 2019 06:46:20 -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=wa/TiQ9rxnUiJWYhskdyV3ZEJ3PZuit08QhB03+OCzQ=; b=CJeKmP7N8Rdm7dQNhRw5QUzM9wFz3BxmniwuLqba6ZIxNS+KmwybwovFhhQKtcvoVO C08fCUFjs2SH1n7+6WFlpGsORMkJV+TcIaJ20nfCrw+GnlqpYslkHAsjh1nGcaImLGcX VV0frYvmUduNr51Ky8ejbUoMstJutHSdqR/d53VT0ebkr3GEH0T9vKHEhEuYLf3lWqe3 E1r6eyeHNrsZqA72PUGfsHa1c+GqfTote+3VZRSluzviXs69rR7ctr5Mm5iXWiIkcw9z lTQ3QF02blCP4IecBM5UUU8lMMHPPZh2Lgoy58YF/qtwgNiM2P6m3xEfgCIxHa9h809g Z8UQ== 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=wa/TiQ9rxnUiJWYhskdyV3ZEJ3PZuit08QhB03+OCzQ=; b=DMpk9azxP/KwrI7APjoMCQH1Rj9BkZCaPquUl4QtCoh8v7w361Mg+zCStc7mqDEabv EFdDhQs1GdzusZXRMG4sDKlZLCcTHhjNsLGYZZZlsVJPzy14t0rH0uJ6eljtxr5oVFCN t2rtoByf+jQd9MvfP4GB/3K3OU9+WX7HscO1sfWfzOdm3gEg5nhKTEn1ojcGyPDfqqxV DMS8bCErPIvf++9DHkTw6e8dJ/YLm/a/pUnaThxLngutZeMOiRsmjvLrFBmFeS1S1AL1 Uz7qmkUhvZ3DpnCffRmvqyHvBn2htdLxoPd+8hEr/p59RaPyrw8bWWyuSUDEY9dnGxuI Fnng== X-Gm-Message-State: APjAAAV1ZOPFOsIjDOhfZzMZe9vdeGqx968RVjyCYJPbilPom+ihC3tT CGZw7+Rn6TuVe14x5/mee0meoVBbtBtFqw== X-Google-Smtp-Source: APXvYqxg5wwzZfEkZrNnJ+RiFbn80Pn3ro9BhbAoHCPwzppjwMsgaYbhggAvfkhR6WOQUxAObTYZOg== X-Received: by 2002:ac8:7007:: with SMTP id x7mr12448244qtm.89.1575643580116; Fri, 06 Dec 2019 06:46:20 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id e6sm5854155qkg.89.2019.12.06.06.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:19 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 22/44] btrfs: hold ref on root in btrfs_ioctl_default_subvol Date: Fri, 6 Dec 2019 09:45:16 -0500 Message-Id: <20191206144538.168112-23-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up an arbitrary fs root here, we need to hold a ref on the root for the duration. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 2797a1249f25..a3223bec3f5b 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -3993,7 +3993,7 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) struct btrfs_root *new_root; struct btrfs_dir_item *di; struct btrfs_trans_handle *trans; - struct btrfs_path *path; + struct btrfs_path *path = NULL; struct btrfs_key location; struct btrfs_disk_key disk_key; u64 objectid = 0; @@ -4024,44 +4024,50 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) ret = PTR_ERR(new_root); goto out; } - if (!is_fstree(new_root->root_key.objectid)) { + if (!btrfs_grab_fs_root(root)) { ret = -ENOENT; goto out; } + if (!is_fstree(new_root->root_key.objectid)) { + ret = -ENOENT; + goto out_free; + } path = btrfs_alloc_path(); if (!path) { ret = -ENOMEM; - goto out; + goto out_free; } path->leave_spinning = 1; trans = btrfs_start_transaction(root, 1); if (IS_ERR(trans)) { - btrfs_free_path(path); ret = PTR_ERR(trans); - goto out; + goto out_free; } dir_id = btrfs_super_root_dir(fs_info->super_copy); di = btrfs_lookup_dir_item(trans, fs_info->tree_root, path, dir_id, "default", 7, 1); if (IS_ERR_OR_NULL(di)) { - btrfs_free_path(path); + btrfs_release_path(path); btrfs_end_transaction(trans); btrfs_err(fs_info, "Umm, you don't have the default diritem, this isn't going to work"); ret = -ENOENT; - goto out; + goto out_free; } btrfs_cpu_key_to_disk(&disk_key, &new_root->root_key); btrfs_set_dir_item_key(path->nodes[0], di, &disk_key); btrfs_mark_buffer_dirty(path->nodes[0]); - btrfs_free_path(path); + btrfs_release_path(path); btrfs_set_fs_incompat(fs_info, DEFAULT_SUBVOL); btrfs_end_transaction(trans); +out_free: + btrfs_put_fs_root(new_root); + btrfs_free_path(path); out: mnt_drop_write_file(file); return ret; From patchwork Fri Dec 6 14:45: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: 11276627 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 3559D138D for ; Fri, 6 Dec 2019 14:46:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 12B6C20706 for ; Fri, 6 Dec 2019 14:46:25 +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="Q8SnzfxU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726584AbfLFOqY (ORCPT ); Fri, 6 Dec 2019 09:46:24 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:32929 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726527AbfLFOqX (ORCPT ); Fri, 6 Dec 2019 09:46:23 -0500 Received: by mail-qk1-f193.google.com with SMTP id c124so6706211qkg.0 for ; Fri, 06 Dec 2019 06:46:22 -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=NxeCtVzdZRt08c2KEp652MF/MxB6kCndMLtWPCVne6s=; b=Q8SnzfxUIUCRryxt2W8G6d6zrL5sn/QTPyAfTFOB3mBBmltH2rfkZV+u9pBaEw8oie JhDN+Wu7k/h8kRe/SmedoS3PbPPT/aDWT2VBBthRNq204rwIRf1KtJRLmJt4uRacNLSQ 7PYR9spoFWKJdz2Bk9jWMBUOP/cOX9YR1/tn7VWTg97QAx1BZ7iVCABltN369vgauuwc 5SnFuQCIglQxao0j+fqX0j97AYQke75oilzQOGwoQ3R1W9YeGk6H45iFXGHdF28R24qM 0JDa/rV0TRtuxG/VrrEoxmqB2v8qyXixe0ZXufhepfXxA+fvBBR9l+7s7xAqBPf5rcbl df8g== 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=NxeCtVzdZRt08c2KEp652MF/MxB6kCndMLtWPCVne6s=; b=SxVqEU7wzov7sWmteZ0nHElCxKb/ZOmmkemQ0/eCQUqXI4DAT+hr39dYFrj2nE7z0b GxpXy31LcQj5huxZM+Q2prHXY9GyYmDZBC41G6yBPJqDxcYo5q97PgkRudNIfv0uATga iyI5aGF5eTTjNjup+4ctT0GszktG8RmHdLeFkFKVm6lETnMf2wTcJPLVtVhG0LpBC1rZ 1tG6bdFiGml5GUTzdt1Lwd8K2gNF7RPxeaqX3QznQsGJ5pMlOWjni3oVS0RhZaDeRrxx /F/Jp33uhuGzsys3V419/U6NhMA6spD0hvsrLO1hT3nym0EllL2V9LAwvLqOC4jJEUkO QFEw== X-Gm-Message-State: APjAAAWXVTqtslqTSU44pucuILSURriyWL6YHqqj0ZvLQh4wXPQ3kF+w YH5CkAp4lqVM2YS7wuTzuMsyN4G8UEC6SQ== X-Google-Smtp-Source: APXvYqzRb0mBql4Ly/5QudSsJ61k5eNI1dKFilApVmh3F42sDhjAVng7XRyvGmhZFuiRmHUj5b0aew== X-Received: by 2002:a05:620a:685:: with SMTP id f5mr12946046qkh.201.1575643581796; Fri, 06 Dec 2019 06:46:21 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id z12sm1305554qki.64.2019.12.06.06.46.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:21 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 23/44] btrfs: hold a ref on the root in build_backref_tree Date: Fri, 6 Dec 2019 09:45:17 -0500 Message-Id: <20191206144538.168112-24-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 This is trickier than the previous conversions. We have backref_node's that need to hold onto their root for their lifetime. Do the read of the root and grab the ref. If at any point we don't use the root we discard it, however if we use it in our backref node we don't free it until we free the backref node. Any time we switch the root's for the backref node we need to drop our ref on the old root and grab the ref on the new root, and if we dupe a node we need to get a ref on the root there as well. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 3f11491e01eb..473bbbd58d31 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -256,6 +256,8 @@ static void free_backref_node(struct backref_cache *cache, { if (node) { cache->nr_nodes--; + if (node->root) + btrfs_put_fs_root(node->root); kfree(node); } } @@ -859,6 +861,10 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, err = PTR_ERR(root); goto out; } + if (!btrfs_grab_fs_root(root)) { + err = -ENOENT; + goto out; + } if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state)) cur->cowonly = 1; @@ -867,10 +873,12 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, /* tree root */ ASSERT(btrfs_root_bytenr(&root->root_item) == cur->bytenr); - if (should_ignore_root(root)) + if (should_ignore_root(root)) { + btrfs_put_fs_root(root); list_add(&cur->list, &useless); - else + } else { cur->root = root; + } break; } @@ -883,6 +891,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, ret = btrfs_search_slot(NULL, root, node_key, path2, 0, 0); path2->lowest_level = 0; if (ret < 0) { + btrfs_put_fs_root(root); err = ret; goto out; } @@ -898,6 +907,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, root->root_key.objectid, node_key->objectid, node_key->type, node_key->offset); + btrfs_put_fs_root(root); err = -ENOENT; goto out; } @@ -909,15 +919,18 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, if (!path2->nodes[level]) { ASSERT(btrfs_root_bytenr(&root->root_item) == lower->bytenr); - if (should_ignore_root(root)) + if (should_ignore_root(root)) { + btrfs_put_fs_root(root); list_add(&lower->list, &useless); - else + } else { lower->root = root; + } break; } edge = alloc_backref_edge(cache); if (!edge) { + btrfs_put_fs_root(root); err = -ENOMEM; goto out; } @@ -927,6 +940,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, if (!rb_node) { upper = alloc_backref_node(cache); if (!upper) { + btrfs_put_fs_root(root); free_backref_edge(cache, edge); err = -ENOMEM; goto out; @@ -974,8 +988,10 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, edge->node[LOWER] = lower; edge->node[UPPER] = upper; - if (rb_node) + if (rb_node) { + btrfs_put_fs_root(root); break; + } lower = upper; upper = NULL; } @@ -1212,7 +1228,8 @@ static int clone_backref_node(struct btrfs_trans_handle *trans, new_node->level = node->level; new_node->lowest = node->lowest; new_node->checked = 1; - new_node->root = dest; + new_node->root = btrfs_grab_fs_root(dest); + ASSERT(new_node->root); if (!node->lowest) { list_for_each_entry(edge, &node->lower, list[UPPER]) { @@ -2581,7 +2598,9 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, BUG_ON(next->new_bytenr); BUG_ON(!list_empty(&next->list)); next->new_bytenr = root->node->start; - next->root = root; + btrfs_put_fs_root(next->root); + next->root = btrfs_grab_fs_root(root); + ASSERT(next->root); list_add_tail(&next->list, &rc->backref_cache.changed); __mark_block_processed(rc, next); @@ -3053,7 +3072,9 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, btrfs_record_root_in_trans(trans, root); root = root->reloc_root; node->new_bytenr = root->node->start; - node->root = root; + btrfs_put_fs_root(node->root); + node->root = btrfs_grab_fs_root(root); + ASSERT(node->root); list_add_tail(&node->list, &rc->backref_cache.changed); } else { path->lowest_level = node->level; From patchwork Fri Dec 6 14:45: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: 11276629 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 7EC3313B6 for ; Fri, 6 Dec 2019 14:46:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5CB1C20706 for ; Fri, 6 Dec 2019 14:46: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="eCKpOwAd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726596AbfLFOqZ (ORCPT ); Fri, 6 Dec 2019 09:46:25 -0500 Received: from mail-qv1-f68.google.com ([209.85.219.68]:45712 "EHLO mail-qv1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726589AbfLFOqY (ORCPT ); Fri, 6 Dec 2019 09:46:24 -0500 Received: by mail-qv1-f68.google.com with SMTP id c2so2712433qvp.12 for ; Fri, 06 Dec 2019 06:46: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=tqjFPaSIMWGK3trwS7bmGXN/H40JuxpLUV/LPzvJNpQ=; b=eCKpOwAdpiWjx5E7PgYbwjVDxPH4UFBxfvnGpYzthQqpJGZCiGI6QR8YAJeXGrJxMZ BspMDvpww31W5QIsX2Fw3rqXYGZuUQvMMToQLL2xh773Mz8x5woIjDYxqbfIGTmDysrV fVXwuqbirqIZlNv7cy6wDkprA7LULBmIsVE/IT7aKcePIEbcIQi+MpEPizZgx2zrQsaL hVEdYtbpC/UHqoBTrLVVJTMjWe/9lAlUQ3UhjN5gm7BukKsw46Ye2auq8bCcsAEozMWN pgFe+9nNKHYrbhIb6Cc++sbHoSE6mkOyTY01myAzCHsm+islt8DFtAbkiP4eUHjg/syn szQw== 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=tqjFPaSIMWGK3trwS7bmGXN/H40JuxpLUV/LPzvJNpQ=; b=QSml2iSz1anssJMvGe5tI6CGJ+DncWXMhdUNtaL7JhJC1ZrwJiO34Ti6Bzy3LmYLWK OU0QKDvDxemG4O2ZeQpRCW0OH902BJxFz7H0HobX6h/4mVunLN6h7B4QcR0zJ527pe/5 53OtEnIDnLDJY47NOamwQUoBefCyfMD+r4phn0mJkzWfdrhTetS5wZBUzcWCJl/oGb7u 7IOsLBI+hEZhc96Nwg1h1vyUJwRc7USIc0yhYPE+xe34J+hXUMlkHpxCXcLc0mbPbQFT ZIiNTwKcLx3dyD/fQ8vhF7UNkD04AibYNhD0CQ+WOaFiVb9tbJrycF3fOKJC5s8elGIP t8Kg== X-Gm-Message-State: APjAAAWwzlyegzejuxvfiMawZqqLHAKuEyoVCwyExvupMHqPSyz1pZcE jo/KOI25Qydi02QgkrsQNWd5bDpR2t1kcg== X-Google-Smtp-Source: APXvYqzgdB727/4ivyCehh8ABdjA6WZNgJb/BSOOxgR/nLLSCAPgPrRAo1XefopXpcKBYD+3LKnxhA== X-Received: by 2002:a0c:e150:: with SMTP id c16mr12894086qvl.51.1575643583439; Fri, 06 Dec 2019 06:46:23 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id i4sm5851315qki.45.2019.12.06.06.46.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:22 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 24/44] btrfs: hold a ref on the root in prepare_to_merge Date: Fri, 6 Dec 2019 09:45:18 -0500 Message-Id: <20191206144538.168112-25-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up the reloc roots corresponding root, we need to hold a ref on that root. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 473bbbd58d31..19d69ce41f06 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2433,6 +2433,8 @@ int prepare_to_merge(struct reloc_control *rc, int err) list_del_init(&reloc_root->root_list); root = read_fs_root(fs_info, reloc_root->root_key.offset); + if (!btrfs_grab_fs_root(root)) + BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); @@ -2445,6 +2447,7 @@ int prepare_to_merge(struct reloc_control *rc, int err) btrfs_update_reloc_root(trans, root); list_add(&reloc_root->root_list, &reloc_roots); + btrfs_put_fs_root(root); } list_splice(&reloc_roots, &rc->reloc_roots); From patchwork Fri Dec 6 14:45:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276631 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 BD94F13B6 for ; Fri, 6 Dec 2019 14:46:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9BE9D20706 for ; Fri, 6 Dec 2019 14:46:27 +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="heiSqc+A" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726598AbfLFOq1 (ORCPT ); Fri, 6 Dec 2019 09:46:27 -0500 Received: from mail-qv1-f68.google.com ([209.85.219.68]:37450 "EHLO mail-qv1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726597AbfLFOq0 (ORCPT ); Fri, 6 Dec 2019 09:46:26 -0500 Received: by mail-qv1-f68.google.com with SMTP id t7so2733213qve.4 for ; Fri, 06 Dec 2019 06:46:25 -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=HVdhY+4MBd3q4kmJauYMe/pxqfd41KkKzQ6A+3l8tLk=; b=heiSqc+AkvZKV4YluGqum4iLf0yhrl2RRyu8u3KmIzcIzAPuoYcGtqfKhJB3rOnfhk WJiIH+pnoHK478ZPG+APWOoSAgHXMq1pDsXwj106uyEOAA1KsEFm8W5UrmRfdaGVv0J+ a6vCE/3z22nUGRDketgva6Wdpkb48hMrVuIAX7bNQfBgsvP/8GBP18DzMqym7qSwobUp ExgDHxHLgBHwBylc1xslREevDSXeS1rTU76zMkjk8gJZ+RBi0eBmpxMnWW3WrvPfJXf8 /OxOJImasA+RoW8+5fA8S8jtaaYCwti2UOGv+r0SIjUNRB5/sG9h45318seUISrd0+M2 eReg== 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=HVdhY+4MBd3q4kmJauYMe/pxqfd41KkKzQ6A+3l8tLk=; b=BYO+rMYCa76BOFP8XEbIWaea5o3eGae8MMBB6RuBsmoOKX5VABMLjjh6KEHi9MndFY vhqoLQ6Y0mdfx2hdV6LZq0YZnfUhGzf9U1BkWsuWNUGUd0iannAgg0UDRE/kyDf5NhDR 4ZrMLho7Kxkxjg3PxvEC8VS6LFk9NqFl9kWEqLcgyjhsTAueDNLBXyKtmvlANi/U0YHB 0Cb1cRmCDyQmEe3A5LC3RWBZpTMQrVlKvUZty9jvCnlb8tWl0pjT+bKhWoWAh9DOYVco mrjl2M+aV8JPODHcS74SNhA80A6gFFGVXvEfPcdOI73knFsq12BqdOvn6w2ntx3DuHUn 9Tgw== X-Gm-Message-State: APjAAAUc22H58lKfN1Lz3M2ihm4z4dqSgSXHsuoL8TcIJV/uxMu6LbaK KmYwJxDvsF3RZdYTCZPMHrbJToitNI84MQ== X-Google-Smtp-Source: APXvYqxD3za0WHsHuBQZNrwMdSeQrA9+J0vT/bi4a/f8KJAIUGgWli4SVazZKVVJQQiiQMuP7bnSLA== X-Received: by 2002:a0c:e806:: with SMTP id y6mr12605668qvn.148.1575643585094; Fri, 06 Dec 2019 06:46:25 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y3sm234039qti.57.2019.12.06.06.46.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:24 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 25/44] btrfs: hold a ref on the root in merge_reloc_roots Date: Fri, 6 Dec 2019 09:45:19 -0500 Message-Id: <20191206144538.168112-26-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up the corresponding root for the reloc root, we need to hold a ref while we're messing with it. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 19d69ce41f06..dfd3d9053301 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2505,10 +2505,13 @@ void merge_reloc_roots(struct reloc_control *rc) if (btrfs_root_refs(&reloc_root->root_item) > 0) { root = read_fs_root(fs_info, reloc_root->root_key.offset); + if (!btrfs_grab_fs_root(root)) + BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); ret = merge_reloc_root(rc, root); + btrfs_put_fs_root(root); if (ret) { if (list_empty(&reloc_root->root_list)) list_add_tail(&reloc_root->root_list, From patchwork Fri Dec 6 14:45:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276633 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 0A492138D for ; Fri, 6 Dec 2019 14:46:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DC3BF20706 for ; Fri, 6 Dec 2019 14:46:29 +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="EHKDouGM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726605AbfLFOq3 (ORCPT ); Fri, 6 Dec 2019 09:46:29 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:35701 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726597AbfLFOq2 (ORCPT ); Fri, 6 Dec 2019 09:46:28 -0500 Received: by mail-qt1-f195.google.com with SMTP id s8so7378914qte.2 for ; Fri, 06 Dec 2019 06:46:27 -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=XZBfHw2CaSGcV4Kz3t+sRB/YUfVLcSB+/pO+8o4bxc0=; b=EHKDouGM2AePlrAD2V6Bn+rVs6CsfOs6t2rAVKNjFECs+UBJ2v4/8vcqpxUHaJJhXE f6Kq9vQY2GWPp78TlSMdyzDDIBIVqnqzfz9sToGYZqHVjsLdMbqGuBSOF/FPnMvzed9X F3cyPUkbF4B3QgB2+/m1kLWLs4ZskNtd02OWB3LBWkkG2vzEu0moacCAx3WUJoVHjmNt XIFLb5TZloQbHaFVtwmOxXFt+C6gdFJn/taaQlt0oNeGRjLV6yg6zNS0yvA11o2H0n1P k06Q5QzTvnw3OxgeuYkCJZul7qGoKJdSjV6sv2DmRtb52OpAouf2LEc8pvhGKw21IB6e 9BoA== 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=XZBfHw2CaSGcV4Kz3t+sRB/YUfVLcSB+/pO+8o4bxc0=; b=es3IKdty3rYEujqdadA9ok1J85YgKKPiuMHyOTPDbyjkf/kJQAZiICpPrO/guUgk6E XXGN0yQC+lducvo0hxvX278l1bUaw4tZ0MhGk6uU1gSnMaUp60QrPHp/odsrlRsBUDdq tm91e/3A2R+UXWO8ktIhnlEWSlUEmbFR+UQR+2ZeGLR6GUH0QgTyPNM16eLJdKA3AwoF 4CybW6bLZ9mOPn+Nt78b+riVPM88hnZ0eOfx8YNsZRqO/6H5O0epPSzYGnVnqm2e8gUj dAznFVngeP21lc4oxiUcX1Y3o7Y1mGIu5ZkZv1BtVcCN9FINqVkB5VxEbxK0xJQBqNGW fiXA== X-Gm-Message-State: APjAAAXTJTn5iYQYjj8l2BwWYI2xh52YSvl+KDwRrP9StqXD2t6Mm/fR SaPRPwO7gDxvnBJBuAs4d3/u8Cb+qJxZcw== X-Google-Smtp-Source: APXvYqwbUpqnMtUOrbG6TgRkl8YcBm06NhwGyL3FNbCW8VpJSeCDwWM/iGr8x4UP3DOHFiIMRfNwOg== X-Received: by 2002:ac8:66d6:: with SMTP id m22mr12708285qtp.147.1575643586829; Fri, 06 Dec 2019 06:46:26 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l6sm6551875qti.10.2019.12.06.06.46.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:26 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 26/44] btrfs: hold a ref on the root in record_reloc_root_in_trans Date: Fri, 6 Dec 2019 09:45:20 -0500 Message-Id: <20191206144538.168112-27-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 are recording this root in the transaction, so we need to hold a ref on it until we do that. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index dfd3d9053301..c3cf582f943f 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2563,15 +2563,20 @@ static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans, { struct btrfs_fs_info *fs_info = reloc_root->fs_info; struct btrfs_root *root; + int ret; if (reloc_root->last_trans == trans->transid) return 0; root = read_fs_root(fs_info, reloc_root->root_key.offset); + if (!btrfs_grab_fs_root(root)) + BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); + ret = btrfs_record_root_in_trans(trans, root); + btrfs_put_fs_root(root); - return btrfs_record_root_in_trans(trans, root); + return ret; } static noinline_for_stack From patchwork Fri Dec 6 14:45:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276635 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 D49D713B6 for ; Fri, 6 Dec 2019 14:46:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B265C20706 for ; Fri, 6 Dec 2019 14:46:31 +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="a5JEcHj8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726619AbfLFOqa (ORCPT ); Fri, 6 Dec 2019 09:46:30 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43265 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOq3 (ORCPT ); Fri, 6 Dec 2019 09:46:29 -0500 Received: by mail-qk1-f194.google.com with SMTP id t129so1650847qke.10 for ; Fri, 06 Dec 2019 06:46: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=98+1b8oFGLaRfzg8C5aM6Su3ReXVCYbXLcjBOBU6crI=; b=a5JEcHj8FjYbZ9ti3x+K3ElkqPR2wpwvGYTvd7ZiycSm2tnNA0S0WjoYVVY6WxDSL7 SdHi9pjvuYG6gQwSGoEEJn/xPnZrF5Mqdrmu6nWEw0ZBIdCAz1ovbd/BjRKBrO4puuor Q4o1CYNXknWsXNu+pstJDbM2Wq8mqAvHQXguhL5L5UB8RcvTgaoBmT7OJ6ePwLzgm4Wq upIONBK91XcSnuP2nOsl5wp+04oDj2QJ6CcKq3KsKReZMjnc7RkjBHW640c1jJnnvria 6fnGRsXVD2ftDOrviLDWwj9hu3uEIODICnDFTSlI/pRMhgZeieD4lDPIraFl8QkDoQFV EaXg== 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=98+1b8oFGLaRfzg8C5aM6Su3ReXVCYbXLcjBOBU6crI=; b=MxBUQhA8eTdpmRJMxVHKhhJvETW0grwo3RaTMim/C2U8eFQrkBiX7RQA0W1iymWQxo VaZRZwystrezUUdBYnYLCl1nmBHysSSO7C/usnZfOxl1P527VK8+YyqQqgFRYk/RNCd3 +RrnGnVfXBlBdzzFwcCsXCQD6K8UgezVS+X9r75/6WCt7ckfT+uSAxLCP4p1awH+14bz h6qfvt2DUPJ2BV/gAGmB8nbQLLMgGzDvcaiAuCDJLPYdVdZi7mJjcRtcKEOoxABvU/NP lNbcPGTR8u8m3baMe1zsdgmZhY3PQpsFvxOi9szkB+sgUtxR8/wUVuNIx5RLZWv75mHZ z4og== X-Gm-Message-State: APjAAAWC/yeA1dIEOYvkkD33bMyv6FN2DvC2b3zxC6Syx1nt//hfxUa4 fXeWBisylVIy0uJYr9gmzty1SChTt1g3/A== X-Google-Smtp-Source: APXvYqy7nscKXZ6AApwYEjJ4F34e2+1PrpYlMZuZcip+i/iNE0Xj2Go65p5t4hiPcQhjya4gWSa4xw== X-Received: by 2002:a05:620a:134f:: with SMTP id c15mr13860115qkl.115.1575643588431; Fri, 06 Dec 2019 06:46:28 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g62sm6006095qkd.25.2019.12.06.06.46.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:27 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 27/44] btrfs: hold a ref on the root in find_data_references Date: Fri, 6 Dec 2019 09:45:21 -0500 Message-Id: <20191206144538.168112-28-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're looking up the data references for the bytenr in a root, we need to hold a ref on that root while we're doing that. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index c3cf582f943f..3b419a4e4829 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3669,7 +3669,11 @@ static int find_data_references(struct reloc_control *rc, root = read_fs_root(fs_info, ref_root); if (IS_ERR(root)) { err = PTR_ERR(root); - goto out; + goto out_free; + } + if (!btrfs_grab_fs_root(root)) { + err = -ENOENT; + goto out_free; } key.objectid = ref_objectid; @@ -3782,6 +3786,8 @@ static int find_data_references(struct reloc_control *rc, } out: + btrfs_put_fs_root(root); +out_free: btrfs_free_path(path); return err; } From patchwork Fri Dec 6 14:45:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276637 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 04A1A13B6 for ; Fri, 6 Dec 2019 14:46:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D909921835 for ; Fri, 6 Dec 2019 14:46: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="E4uyp+2F" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726627AbfLFOqc (ORCPT ); Fri, 6 Dec 2019 09:46:32 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:33805 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOqb (ORCPT ); Fri, 6 Dec 2019 09:46:31 -0500 Received: by mail-qt1-f195.google.com with SMTP id 5so7388683qtz.1 for ; Fri, 06 Dec 2019 06:46:30 -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=NGMNdlBlhbgE6R7u/eEFK0UZMFR6QY0Y1wGYhTUityU=; b=E4uyp+2FYrM+AYfN2BIhqM1lA6dA4XZvoVSmQsT45kScg+6j83dZgIPcjU3EGotgI9 KF5WC2j9Ls8HgjwWC9wSkT2rhYVW4F32GD/TFqdDw752ZSoyOzk5m4L6mBKCx5nvpRKb dN+6xdiiDw8UmTOKo/m7P/pE4vXmw/qLz6IxOZGaPd1a9NIZzNWJkY4srrl4q3nJJrgO mMah0DD+FNLdcqyDDmJs+q0Ma3xsVtGP/HR39C/qRRGFio/FVmwItEUWviJrurV7eQXE lmLml8iY8yeB2/Mu+sNPUV9P+55n9KyTNB0lXGLTdtbcMJcbbjyX7SwT02lKsC3CLX3S o8cg== 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=NGMNdlBlhbgE6R7u/eEFK0UZMFR6QY0Y1wGYhTUityU=; b=ZWE/9VmvlVXrA4uvQ7seSrIFH5tavzez0wbWuypF65rnKOVG8J48q3dZPQHgs01HWk jdxf4PB6Qy7p9Vq92yQ6c/TNrcUH9EuVwsgw+DnLFGlnZUPGqX4KSZKZY6vTuKsQ92Um KEkw674yLk0PGO7l1ut1ug0xwdTYDxSjoITBiewlpYv8OnauT+Xv8IRQW8gUO2YgHmJL vAZI4ViMvzMVLKbKAhjfTkjQidZ2/v4J3scN8HJlCaZ585nvwf7C6iSZ/hJxAqTRZT7Z jhjPVTWep9xhuPhatKBpiYGvz6SnGCqo09GVfSSKI4ue9Ledw3mUKtFCcxzoO6cyfEAT 8EyQ== X-Gm-Message-State: APjAAAV8QMsj+xXskwgAmii0oGt1X1+9IYjLnZvHWxT2H5FrNKkUthnZ se1t2HsZ0uLlcS0gUZhhRB8AVQkiPJOwYw== X-Google-Smtp-Source: APXvYqwOlSJ6AJg8NR/gZyhkRrsKatBRbqGa7nkkuTeydzo7Adxb7Whu9CmakVb3CLK3zCJIJnbjQA== X-Received: by 2002:ac8:6718:: with SMTP id e24mr12903308qtp.265.1575643590057; Fri, 06 Dec 2019 06:46:30 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id s63sm5911106qkf.129.2019.12.06.06.46.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:29 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 28/44] btrfs: hold a ref on the root in create_reloc_inode Date: Fri, 6 Dec 2019 09:45:22 -0500 Message-Id: <20191206144538.168112-29-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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're creating a reloc inode in the data reloc tree, we need to hold a ref on the root while we're doing that. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 3b419a4e4829..4e455703439b 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4269,10 +4269,14 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID); if (IS_ERR(root)) return ERR_CAST(root); + if (!btrfs_grab_fs_root(root)) + return ERR_PTR(-ENOENT); trans = btrfs_start_transaction(root, 6); - if (IS_ERR(trans)) + if (IS_ERR(trans)) { + btrfs_put_fs_root(root); return ERR_CAST(trans); + } err = btrfs_find_free_objectid(root, &objectid); if (err) @@ -4290,6 +4294,7 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, err = btrfs_orphan_add(trans, BTRFS_I(inode)); out: + btrfs_put_fs_root(root); btrfs_end_transaction(trans); btrfs_btree_balance_dirty(fs_info); if (err) { From patchwork Fri Dec 6 14:45:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276639 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 C80BA138D for ; Fri, 6 Dec 2019 14:46:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A6B0520706 for ; Fri, 6 Dec 2019 14:46:34 +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="Z6f7nOJ+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726635AbfLFOqd (ORCPT ); Fri, 6 Dec 2019 09:46:33 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:40366 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOqc (ORCPT ); Fri, 6 Dec 2019 09:46:32 -0500 Received: by mail-qt1-f196.google.com with SMTP id t17so705375qtr.7 for ; Fri, 06 Dec 2019 06:46:32 -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=xnA1zMQlWeZ+uUevxR44/u/GVIZqo262LTilixqIXjA=; b=Z6f7nOJ+/R+diLWz4QejMMM7PVkg8iEf2OpzpMZOpL/Ey5AcA3EHDdGbwgpVFXV6xq Hrjsel3fyaGtiwyg6IBIYCxQh76eHYYvRwUYYkLALwzND/PUftw+sSl1PinuMSDNpjLJ XNnYGnOXvbCbNuuXTq5cmGPGpxIF9vfbFF/hsSkTyAwh2rV8XLwQI1CB3XFttoRwRb82 e/Q6S7JmBOtYnJwCXHyPaTQpqyfjDDcuFisR1frAYYtkzweAaJ84nw+0qa+atb9M2k1M 06doCMtyOFkIPOzbK5eRkOM46NKBGlDTDoqwPtrzntC0HJt05buFu+848vE1/PHVRK5m zfNQ== 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=xnA1zMQlWeZ+uUevxR44/u/GVIZqo262LTilixqIXjA=; b=r0LwJZIhbboVSdOE4zHZFz29tIfqQLQEVS1Ho1Em0121n4OduXRHVDdi4l5Je5r40a mYsMAaAldyucm/EQSleOTgkx32ccCjOpkF4tD/6Hkm1vtfKyZNdot+OPTUPVxuzU+Gq7 FyyoY/Pwe08xevl4cn+tRXXy/a6KSAY7eC/krMwfe/8p2aXQUm0Pj+8R2XvGjC1dXc6A YMhQYp92IvH1DxNehrkj1GqptK6iToWBvIbuXh7Tt3D07r7qOeEjqbbQCfUXCIFtNoJC BFrTwFQOD+PkUtk+0i9YKDoiwvFyzVKYM0PyD91IaJTy9VdupVCxE8Ye0OAQImXaQNBj B+jw== X-Gm-Message-State: APjAAAWjWvb+/Dx1/WNYBnr70Y5VbPUxLZCmVg+KM2U50j6omzd/zH5m OBJmCEdrDgQQvcrduBfU0S9OaKZgMW1fcw== X-Google-Smtp-Source: APXvYqw5pctPcaB5XN5U3wnvmT5ZHcdrDfFpL5wHd6Kx6AnQ3Do5kKZU+vtM6+c3itxhEXd0NufCeA== X-Received: by 2002:aed:3fce:: with SMTP id w14mr13638180qth.0.1575643591740; Fri, 06 Dec 2019 06:46:31 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id m29sm6634257qtf.1.2019.12.06.06.46.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:31 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 29/44] btrfs: hold a ref on the root in btrfs_recover_relocation Date: Fri, 6 Dec 2019 09:45:23 -0500 Message-Id: <20191206144538.168112-30-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up the fs root in various places in here when recovering from a crashed relcoation. Make sure we hold a ref on the root whenever we look them up. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 4e455703439b..d40d145588f3 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4542,6 +4542,10 @@ int btrfs_recover_relocation(struct btrfs_root *root) if (btrfs_root_refs(&reloc_root->root_item) > 0) { fs_root = read_fs_root(fs_info, reloc_root->root_key.offset); + if (!btrfs_grab_fs_root(fs_root)) { + err = -ENOENT; + goto out; + } if (IS_ERR(fs_root)) { ret = PTR_ERR(fs_root); if (ret != -ENOENT) { @@ -4553,6 +4557,8 @@ int btrfs_recover_relocation(struct btrfs_root *root) err = ret; goto out; } + } else { + btrfs_put_fs_root(fs_root); } } @@ -4602,10 +4608,15 @@ int btrfs_recover_relocation(struct btrfs_root *root) list_add_tail(&reloc_root->root_list, &reloc_roots); goto out_free; } + if (!btrfs_grab_fs_root(fs_root)) { + err = -ENOENT; + goto out_free; + } err = __add_reloc_root(reloc_root); BUG_ON(err < 0); /* -ENOMEM or logic error */ fs_root->reloc_root = reloc_root; + btrfs_put_fs_root(fs_root); } err = btrfs_commit_transaction(trans); @@ -4637,10 +4648,14 @@ int btrfs_recover_relocation(struct btrfs_root *root) if (err == 0) { /* cleanup orphan inode in data relocation tree */ fs_root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID); - if (IS_ERR(fs_root)) + if (IS_ERR(fs_root)) { err = PTR_ERR(fs_root); - else - err = btrfs_orphan_cleanup(fs_root); + } else { + if (btrfs_grab_fs_root(fs_root)) { + err = btrfs_orphan_cleanup(fs_root); + btrfs_put_fs_root(fs_root); + } + } } return err; } From patchwork Fri Dec 6 14:45:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276641 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 87CE0138D for ; Fri, 6 Dec 2019 14:46:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 66D9B21835 for ; Fri, 6 Dec 2019 14:46:36 +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="sO8lJnJB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726643AbfLFOqf (ORCPT ); Fri, 6 Dec 2019 09:46:35 -0500 Received: from mail-qv1-f67.google.com ([209.85.219.67]:36277 "EHLO mail-qv1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOqf (ORCPT ); Fri, 6 Dec 2019 09:46:35 -0500 Received: by mail-qv1-f67.google.com with SMTP id b18so2738494qvy.3 for ; Fri, 06 Dec 2019 06:46:34 -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=WifRzoY8FYNUPXL4ZJUInx/PRhMHmSNbX6krZ/hcRzQ=; b=sO8lJnJBDzEWj+WsmmAJ5+ey7RoJ6083aGa4MjWvacHdbq9XvIquJjNkUajQfKL3Nx yIu09JphBl6lE0KUOH/KMZVpdzeQ+fubcLcQaK5WAATdJPIR/xTrQCqW9K4UUjywUlIY T7pe2WmuzMBc6ws6tGArDUW683HSvMeC6UDoAUGb8DoKdkGxC2t5kG5mDuwxQb73GzXh 95uNY38T06dmfQ3CNylChL5sADqCn7zyrJ2c2/v7MiHhnkhg5/e/iv2UoKM+gtmfnJtv 4edwsFpA3k9qPNmCMHmwz+NFqFOHh6bbvPTw7dA2fIrBUDno2iHlb9zEpxi82+/iorTD Qbmw== 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=WifRzoY8FYNUPXL4ZJUInx/PRhMHmSNbX6krZ/hcRzQ=; b=qmgSnBkJAEiWU09Pfq7DBfk5A1eTC31Ql3GkVgdL7n5hREBA8tzkC8huk2UDxbEiNe lyosrQ7wrJORoYTMX45WGsYkruWtz2iUQeRLkvItHid4MGRF5t/lIZ0NhXV/9d4/1y+U 0cUx/VANbHSnBaBQzlngCPgWRmUltEO0MSBP9ufyZsBDuiT5Mhn7qP+EsLjdSqpXFAkQ Ey6gfppzFF0udR/Zn7DWJdE6ahrx7Kywi+pxHZvyUwVUWI72KpokEbBzfuw/G5fVZopn mupev478w/+XXUP8zbhT+MhV6CwAPLRtX9OXqKIWoF49cHopd+eP2dFqTWvkfy0PLh/E R7Pg== X-Gm-Message-State: APjAAAXbqRSmCM3pSM4TnauB5aklRpNPSVmjClwEFd/5nRym5oN4zPuv cjxFpak8HxwkSly3GVw/m4Z1iA39T0YbXA== X-Google-Smtp-Source: APXvYqxqKkeYPXqWedLllHOBZEGk5m2EFqtLXLQlc5lYRLvL1YTSt0YuHrnDP3FZQDtOzWoYp+dKgw== X-Received: by 2002:ad4:46ce:: with SMTP id g14mr12922406qvw.67.1575643593323; Fri, 06 Dec 2019 06:46:33 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id f6sm6008495qkk.12.2019.12.06.06.46.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:32 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 30/44] btrfs: push grab_fs_root into read_fs_root Date: Fri, 6 Dec 2019 09:45:24 -0500 Message-Id: <20191206144538.168112-31-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 All of relocation uses read_fs_root to lookup fs roots, so push the btrfs_grab_fs_root() up into that helper and remove the individual calls. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index d40d145588f3..086c8126ebf2 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -581,6 +581,7 @@ static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info, u64 root_objectid) { struct btrfs_key key; + struct btrfs_root *root; key.objectid = root_objectid; key.type = BTRFS_ROOT_ITEM_KEY; @@ -589,7 +590,12 @@ static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info, else key.offset = (u64)-1; - return btrfs_get_fs_root(fs_info, &key, false); + root = btrfs_get_fs_root(fs_info, &key, false); + if (IS_ERR(root)) + return root; + if (!btrfs_grab_fs_root(root)) + return ERR_PTR(-ENOENT); + return root; } static noinline_for_stack @@ -861,10 +867,6 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, err = PTR_ERR(root); goto out; } - if (!btrfs_grab_fs_root(root)) { - err = -ENOENT; - goto out; - } if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state)) cur->cowonly = 1; @@ -2433,8 +2435,6 @@ int prepare_to_merge(struct reloc_control *rc, int err) list_del_init(&reloc_root->root_list); root = read_fs_root(fs_info, reloc_root->root_key.offset); - if (!btrfs_grab_fs_root(root)) - BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); @@ -2505,8 +2505,6 @@ void merge_reloc_roots(struct reloc_control *rc) if (btrfs_root_refs(&reloc_root->root_item) > 0) { root = read_fs_root(fs_info, reloc_root->root_key.offset); - if (!btrfs_grab_fs_root(root)) - BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); @@ -2569,8 +2567,6 @@ static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans, return 0; root = read_fs_root(fs_info, reloc_root->root_key.offset); - if (!btrfs_grab_fs_root(root)) - BUG(); BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); ret = btrfs_record_root_in_trans(trans, root); @@ -3671,10 +3667,6 @@ static int find_data_references(struct reloc_control *rc, err = PTR_ERR(root); goto out_free; } - if (!btrfs_grab_fs_root(root)) { - err = -ENOENT; - goto out_free; - } key.objectid = ref_objectid; key.type = BTRFS_EXTENT_DATA_KEY; @@ -4269,8 +4261,6 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID); if (IS_ERR(root)) return ERR_CAST(root); - if (!btrfs_grab_fs_root(root)) - return ERR_PTR(-ENOENT); trans = btrfs_start_transaction(root, 6); if (IS_ERR(trans)) { @@ -4542,10 +4532,6 @@ int btrfs_recover_relocation(struct btrfs_root *root) if (btrfs_root_refs(&reloc_root->root_item) > 0) { fs_root = read_fs_root(fs_info, reloc_root->root_key.offset); - if (!btrfs_grab_fs_root(fs_root)) { - err = -ENOENT; - goto out; - } if (IS_ERR(fs_root)) { ret = PTR_ERR(fs_root); if (ret != -ENOENT) { @@ -4608,10 +4594,6 @@ int btrfs_recover_relocation(struct btrfs_root *root) list_add_tail(&reloc_root->root_list, &reloc_roots); goto out_free; } - if (!btrfs_grab_fs_root(fs_root)) { - err = -ENOENT; - goto out_free; - } err = __add_reloc_root(reloc_root); BUG_ON(err < 0); /* -ENOMEM or logic error */ @@ -4651,10 +4633,8 @@ int btrfs_recover_relocation(struct btrfs_root *root) if (IS_ERR(fs_root)) { err = PTR_ERR(fs_root); } else { - if (btrfs_grab_fs_root(fs_root)) { - err = btrfs_orphan_cleanup(fs_root); - btrfs_put_fs_root(fs_root); - } + err = btrfs_orphan_cleanup(fs_root); + btrfs_put_fs_root(fs_root); } } return err; From patchwork Fri Dec 6 14:45:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276643 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 346F613B6 for ; Fri, 6 Dec 2019 14:46:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1340421835 for ; Fri, 6 Dec 2019 14:46:38 +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="wfyYsxay" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726654AbfLFOqh (ORCPT ); Fri, 6 Dec 2019 09:46:37 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:37813 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOqg (ORCPT ); Fri, 6 Dec 2019 09:46:36 -0500 Received: by mail-qk1-f193.google.com with SMTP id m188so6676749qkc.4 for ; Fri, 06 Dec 2019 06:46:35 -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=yvDui0iKYsyOEKeBTybYCyx7WqxXlZPZ8xZ+K+VP0tk=; b=wfyYsxaygwaObzkl6GqK5AI+f6u8wYBrEWJrAyDPFUEDH3qQQKo+T71SJTby7VXlEG N56O+rhPVdNQ9JtQN6m6ZropQb5RB3RCdUb5Qkcur3B8jhiXPqG7DvBifKr+s6KckuZr hxGwh2AmvhNw2EgZaDUZp0U5LNS2vvFaGYiWMMR9e2tzHjR26GIkpV0demCjOR7JaJiB DKQt81oGMWii9nsN8zdc5oCHUIzlJfkpX/s1fjtStPmBpBx95eEEgF3yg5JXnPv6JX+I fma24un72qgFE2SMOFLxyqWgV+dChjNyvCMvy53pMbkOfA+1mMPhWzwy3OfYMwzzbuLm 7voA== 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=yvDui0iKYsyOEKeBTybYCyx7WqxXlZPZ8xZ+K+VP0tk=; b=fn6Z2lB8aM0tETFkL7Rz0O5Hae7g7CgD8ThMSxEGCoEGmJIzs21c26vZZVAWFI3SGL LBtq/3dgAhiohIQhcERjBalN+o338e2iBLKkeztFEwZ1qqwoch6b0wqfUk2Cka4UzObs bXzCMOpC4gXKnuHWB4OOyEBbptQFakBmUaWitqTJA2nIZaFldwUk9U3j1Y0rw1A2ZgTd B9C+nIISLGSGCoJkUiQcBFF353GbJU+uKZb+TK25E2FJEZH9R3nWXqjKVTJsynZ7/zb9 kXvAICegFIUI/cn7oKiOYevN5CCk4mXwaO+06WSsI2v9ZiHWxSwi8IpyEpKsFjNpMLmy 8ITg== X-Gm-Message-State: APjAAAWpQWj6E2eEGf6Nbg1ku9E9w7DTacOw1EOKfI2Qa7Zyb+BGgEeT MY3Di2ME3bcTysf95PbX/EgHHnlsXLPTMQ== X-Google-Smtp-Source: APXvYqwZL7bcNDMDg7qY+2klO7PsTNoVaVyX21V18yxRmb+PtYufwIJf86CvTDG9PBZNiNt9bAZFFA== X-Received: by 2002:a37:388:: with SMTP id 130mr13243957qkd.366.1575643595059; Fri, 06 Dec 2019 06:46:35 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y184sm5996638qkd.128.2019.12.06.06.46.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:34 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 31/44] btrfs: hold a ref for the root in btrfs_find_orphan_roots Date: Fri, 6 Dec 2019 09:45:25 -0500 Message-Id: <20191206144538.168112-32-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup roots for every orphan item we have, we need to hold a ref on the root while we're doing this work. Signed-off-by: Josef Bacik --- fs/btrfs/root-tree.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 9617dcedf521..cac2407cc003 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -257,6 +257,8 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) root = btrfs_get_fs_root(fs_info, &root_key, false); err = PTR_ERR_OR_ZERO(root); + if (!err && !btrfs_grab_fs_root(root)) + err = -ENOENT; if (err && err != -ENOENT) { break; } else if (err == -ENOENT) { @@ -288,6 +290,7 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) set_bit(BTRFS_ROOT_DEAD_TREE, &root->state); btrfs_add_dead_root(root); } + btrfs_put_fs_root(root); } btrfs_free_path(path); From patchwork Fri Dec 6 14:45:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276647 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 EE206138D for ; Fri, 6 Dec 2019 14:46:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CC8E521835 for ; Fri, 6 Dec 2019 14:46:39 +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="tIn60bQQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726665AbfLFOqi (ORCPT ); Fri, 6 Dec 2019 09:46:38 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:33787 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726607AbfLFOqi (ORCPT ); Fri, 6 Dec 2019 09:46:38 -0500 Received: by mail-qt1-f196.google.com with SMTP id d5so7380637qto.0 for ; Fri, 06 Dec 2019 06:46:37 -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=8+BtdMJI5uKLStglB8bT7gvqEGLI3R/yUBUc0OKAnGo=; b=tIn60bQQJw5kIKE3Pdhz2DLz5rKggOsOKybBs5lDou/hKx2XJ5RB5oLdhPKGTgHat4 Lt4Bw9JOAM5x1j51BaOFfL4u0VgFoW2d42f/QM25wyBZI++EbGw4/JE/ilmgnN0V5jPi K38OriBlXN87+zkGoE75E/nPS3aftyNydIP03+x/oXgLLVFhCSBXVdEwfvTqcA698Uos BfTXBZuOqpmDvITdTPxKK6cc6LoUmH1o2YaZGJS5tvjOPKkX4iWGYrcNf7WvUENa7HPe 2qybamqWDzqVuoiQ03g7gWOTzqZk4PppUO1yfI8eKo0LMaKB5956Y+Kfu42vVE015qjN lltw== 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=8+BtdMJI5uKLStglB8bT7gvqEGLI3R/yUBUc0OKAnGo=; b=ZkEvD3YyyGueR4NJd0cYOz7H7e86tcYXUj1jDdb3vhe3ZrTQ8/1GRaFPXpqGhKaPp5 DLkWjeMr2gp+duaMgMQhmJpOg5p8GkuTCQQxHj4b+R0WweYvO12i4Ce1ZTKXoH9mwzT6 yrIh5QDzzF11ObUizIUKYS7P8qeG1z0pvdJLAA7DXPNQb0WMX+MnBG8civ+Zm/Msj6gS mN0hNC4ZYz/J3mqp/Y5vUTwFRxkbEG9VEiKoXVKloIARI7/T8t3I4PjxHXa3nipZV/aO MgjgGiK19TECyPDev8nw++MB8C4CTqw6+NDlRaMLHssibECgjxfEuBEjZ0GBjfO/Jnhe i+WQ== X-Gm-Message-State: APjAAAW53k4HLUjC44u//G03oIH1cZCpasgIu93nExZei8McSAu1k2AE kwzFEC+tucUfkl/xvW+wYdW05O71YLFjLQ== X-Google-Smtp-Source: APXvYqxmB3tELMOopdncnZ7r6euRcAOHzq74Xr1h7MPnLavXKEdBvw8Vwiw5oQllfrFu9oAs8Fi29A== X-Received: by 2002:ac8:7158:: with SMTP id h24mr12728317qtp.63.1575643596846; Fri, 06 Dec 2019 06:46:36 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l6sm6552005qti.10.2019.12.06.06.46.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:36 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 32/44] btrfs: hold a ref on the root in scrub_print_warning_inode Date: Fri, 6 Dec 2019 09:45:26 -0500 Message-Id: <20191206144538.168112-33-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 look up the root for the bytenr that is failing, so we need to hold a ref on the root for that operation. Signed-off-by: Josef Bacik --- fs/btrfs/scrub.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index eed3a8492092..904e860c509c 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -657,6 +657,10 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ret = PTR_ERR(local_root); goto err; } + if (!btrfs_grab_fs_root(local_root)) { + ret = -ENOENT; + goto err; + } /* * this makes the path point to (inum INODE_ITEM ioff) @@ -667,6 +671,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ret = btrfs_search_slot(NULL, local_root, &key, swarn->path, 0, 0); if (ret) { + btrfs_put_fs_root(local_root); btrfs_release_path(swarn->path); goto err; } @@ -687,6 +692,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ipath = init_ipath(4096, local_root, swarn->path); memalloc_nofs_restore(nofs_flag); if (IS_ERR(ipath)) { + btrfs_put_fs_root(local_root); ret = PTR_ERR(ipath); ipath = NULL; goto err; @@ -710,6 +716,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, min(isize - offset, (u64)PAGE_SIZE), nlink, (char *)(unsigned long)ipath->fspath->val[i]); + btrfs_put_fs_root(local_root); free_ipath(ipath); return 0; From patchwork Fri Dec 6 14:45:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276649 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 E926A13B6 for ; Fri, 6 Dec 2019 14:46:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C803221835 for ; Fri, 6 Dec 2019 14:46:41 +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="tyONsnc4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726668AbfLFOqk (ORCPT ); Fri, 6 Dec 2019 09:46:40 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:36217 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726264AbfLFOqk (ORCPT ); Fri, 6 Dec 2019 09:46:40 -0500 Received: by mail-qt1-f195.google.com with SMTP id k11so7365703qtm.3 for ; Fri, 06 Dec 2019 06:46:39 -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=TQn3GkU5Dr16eJ46X601P/AomUBWnqS4KD7cwF4RRH8=; b=tyONsnc4vB7sVEkXM7Z8WzU2KAAxdxodICzBbxKzFD/zlY8GqdKO66H6IO5mV50cri D1ZBhFLSQ1vnmEyu+XofOCaR+tbrRdIwSeghYjIkXL9yP4vcJTriH6n6EXPzwqKKMit8 aIB0hVElhIEXYkvM7Gwg0hLHHUjOaFo4h1Sj7NfLDdZv0fEzs387VFBhbRaRqMvoQKQS 58WnGu8+/+vPP75fn5jNRAhyACtm5TtR9LN78t7YSlSwy7a+qV52HEiuWMNvxHeUS/D5 uNAOAgTt4tjztRhgvzkyg14lVVdH0Bt9dXOaEbcazdMkkBsolBKYcbrSDpcEaiIo7hau Oxyg== 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=TQn3GkU5Dr16eJ46X601P/AomUBWnqS4KD7cwF4RRH8=; b=Qy3Ik+/19gtstqMQEfdSDO0eT7LU3yjisTNunQNANZwABTZ+r/UkpUhX3wi4SWjKNv C/t0lAzzOYQUH2goKa5KGogMfoDL87p79XegFNLxkY//ttrq795hOyAdND7+S2mBblRS AChyPyYHHPb2IjduVPRSV1e0gt+wdmkMkDqRtvQJxDXpFzWfOz9RfuvazpJsS+Gsfb7d RD0TzROYgbAxYZ/WX2bKdUURmiSnr1tghclb911TOXiBCQkHmLi5Y6nRTVVG+ooDEBL4 eAduTAsmgSD6Hop5nI41R+f+ql6aVxbFC8V/BXNDX7V9AyGpbaQEjW9GpmD6SWP+gZpn DZ/A== X-Gm-Message-State: APjAAAWNrr+j4po3gP6pOXu/HKrdRw7yOoT0haBrhv6Bj2MAxOZm3IS+ Sjyc1+wLZ+P2gkJIycb3Sy3/3JmayTSkBA== X-Google-Smtp-Source: APXvYqzcTIWNkRTHH6CQbVtakoMJF7BtUqdhz1ANfvFS+N1uOI82szCH4Vl22MmWOO4Zoh98yaVJ2Q== X-Received: by 2002:ac8:21ae:: with SMTP id 43mr782948qty.223.1575643599090; Fri, 06 Dec 2019 06:46:39 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id q30sm298331qtd.5.2019.12.06.06.46.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:37 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 33/44] btrfs: hold a ref on the root in btrfs_ioctl_send Date: Fri, 6 Dec 2019 09:45:27 -0500 Message-Id: <20191206144538.168112-34-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup all the clone roots and the parent root for send, so we need to hold refs on all of these roots while we're processing them. Signed-off-by: Josef Bacik --- fs/btrfs/send.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 73e2e350f4a1..a82201e6979e 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7206,11 +7206,17 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) ret = PTR_ERR(clone_root); goto out; } + if (!btrfs_grab_fs_root(clone_root)) { + srcu_read_unlock(&fs_info->subvol_srcu, index); + ret = -ENOENT; + goto out; + } spin_lock(&clone_root->root_item_lock); if (!btrfs_root_readonly(clone_root) || btrfs_root_dead(clone_root)) { spin_unlock(&clone_root->root_item_lock); srcu_read_unlock(&fs_info->subvol_srcu, index); + btrfs_put_fs_root(clone_root); ret = -EPERM; goto out; } @@ -7218,6 +7224,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) dedupe_in_progress_warn(clone_root); spin_unlock(&clone_root->root_item_lock); srcu_read_unlock(&fs_info->subvol_srcu, index); + btrfs_put_fs_root(clone_root); ret = -EAGAIN; goto out; } @@ -7245,6 +7252,12 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) ret = PTR_ERR(sctx->parent_root); goto out; } + if (!btrfs_grab_fs_root(sctx->parent_root)) { + srcu_read_unlock(&fs_info->subvol_srcu, index); + ret = -ENOENT; + sctx->parent_root = ERR_PTR(ret); + goto out; + } spin_lock(&sctx->parent_root->root_item_lock); sctx->parent_root->send_in_progress++; @@ -7272,7 +7285,8 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) * is behind the current send position. This is checked while searching * for possible clone sources. */ - sctx->clone_roots[sctx->clone_roots_cnt++].root = sctx->send_root; + sctx->clone_roots[sctx->clone_roots_cnt++].root = + btrfs_grab_fs_root(sctx->send_root); /* We do a bsearch later */ sort(sctx->clone_roots, sctx->clone_roots_cnt, @@ -7357,18 +7371,24 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) } if (sort_clone_roots) { - for (i = 0; i < sctx->clone_roots_cnt; i++) + for (i = 0; i < sctx->clone_roots_cnt; i++) { btrfs_root_dec_send_in_progress( sctx->clone_roots[i].root); + btrfs_put_fs_root(sctx->clone_roots[i].root); + } } else { - for (i = 0; sctx && i < clone_sources_to_rollback; i++) + for (i = 0; sctx && i < clone_sources_to_rollback; i++) { btrfs_root_dec_send_in_progress( sctx->clone_roots[i].root); + btrfs_put_fs_root(sctx->clone_roots[i].root); + } btrfs_root_dec_send_in_progress(send_root); } - if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) + if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) { btrfs_root_dec_send_in_progress(sctx->parent_root); + btrfs_put_fs_root(sctx->parent_root); + } kvfree(clone_sources_tmp); From patchwork Fri Dec 6 14:45:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276651 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 B224D13B6 for ; Fri, 6 Dec 2019 14:46:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 905F221835 for ; Fri, 6 Dec 2019 14:46:43 +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="qcpo8vln" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726674AbfLFOqm (ORCPT ); Fri, 6 Dec 2019 09:46:42 -0500 Received: from mail-qv1-f66.google.com ([209.85.219.66]:40062 "EHLO mail-qv1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726264AbfLFOql (ORCPT ); Fri, 6 Dec 2019 09:46:41 -0500 Received: by mail-qv1-f66.google.com with SMTP id i3so2721044qvv.7 for ; Fri, 06 Dec 2019 06:46:41 -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=etKLBG9v+n8eeFTRJEZ/+UjoGM5jhhzFStGHRUUo6WM=; b=qcpo8vlnv0nGlyhMS2dVqFttBxwyd+ne9XhEze4X0IXmYltqsnReyuupNd7HEuib36 m/bR5AntX87fHblfOAYOPfRDee0cYySogfvsZi5MbsmkWM0BCOX6rp8TTgpFjv/S6aRi 6/Ww+RcTAOP8KbkIGi4mEtIedRVnSPezKU0lZaXEaWgKQMg81wDxSPK4zJ1EkUhqtJ25 u3VfPieD+MQPXWseyjReTkIYDGIkOiZXpF7+CqWhXdtiiF33bKeevz+9hKpTJD0nbYFO iyOyz5Yaqr6wFw0SXrYUFynwSBNmeG9RIbOkbaQY4Z8vEPjOemlmkpoi9WGDKlgB5ECw 2wrg== 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=etKLBG9v+n8eeFTRJEZ/+UjoGM5jhhzFStGHRUUo6WM=; b=d6gxdh5KAX7KFmgwqvNRX7PDl9D7XSQbYmQK8GSwE62Z1NqauEdu7Kbzrq0qk9OOQa 74cEI9F9K4yt5I7acX3WC2ugfYI5oi2n4n5HiCrL4ln93s9NFT9m9AbPeu/D7yocFX3p e739si7kc85/gFTSu9XMCZW6rAZYgggIazWhgD18gEPyCTxBCpKCGu2GASEfaYEwmRVJ a5KX/WKBRwlQ9PyM//ZWF9zG0SyPdZAgegMvGqAira07cxVNCWlVpsIID8bcMl0i2rV9 J6lOvbZTMjLDra0Df9wfbjF9JXi+leVir6ISUrSS77qPYQlhL/aa0lxO1VS4F/p/vAgr nSSg== X-Gm-Message-State: APjAAAW1c86eHWzdysmin8mBoJQANYb0DX0B48tVG5A+8Iehn01C6wzA Dq7aG7m4/JzpS3NxM/QGjrzWD01I4MEcIw== X-Google-Smtp-Source: APXvYqzccbD9kA2630YHfQmEXvS4UkceEIiImBFfBcC1OG7D/bTZiezPCpMDwRLF26gDV8iZdeXzYg== X-Received: by 2002:a0c:e806:: with SMTP id y6mr12606851qvn.148.1575643600637; Fri, 06 Dec 2019 06:46:40 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y184sm5996723qkd.128.2019.12.06.06.46.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:40 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 34/44] btrfs: hold a ref on the root in get_subvol_name_from_objectid Date: Fri, 6 Dec 2019 09:45:28 -0500 Message-Id: <20191206144538.168112-35-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup the name of a subvol which means we'll cross into different roots. Hold a ref while we're doing the look ups in the fs_root we're searching. Signed-off-by: Josef Bacik --- fs/btrfs/super.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index e387ca1ac0e5..9c50bee71de9 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1082,6 +1082,10 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ret = PTR_ERR(fs_root); goto err; } + if (!btrfs_grab_fs_root(fs_root)) { + ret = -ENOENT; + goto err; + } /* * Walk up the filesystem tree by inode refs until we hit the @@ -1094,13 +1098,16 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); if (ret < 0) { + btrfs_put_fs_root(fs_root); goto err; } else if (ret > 0) { ret = btrfs_previous_item(fs_root, path, dirid, BTRFS_INODE_REF_KEY); if (ret < 0) { + btrfs_put_fs_root(fs_root); goto err; } else if (ret > 0) { + btrfs_put_fs_root(fs_root); ret = -ENOENT; goto err; } @@ -1117,6 +1124,7 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ptr -= len + 1; if (ptr < name) { ret = -ENAMETOOLONG; + btrfs_put_fs_root(fs_root); goto err; } read_extent_buffer(path->nodes[0], ptr + 1, @@ -1124,6 +1132,7 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ptr[0] = '/'; btrfs_release_path(path); } + btrfs_put_fs_root(fs_root); } btrfs_free_path(path); From patchwork Fri Dec 6 14:45:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276653 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 57A65138D for ; Fri, 6 Dec 2019 14:46:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3667720706 for ; Fri, 6 Dec 2019 14:46:45 +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="v4/TlfEg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726677AbfLFOqo (ORCPT ); Fri, 6 Dec 2019 09:46:44 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:37829 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726264AbfLFOqn (ORCPT ); Fri, 6 Dec 2019 09:46:43 -0500 Received: by mail-qk1-f196.google.com with SMTP id m188so6677101qkc.4 for ; Fri, 06 Dec 2019 06:46:43 -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=jBx27Gqp2ekqvTSlDXB8wC6n+Fi1D6493NIr4uiaG7Y=; b=v4/TlfEgK+em1gXzgCfLDMGi4eR/37YBFph/UdCt17qg+ZUQJb43HHtx4tQjKUscdL ekBXgrNqv7PMMrEaC4sQm6bmazYZvsYvnh4O9QUzCzjvus2JSFG/QZN9hEKPRLlXnSTJ SPpT6laOwROxBCC3TAqLCfyyuQ6hSQTGUh9xG3K+ZaYQPvTnWDHkrWWCaasSnf/Ym7cE sYIbwigCxs7ME3ML2yGmNhTxqHl+PROYJdVrqMVxB9E04BpKX3VhhzJdNz5UUNZckO2e kv8SP84QJtX+vT0wkvCJqPCc2kduKiQW4gVlrDpOO/ygC1FFm39ZiadoO1SCwRbvqJrn NkdA== 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=jBx27Gqp2ekqvTSlDXB8wC6n+Fi1D6493NIr4uiaG7Y=; b=As27F+OT26DBf5sGqIww7JMKhBpgtnW8UATpZ45O5Yur9TlAiRb6YE5vLj07lc5O2E qkLMbEpTEw/EoNd8nNZGYJ8cuhmY1YnSPIVHxj6umM2eeehc2eyfmOwIPl11KFmnOy2v u4YabNwJWRHzTLidTqpmVdXy/pae+Yl32UtfkyhfYMGbZYYmvem0fG53C1tt675+r3N0 T4PwhulZ46ubP9FzQtNfhJXKRBm9PqFQhZv3KeG2x0u7IIA0WyaXjiyIaIaa7zKTIwc6 EChEPwR0MvfFhDQF9cgrwMTnTlk6PKu/vzk8HLMy8aRTIqu32qFj3vy/WJ33scF1ETsR XWRg== X-Gm-Message-State: APjAAAUOR0AUxWjjjYGm9PZn8a1cP6G18dOigoV7qBNrbelUdvFaUs5o GGJgKB1RCJGBHPNsqVQh6Xn3yXuqJO0l5w== X-Google-Smtp-Source: APXvYqzC0l5wF2XzIit74kaqpz9U+WwhdT/USujD04p5VpVmcKajLinlUNekZTgjxjdoObQf6qvq7w== X-Received: by 2002:a37:b95:: with SMTP id 143mr14160611qkl.73.1575643602339; Fri, 06 Dec 2019 06:46:42 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id x1sm6063752qke.125.2019.12.06.06.46.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:41 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 35/44] btrfs: hold a ref on the root in create_pending_snapshot Date: Fri, 6 Dec 2019 09:45:29 -0500 Message-Id: <20191206144538.168112-36-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 create the snapshot and then use it for a bunch of things, we need to hold a ref on it while we're messing with it. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 1 + fs/btrfs/transaction.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index a3223bec3f5b..d5a994ab9602 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -875,6 +875,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, d_instantiate(dentry, inode); ret = 0; fail: + btrfs_put_fs_root(pending_snapshot->snap); btrfs_subvolume_release_metadata(fs_info, &pending_snapshot->block_rsv); dec_and_free: if (snapshot_force_cow) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index e194d3e4e3a9..7008def3391b 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1637,6 +1637,12 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, btrfs_abort_transaction(trans, ret); goto fail; } + if (!btrfs_grab_fs_root(pending->snap)) { + ret = -ENOENT; + pending->snap = NULL; + btrfs_abort_transaction(trans, ret); + goto fail; + } ret = btrfs_reloc_post_snapshot(trans, pending); if (ret) { From patchwork Fri Dec 6 14:45:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276655 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 20C5313B6 for ; Fri, 6 Dec 2019 14:46:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F2B0320706 for ; Fri, 6 Dec 2019 14:46:46 +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="Jq0ini2x" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726689AbfLFOqq (ORCPT ); Fri, 6 Dec 2019 09:46:46 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:42054 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726678AbfLFOqp (ORCPT ); Fri, 6 Dec 2019 09:46:45 -0500 Received: by mail-qk1-f195.google.com with SMTP id a10so6643347qko.9 for ; Fri, 06 Dec 2019 06:46:44 -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=O7zBvaSKAyD6OCWpsvhd1OfmsSFvdhkYskFZqQuyvWU=; b=Jq0ini2x/MEBw+DltEb2FpcDl3UPAkubulE9Ebq/x6uPLhMp85Oq3qYThK8kg0FMuj xZ090AoyRnVEFwN3cSN4wcKkyNnAkC488JIa6XQ+KLBcbteuyw9pkxzK02gbciJiEWqc HghHERTNtGkUlF9XVg2aw7GEhQMDOnH9sXMvGkoaAwM61YpZikhWocLhelm4bNINPim1 oA/fgWAJNSiJXyZDSHCKIGSSc/JymBaKThFdhb18U8A6DX2kOyYDZcVmVpNE6KBNbfAA EsaGRnju+TlkadHrtZo6PcK3REOJRqwS4oPz4mbhedvZzkx34jxhnJUctVXsq4NJUUr4 /2DA== 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=O7zBvaSKAyD6OCWpsvhd1OfmsSFvdhkYskFZqQuyvWU=; b=HNODSn6ag7RoT/UZztKMNv6zch8GKzcqOOl8P+ih1ng1JcgfnVgevbj/GLOHYsKFPS 9tApRtwD4qEWq7Qpzrm/AUj/ogGWX5GRL6h4jWgfr1MiS/cAiz1kQWETh8u+4FGl80NC XsIYHvVNUMGEpWTSZwgc+S8nUmn300fyifx/K31JnQ60+5ymI8QgHYYucp0Rc3kCgT/e ckfKJx9QP9xIf6j4FVbFhc3kwdTakQjLWzj+qfj3sd1qVMWn4fc6/e7pvWZLwCdaAIG7 0jZ6rY4KH4/WiV4FkhXEKamlQhQnCv7AIgc1GCvnhccdzZiJE+jJV9EQoTGUMHg7S48A t7Ng== X-Gm-Message-State: APjAAAWVAQysTd02mhX5vAyxDKO313512/Igjtph36zOapyHXJoEuoqW XuhbfEalzV2V6yoO2GEjC4rCecTRAdS1Ug== X-Google-Smtp-Source: APXvYqwBVDbg7TRAb93Era2Rgbi0gV+FptGhUVDDcPJrG3ZKLOoGFvpsXlHuRVF8pA4zpn8Vz/jhBA== X-Received: by 2002:a05:620a:2103:: with SMTP id l3mr14404660qkl.93.1575643603953; Fri, 06 Dec 2019 06:46:43 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id q36sm5090525qtk.16.2019.12.06.06.46.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:43 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 36/44] btrfs: hold a ref on the root in btrfs_recover_log_trees Date: Fri, 6 Dec 2019 09:45:30 -0500 Message-Id: <20191206144538.168112-37-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 replay the log into arbitrary fs roots, hold a ref on the root while we're doing this. Signed-off-by: Josef Bacik --- fs/btrfs/tree-log.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index a4321bdcbf3e..07e7fd508213 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6292,6 +6292,10 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) tmp_key.offset = (u64)-1; wc.replay_dest = btrfs_get_fs_root(fs_info, &tmp_key, true); + if (!IS_ERR(wc.replay_dest)) { + if (!btrfs_grab_fs_root(wc.replay_dest)) + wc.replay_dest = ERR_PTR(-ENOENT); + } if (IS_ERR(wc.replay_dest)) { ret = PTR_ERR(wc.replay_dest); @@ -6348,6 +6352,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) } wc.replay_dest->log_root = NULL; + btrfs_put_fs_root(wc.replay_dest); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); kfree(log); From patchwork Fri Dec 6 14:45:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276657 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 6796313B6 for ; Fri, 6 Dec 2019 14:46:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 466AC24673 for ; Fri, 6 Dec 2019 14:46:48 +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="k2dS2qUt" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726678AbfLFOqr (ORCPT ); Fri, 6 Dec 2019 09:46:47 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:41592 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726691AbfLFOqr (ORCPT ); Fri, 6 Dec 2019 09:46:47 -0500 Received: by mail-qk1-f195.google.com with SMTP id g15so6645718qka.8 for ; Fri, 06 Dec 2019 06:46:46 -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=melX/55R+mGKnJX2pY9dQE4ZsSx3WxtzyO6gYubI3RQ=; b=k2dS2qUtf+I+m5dety/rvhUzCKXjQSz/WmsOE456o53jmfgsCk9gPDnSzTqm9xIqZS YBc58rwCKVAyYsfBuplGfIJ1wp+7VIepiSYI8hut3EnDUmx0Onx1FUZ1DAQl2oq8L1yG GK7k4iLZsSxJx45b+PO9JIR4YH+X0qFlpdW38EhKWQR50gM0B/3WFUv3gmm9UhNyE6N7 /uZR7kY+ZBTNTSCX3VBEKq85Pz1dwejnMWAyZnij5y9eX4vTKraNfSNu7tcYmt2a5I34 tyvrRneo5tkbZsUarBEKSrE8yoAMEK2Ayh6iqjoAybArRZcjWRiBhFL+8vAMwu+3cHPr PaIg== 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=melX/55R+mGKnJX2pY9dQE4ZsSx3WxtzyO6gYubI3RQ=; b=h9II0wZIw6TTcmImnrEPTcyaKSCbkuhvM/kuF+6tpPhBh7s6WW02RCt5JibM3tOMCV teN/G2nry9hBFK63hEqxjd1ILNPislzxXi8G3v84vRRBC4OM1ohqbwzLgmg5zQq1pnXB IP1DIzpekCKQIU8phQGHrlUwzbCrTSEOIgPTGpD5aL5iJnOKucDBhE/7kqce/umXBaW9 cAoqv4726IkySfWVNs4JhDXedyQz8tYqsIEH+mDiU+mn8fVfEAs9RqSvv+/J+bpqhpGS nvuL53Ju1F8ZZrd7Gh814vDdPSRIrneAhRmgrZS1wtMNuz3p8dc2RIPmFrVFXhG4iMaN NEvQ== X-Gm-Message-State: APjAAAUhHaRKD92Hz+izsmemlzQHVxjpItoNavKEmg/VykaaK8rN1MCf XJN54b8tw5xKsRhy+EvInMipInrscceTzw== X-Google-Smtp-Source: APXvYqwy4DpcoqsOuMQMTSZ98lMBEy18kwX4vAIJXWl5/eQfgT4Fd8wsLaHJ/Rg28Y3X3bJqQIZGDA== X-Received: by 2002:a05:620a:2f6:: with SMTP id a22mr13698349qko.315.1575643605694; Fri, 06 Dec 2019 06:46:45 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id o33sm6602157qta.27.2019.12.06.06.46.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:44 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 37/44] btrfs: hold a ref on the root in btrfs_check_uuid_tree_entry Date: Fri, 6 Dec 2019 09:45:31 -0500 Message-Id: <20191206144538.168112-38-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup the uuid of arbitrary subvolumes, hold a ref on the root while we're doing this. Signed-off-by: Josef Bacik --- fs/btrfs/volumes.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 904c3e03467f..47ac3277ee08 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4379,6 +4379,10 @@ static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, ret = 1; goto out; } + if (!btrfs_grab_fs_root(subvol_root)) { + ret = 1; + goto out; + } switch (type) { case BTRFS_UUID_KEY_SUBVOL: @@ -4391,7 +4395,7 @@ static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, ret = 1; break; } - + btrfs_put_fs_root(subvol_root); out: return ret; } From patchwork Fri Dec 6 14:45:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276659 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 025D717EF for ; Fri, 6 Dec 2019 14:46:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D5E3E21835 for ; Fri, 6 Dec 2019 14:46:50 +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="pf8Ny8sQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726706AbfLFOqu (ORCPT ); Fri, 6 Dec 2019 09:46:50 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:43304 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726683AbfLFOqt (ORCPT ); Fri, 6 Dec 2019 09:46:49 -0500 Received: by mail-qk1-f193.google.com with SMTP id t129so1651794qke.10 for ; Fri, 06 Dec 2019 06:46:48 -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=4poh8aNUB/i/YeJ83if1ev6EcjxXbgT6mPWxrzXAFDc=; b=pf8Ny8sQ60UbLXhNH1K2Pswvsb3Qe3BAeQvdySu9WjdLnQTqdJvOEX3CNFp+CW7pHX VWAIRKNZ3eah1Qh2JRQBoFK2Vmoxr9YkAszND+kGuLEDbkapTt2PN+8g5fqRzGB30tfP vcYj0Wyfj5wvowfN3XGnZwsJnNNcc0W5E1IFu1D2/RC5jRxjzQNDUWJH54DnbZ/zGk81 6+a+HTJSmCm0Uxs7A3rOMmVwjyblFvYlAtbv6Pn5OkhKFQQ9e6+QS/fTgDmFNkPyeFd/ z3UucZ0/WIhgqFmVzPZzIzWRKVRdZI/FPpdFlgTbAUaDPXHClKjH7lM16YybQiIAi4eV FBzQ== 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=4poh8aNUB/i/YeJ83if1ev6EcjxXbgT6mPWxrzXAFDc=; b=IxAZIvKId82H23HpF9Vvshf030WwBk46/K5aUO7IPZOLuzo8eUx88quu6Zg4Df5u7s bPQ6ouCrQG4FM5eDgpjaSiNJADlJXhPancKunIq7Ps4tcYMOzDE7Q/Ijh7HNhS3dPKZ+ mVQHIUGjuvA0L/hlfUU4syCn0dsikN4rZl3UOq0S++d1ui7UCeS6TJHBv82eTbvFJ6Df MNGGKngMG6eDrJCateyw6+zMwK3TmJyuJXxBeM/r1sR9WEYo02TKiE5onwEDZNiMB3NJ 60kEt2rJz8CXwCa+45Bjz9U273ptVErAwZrVVu//6Xy668TqoF99zvt5kD1RVyb+kwVd ruMg== X-Gm-Message-State: APjAAAVNAmZkAwXa5hYYKafoQA21a4fBvxzIsJLE95NJJyp4kfRU+wiY qQL8no7S4I7JoksOy5qRwn1WeZ05saorVQ== X-Google-Smtp-Source: APXvYqyShTKWLtoTci2FqYE2NfSMp2H+ZFO+Zvvwv71MplQouuiu/EwuLZb/dgU6GJNgFO3KE4q9Qg== X-Received: by 2002:a37:5a44:: with SMTP id o65mr14186819qkb.327.1575643607355; Fri, 06 Dec 2019 06:46:47 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id p188sm6026741qkb.94.2019.12.06.06.46.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:46 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 38/44] btrfs: hold a ref on the root in open_ctree Date: Fri, 6 Dec 2019 09:45:32 -0500 Message-Id: <20191206144538.168112-39-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 lookup the fs_root and put it in our fs_info directly, we should hold a ref on this root for the lifetime of the fs_info. Rework the free'ing function so that it calls btrfs_put_fs_root() on the root at free time with all of the other global trees. Signed-off-by: Josef Bacik --- fs/btrfs/ctree.h | 17 ----------------- fs/btrfs/disk-io.c | 26 ++++++++++++++++++++++++++ fs/btrfs/disk-io.h | 1 + fs/btrfs/super.c | 6 +++--- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index b2e8fd8a8e59..8578c65890b2 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -2648,23 +2648,6 @@ static inline int btrfs_need_cleaner_sleep(struct btrfs_fs_info *fs_info) return fs_info->sb->s_flags & SB_RDONLY || btrfs_fs_closing(fs_info); } -static inline void free_fs_info(struct btrfs_fs_info *fs_info) -{ - kfree(fs_info->balance_ctl); - kfree(fs_info->delayed_root); - kfree(fs_info->extent_root); - kfree(fs_info->tree_root); - kfree(fs_info->chunk_root); - kfree(fs_info->dev_root); - kfree(fs_info->csum_root); - kfree(fs_info->quota_root); - kfree(fs_info->uuid_root); - kfree(fs_info->free_space_root); - kfree(fs_info->super_copy); - kfree(fs_info->super_for_commit); - kvfree(fs_info); -} - /* tree mod log functions from ctree.c */ u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info, struct seq_list *elem); diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index dfeeabfc341b..9435d4aa1668 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1525,6 +1525,25 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, return ret; } +void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) +{ + kfree(fs_info->balance_ctl); + kfree(fs_info->delayed_root); + kfree(fs_info->extent_root); + kfree(fs_info->tree_root); + kfree(fs_info->chunk_root); + kfree(fs_info->dev_root); + kfree(fs_info->csum_root); + kfree(fs_info->quota_root); + kfree(fs_info->uuid_root); + kfree(fs_info->free_space_root); + kfree(fs_info->super_copy); + kfree(fs_info->super_for_commit); + btrfs_put_fs_root(fs_info->fs_root); + kvfree(fs_info); +} + + struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_key *location, bool check_ref) @@ -3188,6 +3207,13 @@ int __cold open_ctree(struct super_block *sb, goto fail_qgroup; } + if (!btrfs_grab_fs_root(fs_info->fs_root)) { + fs_info->fs_root = NULL; + err = -ENOENT; + btrfs_warn(fs_info, "failed to grab a ref on the fs tree"); + goto fail_qgroup; + } + if (sb_rdonly(sb)) return 0; diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 1685dd2cf7ab..8fa0c8748db9 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -68,6 +68,7 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_key *key, bool check_ref); +void btrfs_free_fs_info(struct btrfs_fs_info *fs_info); int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info); void btrfs_btree_balance_dirty(struct btrfs_fs_info *fs_info); void btrfs_btree_balance_dirty_nodelay(struct btrfs_fs_info *fs_info); diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 9c50bee71de9..cc411304e2c9 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1559,7 +1559,7 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, if (s->s_root) { btrfs_close_devices(fs_devices); - free_fs_info(fs_info); + btrfs_free_fs_info(fs_info); if ((flags ^ s->s_flags) & SB_RDONLY) error = -EBUSY; } else { @@ -1582,7 +1582,7 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, error_close_devices: btrfs_close_devices(fs_devices); error_fs_info: - free_fs_info(fs_info); + btrfs_free_fs_info(fs_info); error_sec_opts: security_free_mnt_opts(&new_sec_opts); return ERR_PTR(error); @@ -2138,7 +2138,7 @@ static void btrfs_kill_super(struct super_block *sb) { struct btrfs_fs_info *fs_info = btrfs_sb(sb); kill_anon_super(sb); - free_fs_info(fs_info); + btrfs_free_fs_info(fs_info); } static struct file_system_type btrfs_fs_type = { From patchwork Fri Dec 6 14:45:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276661 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 EB8AB13B6 for ; Fri, 6 Dec 2019 14:46:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CA8DD24673 for ; Fri, 6 Dec 2019 14:46:51 +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="ztmpzZif" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726708AbfLFOqv (ORCPT ); Fri, 6 Dec 2019 09:46:51 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:44716 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOqu (ORCPT ); Fri, 6 Dec 2019 09:46:50 -0500 Received: by mail-qk1-f193.google.com with SMTP id i18so6626102qkl.11 for ; Fri, 06 Dec 2019 06:46:49 -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=KWMI/KNd0IXdEae8b+O4R9ELWAjIt9CPcrtySioh2io=; b=ztmpzZifl7jdeCgs3a/DASXEiAxY1wLkEcZrIwn5TrJ7uXGGDUmPiW4Timy4qqCaP9 sFP+z3MFlwvOWJZRxZi1EJ/tyfGCLLzxxx0wnaBXs/LH4tzhlHWIcIio7NMVwD+YfsSP tKq3Jc7TQup/KWPFkq2N8DgcLRbcdMiAb1vsRnBy9ob6jmGiT4qebXBmpA+ahSrMQIeN iq0yqmC4iaNLAZNq9UqTxCSsxOme592mV/rt11tcis/qpi2LTNE2C8uBH+LzA4KxgcT8 4USwzXH0my1L9BQJ7J204aNajvP88jO77DqYC1f4hpMyvYzYXCaoz/Ede5FwUXPVoCuX yGmQ== 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=KWMI/KNd0IXdEae8b+O4R9ELWAjIt9CPcrtySioh2io=; b=om0magGqUfLbBgFy7Jp3Qa6VdQWbCxGPL6bVYwKgOnvkoGf+LkzW41O1xWq8ECmxZd 4ugHyLaIhXRfgeNXEvwj6EFG1w9bIviaf+GTg4/vUnKAztxIB21rt47BBnR9aG+Qx+IN k+NzKgoxgBLf/1WSiM85jjgMSehxBkqIHK106sQNNc5tUV6AW0xseoI4xioDsph5HqyD 1aBNXBdbQaOn72bHkzHwhxlBS9wYGjhrosPiKrM/n7UXMJvDQUdmVrcrca1FfcPhiiP0 2Gq93sA5wF22zRLVSCbIYGbeBH94QgtyquY0S9+BF/rzFpaVmRYVmx+Dy2enYxueZbPR twKg== X-Gm-Message-State: APjAAAVX87XH1YQvluYB8W+Qtwt273WY1RHe1YHVPWwyYH7DsmXysSGh QDR3M6JFLkJCtZ+FEx1wAqSyr0vmiD89PA== X-Google-Smtp-Source: APXvYqx/XeMqTMDrzL7HRqx9wiK7SHpE6ykFVJvrMz5q6UmkZV7fxY5gK4oeuIvhGzVdV6JaJcfUzQ== X-Received: by 2002:a37:5f43:: with SMTP id t64mr14201481qkb.68.1575643608977; Fri, 06 Dec 2019 06:46:48 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id u124sm861837qkc.41.2019.12.06.06.46.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:48 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 39/44] btrfs: use btrfs_put_fs_root to free roots always Date: Fri, 6 Dec 2019 09:45:33 -0500 Message-Id: <20191206144538.168112-40-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 are going to track leaked roots we need to free them all the same way, so don't kfree() roots directly, use btrfs_put_fs_root. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 30 +++++++++++++++--------------- fs/btrfs/free-space-tree.c | 2 +- fs/btrfs/qgroup.c | 4 ++-- fs/btrfs/tree-log.c | 8 ++++---- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 9435d4aa1668..b7a2c570c438 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1299,7 +1299,7 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, free_extent_buffer(root->commit_root); free_extent_buffer(leaf); } - kfree(root); + btrfs_put_fs_root(root); return ERR_PTR(ret); } @@ -1330,7 +1330,7 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans, leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID, NULL, 0, 0, 0); if (IS_ERR(leaf)) { - kfree(root); + btrfs_put_fs_root(root); return ERR_CAST(leaf); } @@ -1433,7 +1433,7 @@ struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, return root; find_fail: - kfree(root); + btrfs_put_fs_root(root); alloc_fail: root = ERR_PTR(ret); goto out; @@ -1529,17 +1529,17 @@ void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) { kfree(fs_info->balance_ctl); kfree(fs_info->delayed_root); - kfree(fs_info->extent_root); - kfree(fs_info->tree_root); - kfree(fs_info->chunk_root); - kfree(fs_info->dev_root); - kfree(fs_info->csum_root); - kfree(fs_info->quota_root); - kfree(fs_info->uuid_root); - kfree(fs_info->free_space_root); + btrfs_put_fs_root(fs_info->extent_root); + btrfs_put_fs_root(fs_info->tree_root); + btrfs_put_fs_root(fs_info->chunk_root); + btrfs_put_fs_root(fs_info->dev_root); + btrfs_put_fs_root(fs_info->csum_root); + btrfs_put_fs_root(fs_info->quota_root); + btrfs_put_fs_root(fs_info->uuid_root); + btrfs_put_fs_root(fs_info->free_space_root); + btrfs_put_fs_root(fs_info->fs_root); kfree(fs_info->super_copy); kfree(fs_info->super_for_commit); - btrfs_put_fs_root(fs_info->fs_root); kvfree(fs_info); } @@ -2220,12 +2220,12 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, if (IS_ERR(log_tree_root->node)) { btrfs_warn(fs_info, "failed to read log tree"); ret = PTR_ERR(log_tree_root->node); - kfree(log_tree_root); + btrfs_put_fs_root(log_tree_root); return ret; } else if (!extent_buffer_uptodate(log_tree_root->node)) { btrfs_err(fs_info, "failed to read log tree"); free_extent_buffer(log_tree_root->node); - kfree(log_tree_root); + btrfs_put_fs_root(log_tree_root); return -EIO; } /* returns with log_tree_root freed on success */ @@ -2234,7 +2234,7 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, btrfs_handle_fs_error(fs_info, ret, "Failed to recover log tree"); free_extent_buffer(log_tree_root->node); - kfree(log_tree_root); + btrfs_put_fs_root(log_tree_root); return ret; } diff --git a/fs/btrfs/free-space-tree.c b/fs/btrfs/free-space-tree.c index 258cb3fae17a..c79804c30b17 100644 --- a/fs/btrfs/free-space-tree.c +++ b/fs/btrfs/free-space-tree.c @@ -1253,7 +1253,7 @@ int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info) free_extent_buffer(free_space_root->node); free_extent_buffer(free_space_root->commit_root); - kfree(free_space_root); + btrfs_put_fs_root(free_space_root); return btrfs_commit_transaction(trans); diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 93aeb2e539a4..762f254b4b38 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1040,7 +1040,7 @@ int btrfs_quota_enable(struct btrfs_fs_info *fs_info) if (ret) { free_extent_buffer(quota_root->node); free_extent_buffer(quota_root->commit_root); - kfree(quota_root); + btrfs_put_fs_root(quota_root); } out: if (ret) { @@ -1106,7 +1106,7 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info) free_extent_buffer(quota_root->node); free_extent_buffer(quota_root->commit_root); - kfree(quota_root); + btrfs_put_fs_root(quota_root); end_trans: ret = btrfs_end_transaction(trans); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 07e7fd508213..f2c26e07eedb 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3296,7 +3296,7 @@ static void free_log_tree(struct btrfs_trans_handle *trans, clear_extent_bits(&log->dirty_log_pages, 0, (u64)-1, EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT); free_extent_buffer(log->node); - kfree(log); + btrfs_put_fs_root(log); } /* @@ -6316,7 +6316,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) log->node->len); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); - kfree(log); + btrfs_put_fs_root(log); if (!ret) goto next; @@ -6355,7 +6355,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) btrfs_put_fs_root(wc.replay_dest); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); - kfree(log); + btrfs_put_fs_root(log); if (ret) goto error; @@ -6389,7 +6389,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) free_extent_buffer(log_root_tree->node); log_root_tree->log_root = NULL; clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags); - kfree(log_root_tree); + btrfs_put_fs_root(log_root_tree); return 0; error: From patchwork Fri Dec 6 14:45:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276663 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 9DED413B6 for ; Fri, 6 Dec 2019 14:46:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6868521835 for ; Fri, 6 Dec 2019 14:46:53 +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="QGPmu85z" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726720AbfLFOqw (ORCPT ); Fri, 6 Dec 2019 09:46:52 -0500 Received: from mail-qv1-f67.google.com ([209.85.219.67]:43607 "EHLO mail-qv1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOqw (ORCPT ); Fri, 6 Dec 2019 09:46:52 -0500 Received: by mail-qv1-f67.google.com with SMTP id p2so2719248qvo.10 for ; Fri, 06 Dec 2019 06:46:51 -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=BNEOYl0NHYkyE02GwcbxQAyBPTQ+49Ktcl+xwDOY8ho=; b=QGPmu85z6K2vhBHL7xt+UY/NSjgfyip0Mzb/mkOBJX7nDYUfeuOUCCBGM0uqddBhg7 xcHkPDHwHNSe3w0C86hpVmRwf2Tme/i3PswMDISQz3oT2bA/AQrefXETxgL6L45+BasO B3s+5wVGfpovJv1F6TvGecU9Qgm5np+a6jaL4IEq3EvS3YTEL4IyyI0jF+d1s84uDa3h COA092fiKJAIYTCw20t2G9LFPii8/gjw3j06G6NTqJMvTqO6/ODJqKjCI4Nz4xVZvutR JPzaNuA+h+DOnCmXspZ0aPTv8HvGYP1MdmPEzo0Rx8Ospame6vS3v5QMQDxXIZh76YK6 qIyQ== 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=BNEOYl0NHYkyE02GwcbxQAyBPTQ+49Ktcl+xwDOY8ho=; b=dbW9Rdt3SevbZMM/sf0/+fHSQA+Ru4/lxUFU+JCmLb7WNns14uXd2F4+odlGjPVN9D saKEHuHyNFvIUTXaraRTCD1LzPCEXSR2OGQ0zWWnSG5EQ8zKWQuZEPvrPiEPTbH74OkV P1cjRq35Hfq6I5FjSLnl3UBJdeV2urcSREm5FQsBQI+l4fKUWp8dSxKxKY4YovAeTpLY lxYQ///kbJZWK6MidSIRgs2DYRCBsUB6lx3vBo1ep86dxyx9Hh4lMM4YJdym7XnXPGpk W4tA2Sb8+mTjK9uidTxUP03vPM3TXT/CoY/HTnK8notgQ2W0o+YQFMqnxFuXEvAHYeVQ VTUg== X-Gm-Message-State: APjAAAWS55QmcESO0ICSBiI9T669tGd0dwUDSluWZ+i39bTiFJXKYDy4 KhmbIp5YjSnEkncnPs29/V6qVXUsVTFlyw== X-Google-Smtp-Source: APXvYqzOmNpqrL7GLaD2CCR3BGhBxtFJhUupqVCGNRdzlDKHXjUWm0Cf4Np3X6+9yyZpBSPUOPLWRQ== X-Received: by 2002:a05:6214:1804:: with SMTP id o4mr12577626qvw.3.1575643610718; Fri, 06 Dec 2019 06:46:50 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id r37sm6428323qtj.44.2019.12.06.06.46.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:50 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 40/44] btrfs: push btrfs_grab_fs_root into btrfs_get_fs_root Date: Fri, 6 Dec 2019 09:45:34 -0500 Message-Id: <20191206144538.168112-41-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Now that all callers of btrfs_get_fs_root are subsequently calling btrfs_grab_fs_root and handling dropping the ref when they are done appropriately, go ahead and push btrfs_grab_fs_root up into btrfs_get_fs_root. Signed-off-by: Josef Bacik --- fs/btrfs/backref.c | 6 ------ fs/btrfs/disk-io.c | 48 +++++++++++++++++++++++++----------------- fs/btrfs/export.c | 4 ---- fs/btrfs/file.c | 4 ---- fs/btrfs/inode.c | 9 -------- fs/btrfs/ioctl.c | 26 ----------------------- fs/btrfs/relocation.c | 8 +------ fs/btrfs/root-tree.c | 2 -- fs/btrfs/scrub.c | 4 ---- fs/btrfs/send.c | 11 ---------- fs/btrfs/super.c | 4 ---- fs/btrfs/transaction.c | 6 ------ fs/btrfs/tree-log.c | 4 ---- fs/btrfs/volumes.c | 4 ---- 14 files changed, 30 insertions(+), 110 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 193747b6e1f9..b69154d72529 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -527,12 +527,6 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info, goto out_free; } - if (!btrfs_grab_fs_root(root)) { - srcu_read_unlock(&fs_info->subvol_srcu, index); - ret = -ENOENT; - goto out_free; - } - if (btrfs_is_testing(fs_info)) { srcu_read_unlock(&fs_info->subvol_srcu, index); ret = -ENOENT; diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index b7a2c570c438..adcabd6d3a92 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1498,6 +1498,8 @@ static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, spin_lock(&fs_info->fs_roots_radix_lock); root = radix_tree_lookup(&fs_info->fs_roots_radix, (unsigned long)root_id); + if (root) + root = btrfs_grab_fs_root(root); spin_unlock(&fs_info->fs_roots_radix_lock); return root; } @@ -1554,29 +1556,34 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, int ret; if (location->objectid == BTRFS_ROOT_TREE_OBJECTID) - return fs_info->tree_root; + return btrfs_grab_fs_root(fs_info->tree_root); if (location->objectid == BTRFS_EXTENT_TREE_OBJECTID) - return fs_info->extent_root; + return btrfs_grab_fs_root(fs_info->extent_root); if (location->objectid == BTRFS_CHUNK_TREE_OBJECTID) - return fs_info->chunk_root; + return btrfs_grab_fs_root(fs_info->chunk_root); if (location->objectid == BTRFS_DEV_TREE_OBJECTID) - return fs_info->dev_root; + return btrfs_grab_fs_root(fs_info->dev_root); if (location->objectid == BTRFS_CSUM_TREE_OBJECTID) - return fs_info->csum_root; + return btrfs_grab_fs_root(fs_info->csum_root); if (location->objectid == BTRFS_QUOTA_TREE_OBJECTID) - return fs_info->quota_root ? fs_info->quota_root : - ERR_PTR(-ENOENT); + return fs_info->quota_root ? + btrfs_grab_fs_root(fs_info->quota_root) : + ERR_PTR(-ENOENT); if (location->objectid == BTRFS_UUID_TREE_OBJECTID) - return fs_info->uuid_root ? fs_info->uuid_root : - ERR_PTR(-ENOENT); + return fs_info->uuid_root ? + btrfs_grab_fs_root(fs_info->uuid_root) : + ERR_PTR(-ENOENT); if (location->objectid == BTRFS_FREE_SPACE_TREE_OBJECTID) - return fs_info->free_space_root ? fs_info->free_space_root : - ERR_PTR(-ENOENT); + return fs_info->free_space_root ? + btrfs_grab_fs_root(fs_info->free_space_root) : + ERR_PTR(-ENOENT); again: root = btrfs_lookup_fs_root(fs_info, location->objectid); if (root) { - if (check_ref && btrfs_root_refs(&root->root_item) == 0) + if (check_ref && btrfs_root_refs(&root->root_item) == 0) { + btrfs_put_fs_root(root); return ERR_PTR(-ENOENT); + } return root; } @@ -1609,8 +1616,18 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, if (ret == 0) set_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state); + /* + * All roots have two refs on them at all times, one for the mounted fs, + * and one for being in the radix tree. This way we only free the root + * when we are unmounting or deleting the subvolume. We get one ref + * from __setup_root, one for inserting it into the radix tree, and then + * we have the third for returning it, and the caller will put it when + * it's done with the root. + */ + btrfs_grab_fs_root(root); ret = btrfs_insert_fs_root(fs_info, root); if (ret) { + btrfs_put_fs_root(root); if (ret == -EEXIST) { btrfs_free_fs_root(root); goto again; @@ -3207,13 +3224,6 @@ int __cold open_ctree(struct super_block *sb, goto fail_qgroup; } - if (!btrfs_grab_fs_root(fs_info->fs_root)) { - fs_info->fs_root = NULL; - err = -ENOENT; - btrfs_warn(fs_info, "failed to grab a ref on the fs tree"); - goto fail_qgroup; - } - if (sb_rdonly(sb)) return 0; diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c index eba6c6d27bad..f07c2300ade2 100644 --- a/fs/btrfs/export.c +++ b/fs/btrfs/export.c @@ -82,10 +82,6 @@ static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, err = PTR_ERR(root); goto fail; } - if (!btrfs_grab_fs_root(root)) { - err = -ENOENT; - goto fail; - } key.objectid = objectid; key.type = BTRFS_INODE_ITEM_KEY; diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index f8e16f44a970..062580a1721f 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -292,10 +292,6 @@ static int __btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, ret = PTR_ERR(inode_root); goto cleanup; } - if (!btrfs_grab_fs_root(inode_root)) { - ret = -ENOENT; - goto cleanup; - } key.objectid = defrag->ino; key.type = BTRFS_INODE_ITEM_KEY; diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5fa39ac23472..bc961ca6995f 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2523,8 +2523,6 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, inum, offset, root_id); return PTR_ERR(root); } - if (!btrfs_grab_fs_root(root)) - return 0; key.objectid = inum; key.type = BTRFS_EXTENT_DATA_KEY; @@ -2711,9 +2709,6 @@ static noinline int relink_extent_backref(struct btrfs_path *path, return PTR_ERR(root); } - if (!btrfs_grab_fs_root(root)) - return 0; - if (btrfs_root_readonly(root)) { srcu_read_unlock(&fs_info->subvol_srcu, index); return 0; @@ -5689,10 +5684,6 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info, err = PTR_ERR(new_root); goto out; } - if (!btrfs_grab_fs_root(new_root)) { - err = -ENOENT; - goto out; - } *sub_root = new_root; location->objectid = btrfs_root_dirid(&new_root->root_item); diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d5a994ab9602..7df2576aa2e3 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -672,11 +672,6 @@ static noinline int create_subvol(struct inode *dir, btrfs_abort_transaction(trans, ret); goto fail; } - if (!btrfs_grab_fs_root(new_root)) { - ret = -ENOENT; - btrfs_abort_transaction(trans, ret); - goto fail; - } btrfs_record_root_in_trans(trans, new_root); @@ -2191,10 +2186,6 @@ static noinline int search_ioctl(struct inode *inode, btrfs_free_path(path); return PTR_ERR(root); } - if (!btrfs_grab_fs_root(root)) { - btrfs_free_path(path); - return -ENOENT; - } } key.objectid = sk->min_objectid; @@ -2332,11 +2323,6 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, root = NULL; goto out; } - if (!btrfs_grab_fs_root(root)) { - ret = -ENOENT; - root = NULL; - goto out; - } key.objectid = dirid; key.type = BTRFS_INODE_REF_KEY; @@ -2433,10 +2419,6 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, ret = PTR_ERR(root); goto out; } - if (!btrfs_grab_fs_root(root)) { - ret = -ENOENT; - goto out; - } key.objectid = dirid; key.type = BTRFS_INODE_REF_KEY; @@ -2686,10 +2668,6 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp) ret = PTR_ERR(root); goto out_free; } - if (!btrfs_grab_fs_root(root)) { - ret = -ENOENT; - goto out; - } root_item = &root->root_item; subvol_info->treeid = key.objectid; @@ -4025,10 +4003,6 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) ret = PTR_ERR(new_root); goto out; } - if (!btrfs_grab_fs_root(root)) { - ret = -ENOENT; - goto out; - } if (!is_fstree(new_root->root_key.objectid)) { ret = -ENOENT; goto out_free; diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 086c8126ebf2..f6d63d6cf22d 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -581,7 +581,6 @@ static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info, u64 root_objectid) { struct btrfs_key key; - struct btrfs_root *root; key.objectid = root_objectid; key.type = BTRFS_ROOT_ITEM_KEY; @@ -590,12 +589,7 @@ static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info, else key.offset = (u64)-1; - root = btrfs_get_fs_root(fs_info, &key, false); - if (IS_ERR(root)) - return root; - if (!btrfs_grab_fs_root(root)) - return ERR_PTR(-ENOENT); - return root; + return btrfs_get_fs_root(fs_info, &key, false); } static noinline_for_stack diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index cac2407cc003..2c94b5318b40 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -257,8 +257,6 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) root = btrfs_get_fs_root(fs_info, &root_key, false); err = PTR_ERR_OR_ZERO(root); - if (!err && !btrfs_grab_fs_root(root)) - err = -ENOENT; if (err && err != -ENOENT) { break; } else if (err == -ENOENT) { diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index 904e860c509c..0c8b60055c2e 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -657,10 +657,6 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ret = PTR_ERR(local_root); goto err; } - if (!btrfs_grab_fs_root(local_root)) { - ret = -ENOENT; - goto err; - } /* * this makes the path point to (inum INODE_ITEM ioff) diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index a82201e6979e..6520ad8f4e81 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7206,11 +7206,6 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) ret = PTR_ERR(clone_root); goto out; } - if (!btrfs_grab_fs_root(clone_root)) { - srcu_read_unlock(&fs_info->subvol_srcu, index); - ret = -ENOENT; - goto out; - } spin_lock(&clone_root->root_item_lock); if (!btrfs_root_readonly(clone_root) || btrfs_root_dead(clone_root)) { @@ -7252,12 +7247,6 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) ret = PTR_ERR(sctx->parent_root); goto out; } - if (!btrfs_grab_fs_root(sctx->parent_root)) { - srcu_read_unlock(&fs_info->subvol_srcu, index); - ret = -ENOENT; - sctx->parent_root = ERR_PTR(ret); - goto out; - } spin_lock(&sctx->parent_root->root_item_lock); sctx->parent_root->send_in_progress++; diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index cc411304e2c9..80fea16cf34c 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1082,10 +1082,6 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ret = PTR_ERR(fs_root); goto err; } - if (!btrfs_grab_fs_root(fs_root)) { - ret = -ENOENT; - goto err; - } /* * Walk up the filesystem tree by inode refs until we hit the diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 7008def3391b..e194d3e4e3a9 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1637,12 +1637,6 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, btrfs_abort_transaction(trans, ret); goto fail; } - if (!btrfs_grab_fs_root(pending->snap)) { - ret = -ENOENT; - pending->snap = NULL; - btrfs_abort_transaction(trans, ret); - goto fail; - } ret = btrfs_reloc_post_snapshot(trans, pending); if (ret) { diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index f2c26e07eedb..32ee8698a87f 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6292,10 +6292,6 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) tmp_key.offset = (u64)-1; wc.replay_dest = btrfs_get_fs_root(fs_info, &tmp_key, true); - if (!IS_ERR(wc.replay_dest)) { - if (!btrfs_grab_fs_root(wc.replay_dest)) - wc.replay_dest = ERR_PTR(-ENOENT); - } if (IS_ERR(wc.replay_dest)) { ret = PTR_ERR(wc.replay_dest); diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 47ac3277ee08..d261a39b7aa6 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4379,10 +4379,6 @@ static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, ret = 1; goto out; } - if (!btrfs_grab_fs_root(subvol_root)) { - ret = 1; - goto out; - } switch (type) { case BTRFS_UUID_KEY_SUBVOL: From patchwork Fri Dec 6 14:45:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276665 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 76E12138D for ; Fri, 6 Dec 2019 14:46:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 485CE24673 for ; Fri, 6 Dec 2019 14:46:55 +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="HKtgUUIn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726748AbfLFOqy (ORCPT ); Fri, 6 Dec 2019 09:46:54 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:45898 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOqx (ORCPT ); Fri, 6 Dec 2019 09:46:53 -0500 Received: by mail-qk1-f195.google.com with SMTP id x1so6612404qkl.12 for ; Fri, 06 Dec 2019 06:46:53 -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=U++7CsDgUAoHRCm78Kd0126Dyi+0UgtaVwJWjzfHBzM=; b=HKtgUUInI8qSDAb2+rDS57oAEGj6jCws9Thw2vjrLuaWElTABrbz08aSdAD82leZan +Kkos2lsoOHhfPog3wlmIKU4ehQ9e/Pcvg06G6YK13FJFl4aLQlP422rMatqEAHP/r+T Ji+MHULmtQPTJfB5TfgQzzpR++dUv7DHfYWHrIXZ8yr58IivsQbGi576LoQiRgh7jRWN 2qZ+P1Ca01HqE8dfSp/Evv+Xs5Xrnxl3IjOrgO1oaUD3DuRXLI+QRzP9OaojFwlQYFte LWNaih90jAFls1+gznL4oE4jKiCfHfCVTcPZmNPfZf5kydJqOp3XAmAvo74GbW9hwOqW pwcA== 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=U++7CsDgUAoHRCm78Kd0126Dyi+0UgtaVwJWjzfHBzM=; b=tg216+6G8/f2CmuJJmZIS93nRViECBQ+sDjSsCERRqnJed1C1JMQdf2xRmAyKYyRu7 DWRD+ORbXqtjJXYeKOH4LAZxftX3DFGpawvhcYsIBqmFTsXZQR9X92yQBdQGq+Gn2vEr TVkANgaPh7UK4BLcIl7tFIyYQETv3jq+768FQB2xMh5dwou08Ywr4HjfZhLmtPVebHk7 LkDCV8tqI9WD0+q7XVviSh5OMOHaSKMJQ+SAneB605I5/7XDHuKIWU4++9QXhhbBM2Ix rOgAjpNpoq1HIqPbxEBtw5ejh5M8BON20hMcWZH5iS0m/1pWczG3x9eDr3UX+jLKddZS BYcw== X-Gm-Message-State: APjAAAWby75EQRSCsE0aDkARXNUNUuO6PgErA4uxNwjcTuyIj5xOsQJ8 lyjr0IRF6Yor20desgw+HUOuPDxMpI7iNQ== X-Google-Smtp-Source: APXvYqx9omaTU9hWVIfUJZWxH6tqvz6c92dcxkV8A9mdc9X4Wo22QmwOuWPwxD2AjZwfN2yQuJ4utw== X-Received: by 2002:a05:620a:23a:: with SMTP id u26mr13862076qkm.426.1575643612424; Fri, 06 Dec 2019 06:46:52 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id j25sm780632qtc.70.2019.12.06.06.46.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:51 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 41/44] btrfs: free more things in btrfs_free_fs_info Date: Fri, 6 Dec 2019 09:45:35 -0500 Message-Id: <20191206144538.168112-42-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Things like the percpu_counters, the mapping_tree, and the csum hash can all be free'd at btrfs_free_fs_info time, since the helpers all check if the structure has been init'ed already. This significantly cleans up the error cases in open_ctree. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 60 +++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index adcabd6d3a92..c7163229effc 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -97,6 +97,12 @@ void __cold btrfs_end_io_wq_exit(void) kmem_cache_destroy(btrfs_end_io_wq_cache); } +static void btrfs_free_csum_hash(struct btrfs_fs_info *fs_info) +{ + if (fs_info->csum_shash) + crypto_free_shash(fs_info->csum_shash); +} + /* * async submit bios are used to offload expensive checksumming * onto the worker threads. They checksum file and metadata bios @@ -1529,6 +1535,13 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) { + percpu_counter_destroy(&fs_info->dirty_metadata_bytes); + percpu_counter_destroy(&fs_info->delalloc_bytes); + percpu_counter_destroy(&fs_info->dio_bytes); + percpu_counter_destroy(&fs_info->dev_replace.bio_counter); + btrfs_free_csum_hash(fs_info); + btrfs_free_stripe_hash_table(fs_info); + btrfs_free_ref_cache(fs_info); kfree(fs_info->balance_ctl); kfree(fs_info->delayed_root); btrfs_put_fs_root(fs_info->extent_root); @@ -2207,11 +2220,6 @@ static int btrfs_init_csum_hash(struct btrfs_fs_info *fs_info, u16 csum_type) return 0; } -static void btrfs_free_csum_hash(struct btrfs_fs_info *fs_info) -{ - crypto_free_shash(fs_info->csum_shash); -} - static int btrfs_replay_log(struct btrfs_fs_info *fs_info, struct btrfs_fs_devices *fs_devices) { @@ -2686,7 +2694,7 @@ int __cold open_ctree(struct super_block *sb, ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); if (ret) { err = ret; - goto fail_dio_bytes; + goto fail_srcu; } fs_info->dirty_metadata_batch = PAGE_SIZE * (1 + ilog2(nr_cpu_ids)); @@ -2694,14 +2702,14 @@ int __cold open_ctree(struct super_block *sb, ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); if (ret) { err = ret; - goto fail_dirty_metadata_bytes; + goto fail_srcu; } ret = percpu_counter_init(&fs_info->dev_replace.bio_counter, 0, GFP_KERNEL); if (ret) { err = ret; - goto fail_delalloc_bytes; + goto fail_srcu; } INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); @@ -2769,7 +2777,7 @@ int __cold open_ctree(struct super_block *sb, fs_info->btree_inode = new_inode(sb); if (!fs_info->btree_inode) { err = -ENOMEM; - goto fail_bio_counter; + goto fail_srcu; } mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); @@ -2881,7 +2889,7 @@ int __cold open_ctree(struct super_block *sb, btrfs_err(fs_info, "superblock checksum mismatch"); err = -EINVAL; brelse(bh); - goto fail_csum; + goto fail_alloc; } /* @@ -2918,11 +2926,11 @@ int __cold open_ctree(struct super_block *sb, if (ret) { btrfs_err(fs_info, "superblock contains fatal errors"); err = -EINVAL; - goto fail_csum; + goto fail_alloc; } if (!btrfs_super_root(disk_super)) - goto fail_csum; + goto fail_alloc; /* check FS state, whether FS is broken. */ if (btrfs_super_flags(disk_super) & BTRFS_SUPER_FLAG_ERROR) @@ -2937,7 +2945,7 @@ int __cold open_ctree(struct super_block *sb, ret = btrfs_parse_options(fs_info, options, sb->s_flags); if (ret) { err = ret; - goto fail_csum; + goto fail_alloc; } features = btrfs_super_incompat_flags(disk_super) & @@ -2947,7 +2955,7 @@ int __cold open_ctree(struct super_block *sb, "cannot mount because of unsupported optional features (%llx)", features); err = -EINVAL; - goto fail_csum; + goto fail_alloc; } features = btrfs_super_incompat_flags(disk_super); @@ -2991,7 +2999,7 @@ int __cold open_ctree(struct super_block *sb, btrfs_err(fs_info, "unequal nodesize/sectorsize (%u != %u) are not allowed for mixed block groups", nodesize, sectorsize); - goto fail_csum; + goto fail_alloc; } /* @@ -3007,7 +3015,7 @@ int __cold open_ctree(struct super_block *sb, "cannot mount read-write because of unsupported optional features (%llx)", features); err = -EINVAL; - goto fail_csum; + goto fail_alloc; } ret = btrfs_init_workqueues(fs_info, fs_devices); @@ -3348,25 +3356,14 @@ int __cold open_ctree(struct super_block *sb, fail_sb_buffer: btrfs_stop_all_workers(fs_info); btrfs_free_block_groups(fs_info); -fail_csum: - btrfs_free_csum_hash(fs_info); fail_alloc: fail_iput: btrfs_mapping_tree_free(&fs_info->mapping_tree); iput(fs_info->btree_inode); -fail_bio_counter: - percpu_counter_destroy(&fs_info->dev_replace.bio_counter); -fail_delalloc_bytes: - percpu_counter_destroy(&fs_info->delalloc_bytes); -fail_dirty_metadata_bytes: - percpu_counter_destroy(&fs_info->dirty_metadata_bytes); -fail_dio_bytes: - percpu_counter_destroy(&fs_info->dio_bytes); fail_srcu: cleanup_srcu_struct(&fs_info->subvol_srcu); fail: - btrfs_free_stripe_hash_table(fs_info); btrfs_close_devices(fs_info->fs_devices); return err; } @@ -4063,16 +4060,7 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info) btrfs_mapping_tree_free(&fs_info->mapping_tree); btrfs_close_devices(fs_info->fs_devices); - - percpu_counter_destroy(&fs_info->dirty_metadata_bytes); - percpu_counter_destroy(&fs_info->delalloc_bytes); - percpu_counter_destroy(&fs_info->dio_bytes); - percpu_counter_destroy(&fs_info->dev_replace.bio_counter); cleanup_srcu_struct(&fs_info->subvol_srcu); - - btrfs_free_csum_hash(fs_info); - btrfs_free_stripe_hash_table(fs_info); - btrfs_free_ref_cache(fs_info); } int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid, From patchwork Fri Dec 6 14:45:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276667 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 2F1AA13B6 for ; Fri, 6 Dec 2019 14:46:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 04E8124673 for ; Fri, 6 Dec 2019 14:46:57 +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="LqLWZwR7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726761AbfLFOq4 (ORCPT ); Fri, 6 Dec 2019 09:46:56 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:42070 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOqz (ORCPT ); Fri, 6 Dec 2019 09:46:55 -0500 Received: by mail-qk1-f193.google.com with SMTP id a10so6643831qko.9 for ; Fri, 06 Dec 2019 06:46:55 -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=WX62XFGdRTFAYg+p96wiK+WMiqaGhA7AxwyBRxGzd6Y=; b=LqLWZwR7MCjxf1lAlb2XsNQeqK6RLKAf6uzdq3vvjudktYf+YSSpOXLKDZZxv2dMWt Fjy79tKhCDMaZ1JIqJTyIXrLNY/5mjvJ0F/LvLxcv6ck/He3CLGLsl7kN1XiYWQJDJ76 lI2tYiPRdZaBJ3+Zz89cgU1XB7Q730waQV94WYdZo/ozOphJ2BJgQFAVinL77N5tA/yH bsMOJ/E0EUjECg8kPWexYDMP7V05N4Q0dK+CNpAY6KS+dFJqxURwmiBXjoHbpnwd1vJ2 kqYssLoI9o/PipXGBCNq5MsDMldIko/X3Qg2Xg5xcTbrqP+siH+U7b3OMTh7Mv95M5G7 Ji4Q== 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=WX62XFGdRTFAYg+p96wiK+WMiqaGhA7AxwyBRxGzd6Y=; b=ETxHUoCO6l3uabX8hBfPukssBF6wm59u5BhzBEIS7BNwiQtsYREbYwW2Q5th9UFlGQ nUu7TEiH4xSo6pOqumOW0HrMDbcfEf4NRndRayr/rfQJABhmbIaIRfLSkYHLBbrlVY9+ i4wlDedoPgIhOPEVRlSimjknHSMjjL/KcZt9/MsklxzIH/X5JftuYpf4qEemk+CEYdGJ 8kmXs6mmCJWVEjKjRKbUItNiYS8yux4Tjlnuw09C8f8csDol2UOo9O8cyWe/nXJeDZg2 Bimm4qyxo/d0TqJxfJEif5z+pjrEKMjhhla3aDPs3wqjUVPNiO0BVVWKOXvzBCGgD5l1 iY8w== X-Gm-Message-State: APjAAAVa/MPJZzHy+As7FFptv+n3NXFOEV1x1QQ/Q8MtBR9rJQYH8qja vQkADPA9jae0o+C/MP5YCDfBKfsyxmk//A== X-Google-Smtp-Source: APXvYqxckKjVj146KkIaBAsqiKMjSd0JdXypQj6TPr6738Ri+XJRlg6oxFz8M/2juMy6nnngzb7xLQ== X-Received: by 2002:a05:620a:10b8:: with SMTP id h24mr14395345qkk.332.1575643614069; Fri, 06 Dec 2019 06:46:54 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id d143sm526564qke.123.2019.12.06.06.46.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:53 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 42/44] btrfs: move fs_info init work into it's own helper function Date: Fri, 6 Dec 2019 09:45:36 -0500 Message-Id: <20191206144538.168112-43-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 open_ctree mixes initialization of fs stuff and fs_info stuff, which makes it confusing when doing things like adding the root leak detection. Make a separate function that init's all the static structures inside of the fs_info needed for the fs to operate, and then call that before we start setting up the fs_info to be mounted. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 164 +++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 81 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index c7163229effc..6151c828a311 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2649,68 +2649,9 @@ static int __cold init_tree_roots(struct btrfs_fs_info *fs_info) return ret; } -int __cold open_ctree(struct super_block *sb, - struct btrfs_fs_devices *fs_devices, - char *options) +static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) { - u32 sectorsize; - u32 nodesize; - u32 stripesize; - u64 generation; - u64 features; - u16 csum_type; - struct btrfs_key location; - struct buffer_head *bh; - struct btrfs_super_block *disk_super; - struct btrfs_fs_info *fs_info = btrfs_sb(sb); - struct btrfs_root *tree_root; - struct btrfs_root *chunk_root; int ret; - int err = -EINVAL; - int clear_free_space_tree = 0; - int level; - - tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, - BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL); - chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, - BTRFS_CHUNK_TREE_OBJECTID, GFP_KERNEL); - if (!tree_root || !chunk_root) { - err = -ENOMEM; - goto fail; - } - - ret = init_srcu_struct(&fs_info->subvol_srcu); - if (ret) { - err = ret; - goto fail; - } - - ret = percpu_counter_init(&fs_info->dio_bytes, 0, GFP_KERNEL); - if (ret) { - err = ret; - goto fail_srcu; - } - - ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); - if (ret) { - err = ret; - goto fail_srcu; - } - fs_info->dirty_metadata_batch = PAGE_SIZE * - (1 + ilog2(nr_cpu_ids)); - - ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); - if (ret) { - err = ret; - goto fail_srcu; - } - - ret = percpu_counter_init(&fs_info->dev_replace.bio_counter, 0, - GFP_KERNEL); - if (ret) { - err = ret; - goto fail_srcu; - } INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); @@ -2774,21 +2715,6 @@ int __cold open_ctree(struct super_block *sb, INIT_LIST_HEAD(&fs_info->ordered_roots); spin_lock_init(&fs_info->ordered_root_lock); - fs_info->btree_inode = new_inode(sb); - if (!fs_info->btree_inode) { - err = -ENOMEM; - goto fail_srcu; - } - mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); - - fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root), - GFP_KERNEL); - if (!fs_info->delayed_root) { - err = -ENOMEM; - goto fail_iput; - } - btrfs_init_delayed_root(fs_info->delayed_root); - btrfs_init_scrub(fs_info); #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY fs_info->check_integrity_print_mask = 0; @@ -2799,8 +2725,6 @@ int __cold open_ctree(struct super_block *sb, sb->s_blocksize = BTRFS_BDEV_BLOCKSIZE; sb->s_blocksize_bits = blksize_bits(BTRFS_BDEV_BLOCKSIZE); - btrfs_init_btree_inode(fs_info); - spin_lock_init(&fs_info->block_group_cache_lock); fs_info->block_group_cache_tree = RB_ROOT; fs_info->first_logical_byte = (u64)-1; @@ -2845,12 +2769,91 @@ int __cold open_ctree(struct super_block *sb, fs_info->send_in_progress = 0; + ret = init_srcu_struct(&fs_info->subvol_srcu); + if (ret) + return ret; + + ret = percpu_counter_init(&fs_info->dio_bytes, 0, GFP_KERNEL); + if (ret) + goto fail; + + ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); + if (ret) + goto fail; + + fs_info->dirty_metadata_batch = PAGE_SIZE * + (1 + ilog2(nr_cpu_ids)); + + ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); + if (ret) + goto fail; + + ret = percpu_counter_init(&fs_info->dev_replace.bio_counter, 0, + GFP_KERNEL); + if (ret) + goto fail; + + fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root), + GFP_KERNEL); + if (!fs_info->delayed_root) { + ret = -ENOMEM; + goto fail; + } + btrfs_init_delayed_root(fs_info->delayed_root); + ret = btrfs_alloc_stripe_hash_table(fs_info); - if (ret) { - err = ret; - goto fail_alloc; + if (ret) + goto fail; + + return 0; +fail: + cleanup_srcu_struct(&fs_info->subvol_srcu); + return ret; +} + +int __cold open_ctree(struct super_block *sb, + struct btrfs_fs_devices *fs_devices, + char *options) +{ + u32 sectorsize; + u32 nodesize; + u32 stripesize; + u64 generation; + u64 features; + u16 csum_type; + struct btrfs_key location; + struct buffer_head *bh; + struct btrfs_super_block *disk_super; + struct btrfs_fs_info *fs_info = btrfs_sb(sb); + struct btrfs_root *tree_root; + struct btrfs_root *chunk_root; + int ret; + int err = -EINVAL; + int clear_free_space_tree = 0; + int level; + + err = init_fs_info(fs_info, sb); + if (err) + goto fail; + + /* These need to be init'ed before we start creating inodes and such. */ + tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, + BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL); + chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, + BTRFS_CHUNK_TREE_OBJECTID, GFP_KERNEL); + if (!tree_root || !chunk_root) { + err = -ENOMEM; + goto fail_srcu; } + fs_info->btree_inode = new_inode(sb); + if (!fs_info->btree_inode) { + err = -ENOMEM; + goto fail_srcu; + } + mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); + btrfs_init_btree_inode(fs_info); + invalidate_bdev(fs_devices->latest_bdev); /* @@ -3357,7 +3360,6 @@ int __cold open_ctree(struct super_block *sb, btrfs_stop_all_workers(fs_info); btrfs_free_block_groups(fs_info); fail_alloc: -fail_iput: btrfs_mapping_tree_free(&fs_info->mapping_tree); iput(fs_info->btree_inode); From patchwork Fri Dec 6 14:45:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276669 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 B229B13B6 for ; Fri, 6 Dec 2019 14:46:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 91C3624673 for ; Fri, 6 Dec 2019 14:46:59 +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="p+MJtZDi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726780AbfLFOq6 (ORCPT ); Fri, 6 Dec 2019 09:46:58 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:45901 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOq5 (ORCPT ); Fri, 6 Dec 2019 09:46:57 -0500 Received: by mail-qk1-f195.google.com with SMTP id x1so6612586qkl.12 for ; Fri, 06 Dec 2019 06:46:56 -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=myP/GpgOhhc7A0D+0UMbyEYBq7kM0czy8uStOeX9pzU=; b=p+MJtZDii4F7d9WebPTbzGwtc2ocHstDJqCNgm6iiUYedJ17Wfv4zyXdKH96IlsPUc wIMWYRxhBDIddkEn6XRAeTZ25a5BjBHN1aCV8YXgDvFwlm4IgEogjPvf4l21B7TRtWPT BZpwmNlBXTnoTI9CqCzwJoqgZSQXh0XYZjKiKUNkSatZ6iikoB3+eqtdcSZ3c3FiDKsN 7HC3hya9KZJV4h+YMPoK7GnzqvWY5V9mxMBW4TmX8vYng/F3yDoEKgIgXNNNeJsKqy4r ff4h3uSfq/LCMp4N9sSnHaVgLrsyHg1FTTjIrnANfSkOWQ0nervljEOkhUEnZ7LFVnvx perw== 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=myP/GpgOhhc7A0D+0UMbyEYBq7kM0czy8uStOeX9pzU=; b=KWAVCEwj/bT9hMeBonXiPS8SdIvrtxxmszxshS7vMwrH0tX9XCrCNfigGV+mbLVtsu 84qzGX0mXQVtPu9pkjyVAHzHXmRJRjQuF0g+8a+GPtREdndguqEKhLU53gR57QaLWZBE n6ix9qORRMc2+6nYgO4p0rCM5x6h74kvSdLVZcn/07dazkTiDLtLtIeKOmqGlfWvjfHp XoWtxZHCpMZYHx+MWy/4vwtjREb7Hlxf658LX0EZrD8Q0r/YHenV730bbz2NL239vwE6 4MZ1D6EQcO6983IMOTJz9kPExNyJJws64G6M0gEPIxLk8Ix8L3NA+Cb3nA282hNwWXv/ 25pw== X-Gm-Message-State: APjAAAV23NarbekbdsqIBYrnp78W1m1JcAQ6zvhjuui+gjYRqzoUCudb ttsACiqvCQo6u/nhL2QXNTkk8qyClnxnVw== X-Google-Smtp-Source: APXvYqzFCa/ziGbN4kY/IsEo1msow92Y7kJmMwwtRzgoHUJtCeBO3LDAEko6ZIqdJ/Vc4S3GBZI/dw== X-Received: by 2002:a37:8504:: with SMTP id h4mr14231218qkd.276.1575643615814; Fri, 06 Dec 2019 06:46:55 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id a185sm710994qkg.68.2019.12.06.06.46.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:55 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 43/44] btrfs: add a leak check for roots Date: Fri, 6 Dec 2019 09:45:37 -0500 Message-Id: <20191206144538.168112-44-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 Now that we're going to start relying on getting ref counting right for roots, add a list to track allocated roots and print out any roots that aren't free'd up at free_fs_info time. Hide this behind CONFIG_BTRFS_DEBUG because this will just be used for developers to verify they aren't breaking things. Signed-off-by: Josef Bacik --- fs/btrfs/ctree.h | 8 ++++++++ fs/btrfs/disk-io.c | 38 ++++++++++++++++++++++++++++++++++++++ fs/btrfs/disk-io.h | 8 +++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 8578c65890b2..59d7e55c94d8 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -902,6 +902,10 @@ struct btrfs_fs_info { spinlock_t ref_verify_lock; struct rb_root block_tree; #endif + +#ifdef CONFIG_BTRFS_DEBUG + struct list_head alloced_roots; +#endif }; static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb) @@ -1103,6 +1107,10 @@ struct btrfs_root { #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS u64 alloc_bytenr; #endif + +#ifdef CONFIG_BTRFS_DEBUG + struct list_head leak_list; +#endif }; struct btrfs_clone_extent_info { diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 6151c828a311..143519aea1d0 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1204,6 +1204,14 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, spin_lock_init(&root->root_item_lock); btrfs_qgroup_init_swapped_blocks(&root->swapped_blocks); +#ifdef CONFIG_BTRFS_DEBUG + INIT_LIST_HEAD(&root->leak_list); + if (!dummy) { + spin_lock(&fs_info->fs_roots_radix_lock); + list_add_tail(&root->leak_list, &fs_info->alloced_roots); + spin_unlock(&fs_info->fs_roots_radix_lock); + } +#endif } static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info, @@ -1434,6 +1442,7 @@ struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, goto find_fail; } root->commit_root = btrfs_root_node(root); + out: btrfs_free_path(path); return root; @@ -1533,6 +1542,31 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, return ret; } +static void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info) +{ +#ifdef CONFIG_BTRFS_DEBUG + struct btrfs_root *root; + + /* + * If we didn't get to open_ctree our alloced_roots won't be init'ed, so + * do this check just in case. + */ + if (fs_info->alloced_roots.next == NULL) + return; + + while (!list_empty(&fs_info->alloced_roots)) { + root = list_first_entry(&fs_info->alloced_roots, + struct btrfs_root, leak_list); + btrfs_err(fs_info, "leaked root %llu-%llu refcount %d", + root->root_key.objectid, root->root_key.offset, + refcount_read(&root->refs)); + while (refcount_read(&root->refs) > 1) + btrfs_put_fs_root(root); + btrfs_put_fs_root(root); + } +#endif +} + void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) { percpu_counter_destroy(&fs_info->dirty_metadata_bytes); @@ -1553,6 +1587,7 @@ void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) btrfs_put_fs_root(fs_info->uuid_root); btrfs_put_fs_root(fs_info->free_space_root); btrfs_put_fs_root(fs_info->fs_root); + btrfs_check_leaked_roots(fs_info); kfree(fs_info->super_copy); kfree(fs_info->super_for_commit); kvfree(fs_info); @@ -2680,6 +2715,9 @@ static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) INIT_LIST_HEAD(&fs_info->space_info); INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); INIT_LIST_HEAD(&fs_info->unused_bgs); +#ifdef CONFIG_BTRFS_DEBUG + INIT_LIST_HEAD(&fs_info->alloced_roots); +#endif extent_map_tree_init(&fs_info->mapping_tree); btrfs_init_block_rsv(&fs_info->global_block_rsv, BTRFS_BLOCK_RSV_GLOBAL); diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 8fa0c8748db9..3178849ee82d 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -99,8 +99,14 @@ static inline void btrfs_put_fs_root(struct btrfs_root *root) if (!root) return; - if (refcount_dec_and_test(&root->refs)) + if (refcount_dec_and_test(&root->refs)) { +#ifdef CONFIG_BTRFS_DEBUG + spin_lock(&root->fs_info->fs_roots_radix_lock); + list_del_init(&root->leak_list); + spin_unlock(&root->fs_info->fs_roots_radix_lock); +#endif kfree(root); + } } void btrfs_mark_buffer_dirty(struct extent_buffer *buf); From patchwork Fri Dec 6 14:45:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11276671 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 2F6E8138D for ; Fri, 6 Dec 2019 14:47:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E384821835 for ; Fri, 6 Dec 2019 14:47:01 +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="0+GkeW3P" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726786AbfLFOrB (ORCPT ); Fri, 6 Dec 2019 09:47:01 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:45910 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726688AbfLFOrA (ORCPT ); Fri, 6 Dec 2019 09:47:00 -0500 Received: by mail-qk1-f195.google.com with SMTP id x1so6612731qkl.12 for ; Fri, 06 Dec 2019 06:46:59 -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=VpvB9HQeJPHUB3XIqn87rZjgGudg427bCdy4jc5TOtA=; b=0+GkeW3PaO5K2HdR+ktTj/0jINDS3xTKKU38st+fcJtjPamX4ldPcPtPnxTWUVUFt2 hLct0UlGmPADuX3iomQaA4kriI0fyiI0QRdVLtcq3NpKvRMxkAsbZXNII+8QbuceNfjH kB8m+CjhgE07lcIadwayRSRCNtvvnaVTOZw5l/PuCH61pIL8Vd1W/9K54+qRg9qBT7NF zIoSozLr0BhZkhnsIeh3WiiQfSrxmSgsKWv60X+5vCNYZSSZpCHRPM92ISxvRSKzSizb XhjJFgWU5TQYPizlsy742aw7bdk5yBix6HIqBNygxsXY3WNlhUJvxdwMzZjdLWr7Ieyb +OvQ== 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=VpvB9HQeJPHUB3XIqn87rZjgGudg427bCdy4jc5TOtA=; b=pobKEK5E60PeEKVBV6lA0DMNcp+m4+V7Xn2fnz/dGBviynLX5pIF6aqEDHGo/Wok1F 6Bf0681YnYDPMXbZwqejhMcqgE6fNaugYNOg40cZHVjYZGfUAYeXnCv/UG51gSJJgDTM uvmj8SXFwYDWWjScHuZ8cSHOqkTyN87t4nTJzWpD1hwx+54VKdOt2j3rgyruBytQvWys cMpYie3+htIU+2Sy0AOriIBeCYV7E8Zxvq50DJ8JM+TTg8bR5MVgcTz56DmEsyK/u8e/ VLrmOXQSs4JXRIGNMW4UFweTU2/3pGY1B1FBbYSA7AQTQFfwz3vf60NhL4D2QNwFfCBv t2Eg== X-Gm-Message-State: APjAAAXKeDfgDPPa8U85dKQpmoqLXmfBaUU8QAhnktqz97Sb1Fqh1aYK nilCLmhl4iNTDj58eCkXf1JmdioJr8Fx6A== X-Google-Smtp-Source: APXvYqznQZ6Ubped81ibYr3CIh2EPdHFd33nH2y29d9f9sTt3ybblfb4FtVRjsiNyVv0NICaWZn6YQ== X-Received: by 2002:a37:6ec4:: with SMTP id j187mr14044760qkc.193.1575643617809; Fri, 06 Dec 2019 06:46:57 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l7sm6674704qtf.84.2019.12.06.06.46.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Dec 2019 06:46:56 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 44/44] btrfs: rename btrfs_put_fs_root and btrfs_grab_fs_root Date: Fri, 6 Dec 2019 09:45:38 -0500 Message-Id: <20191206144538.168112-45-josef@toxicpanda.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191206144538.168112-1-josef@toxicpanda.com> References: <20191206144538.168112-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 are now using these for all roots, rename them to btrfs_put_root() and btrfs_grab_root(); Signed-off-by: Josef Bacik --- fs/btrfs/backref.c | 2 +- fs/btrfs/disk-io.c | 78 +++++++++++++++++++------------------- fs/btrfs/disk-io.h | 4 +- fs/btrfs/export.c | 2 +- fs/btrfs/extent-tree.c | 2 +- fs/btrfs/file.c | 2 +- fs/btrfs/free-space-tree.c | 2 +- fs/btrfs/inode.c | 12 +++--- fs/btrfs/ioctl.c | 18 ++++----- fs/btrfs/ordered-data.c | 4 +- fs/btrfs/qgroup.c | 4 +- fs/btrfs/relocation.c | 48 +++++++++++------------ fs/btrfs/root-tree.c | 2 +- fs/btrfs/scrub.c | 6 +-- fs/btrfs/send.c | 12 +++--- fs/btrfs/super.c | 10 ++--- fs/btrfs/tree-log.c | 10 ++--- fs/btrfs/volumes.c | 2 +- 18 files changed, 110 insertions(+), 110 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index b69154d72529..ded46efac27d 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -577,7 +577,7 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info, ret = add_all_parents(root, path, parents, ref, level, time_seq, extent_item_pos, total_refs, ignore_offset); out: - btrfs_put_fs_root(root); + btrfs_put_root(root); out_free: path->lowest_level = 0; btrfs_release_path(path); diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 143519aea1d0..afcee4ff6be1 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1313,7 +1313,7 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, free_extent_buffer(root->commit_root); free_extent_buffer(leaf); } - btrfs_put_fs_root(root); + btrfs_put_root(root); return ERR_PTR(ret); } @@ -1344,7 +1344,7 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans, leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID, NULL, 0, 0, 0); if (IS_ERR(leaf)) { - btrfs_put_fs_root(root); + btrfs_put_root(root); return ERR_CAST(leaf); } @@ -1448,7 +1448,7 @@ struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root, return root; find_fail: - btrfs_put_fs_root(root); + btrfs_put_root(root); alloc_fail: root = ERR_PTR(ret); goto out; @@ -1514,7 +1514,7 @@ static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, root = radix_tree_lookup(&fs_info->fs_roots_radix, (unsigned long)root_id); if (root) - root = btrfs_grab_fs_root(root); + root = btrfs_grab_root(root); spin_unlock(&fs_info->fs_roots_radix_lock); return root; } @@ -1533,7 +1533,7 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, (unsigned long)root->root_key.objectid, root); if (ret == 0) { - btrfs_grab_fs_root(root); + btrfs_grab_root(root); set_bit(BTRFS_ROOT_IN_RADIX, &root->state); } spin_unlock(&fs_info->fs_roots_radix_lock); @@ -1561,8 +1561,8 @@ static void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info) root->root_key.objectid, root->root_key.offset, refcount_read(&root->refs)); while (refcount_read(&root->refs) > 1) - btrfs_put_fs_root(root); - btrfs_put_fs_root(root); + btrfs_put_root(root); + btrfs_put_root(root); } #endif } @@ -1578,15 +1578,15 @@ void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) btrfs_free_ref_cache(fs_info); kfree(fs_info->balance_ctl); kfree(fs_info->delayed_root); - btrfs_put_fs_root(fs_info->extent_root); - btrfs_put_fs_root(fs_info->tree_root); - btrfs_put_fs_root(fs_info->chunk_root); - btrfs_put_fs_root(fs_info->dev_root); - btrfs_put_fs_root(fs_info->csum_root); - btrfs_put_fs_root(fs_info->quota_root); - btrfs_put_fs_root(fs_info->uuid_root); - btrfs_put_fs_root(fs_info->free_space_root); - btrfs_put_fs_root(fs_info->fs_root); + btrfs_put_root(fs_info->extent_root); + btrfs_put_root(fs_info->tree_root); + btrfs_put_root(fs_info->chunk_root); + btrfs_put_root(fs_info->dev_root); + btrfs_put_root(fs_info->csum_root); + btrfs_put_root(fs_info->quota_root); + btrfs_put_root(fs_info->uuid_root); + btrfs_put_root(fs_info->free_space_root); + btrfs_put_root(fs_info->fs_root); btrfs_check_leaked_roots(fs_info); kfree(fs_info->super_copy); kfree(fs_info->super_for_commit); @@ -1604,32 +1604,32 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, int ret; if (location->objectid == BTRFS_ROOT_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->tree_root); + return btrfs_grab_root(fs_info->tree_root); if (location->objectid == BTRFS_EXTENT_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->extent_root); + return btrfs_grab_root(fs_info->extent_root); if (location->objectid == BTRFS_CHUNK_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->chunk_root); + return btrfs_grab_root(fs_info->chunk_root); if (location->objectid == BTRFS_DEV_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->dev_root); + return btrfs_grab_root(fs_info->dev_root); if (location->objectid == BTRFS_CSUM_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->csum_root); + return btrfs_grab_root(fs_info->csum_root); if (location->objectid == BTRFS_QUOTA_TREE_OBJECTID) return fs_info->quota_root ? - btrfs_grab_fs_root(fs_info->quota_root) : + btrfs_grab_root(fs_info->quota_root) : ERR_PTR(-ENOENT); if (location->objectid == BTRFS_UUID_TREE_OBJECTID) return fs_info->uuid_root ? - btrfs_grab_fs_root(fs_info->uuid_root) : + btrfs_grab_root(fs_info->uuid_root) : ERR_PTR(-ENOENT); if (location->objectid == BTRFS_FREE_SPACE_TREE_OBJECTID) return fs_info->free_space_root ? - btrfs_grab_fs_root(fs_info->free_space_root) : + btrfs_grab_root(fs_info->free_space_root) : ERR_PTR(-ENOENT); again: root = btrfs_lookup_fs_root(fs_info, location->objectid); if (root) { if (check_ref && btrfs_root_refs(&root->root_item) == 0) { - btrfs_put_fs_root(root); + btrfs_put_root(root); return ERR_PTR(-ENOENT); } return root; @@ -1672,10 +1672,10 @@ struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, * we have the third for returning it, and the caller will put it when * it's done with the root. */ - btrfs_grab_fs_root(root); + btrfs_grab_root(root); ret = btrfs_insert_fs_root(fs_info, root); if (ret) { - btrfs_put_fs_root(root); + btrfs_put_root(root); if (ret == -EEXIST) { btrfs_free_fs_root(root); goto again; @@ -2075,7 +2075,7 @@ void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info) } else { free_extent_buffer(gang[0]->node); free_extent_buffer(gang[0]->commit_root); - btrfs_put_fs_root(gang[0]); + btrfs_put_root(gang[0]); } } @@ -2280,12 +2280,12 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, if (IS_ERR(log_tree_root->node)) { btrfs_warn(fs_info, "failed to read log tree"); ret = PTR_ERR(log_tree_root->node); - btrfs_put_fs_root(log_tree_root); + btrfs_put_root(log_tree_root); return ret; } else if (!extent_buffer_uptodate(log_tree_root->node)) { btrfs_err(fs_info, "failed to read log tree"); free_extent_buffer(log_tree_root->node); - btrfs_put_fs_root(log_tree_root); + btrfs_put_root(log_tree_root); return -EIO; } /* returns with log_tree_root freed on success */ @@ -2294,7 +2294,7 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, btrfs_handle_fs_error(fs_info, ret, "Failed to recover log tree"); free_extent_buffer(log_tree_root->node); - btrfs_put_fs_root(log_tree_root); + btrfs_put_root(log_tree_root); return ret; } @@ -3892,7 +3892,7 @@ void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info, radix_tree_delete(&fs_info->fs_roots_radix, (unsigned long)root->root_key.objectid); if (test_and_clear_bit(BTRFS_ROOT_IN_RADIX, &root->state)) - btrfs_put_fs_root(root); + btrfs_put_root(root); spin_unlock(&fs_info->fs_roots_radix_lock); if (btrfs_root_refs(&root->root_item) == 0) @@ -3903,7 +3903,7 @@ void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info, if (root->reloc_root) { free_extent_buffer(root->reloc_root->node); free_extent_buffer(root->reloc_root->commit_root); - btrfs_put_fs_root(root->reloc_root); + btrfs_put_root(root->reloc_root); root->reloc_root = NULL; } } @@ -3927,7 +3927,7 @@ void btrfs_free_fs_root(struct btrfs_root *root) free_extent_buffer(root->commit_root); kfree(root->free_ino_ctl); kfree(root->free_ino_pinned); - btrfs_put_fs_root(root); + btrfs_put_root(root); } int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) @@ -3957,7 +3957,7 @@ int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) continue; } /* grab all the search result for later use */ - gang[i] = btrfs_grab_fs_root(gang[i]); + gang[i] = btrfs_grab_root(gang[i]); } srcu_read_unlock(&fs_info->subvol_srcu, index); @@ -3968,7 +3968,7 @@ int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) err = btrfs_orphan_cleanup(gang[i]); if (err) break; - btrfs_put_fs_root(gang[i]); + btrfs_put_root(gang[i]); } root_objectid++; } @@ -3976,7 +3976,7 @@ int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) /* release the uncleaned roots due to error */ for (; i < ret; i++) { if (gang[i]) - btrfs_put_fs_root(gang[i]); + btrfs_put_root(gang[i]); } return err; } @@ -4365,12 +4365,12 @@ static void btrfs_destroy_all_delalloc_inodes(struct btrfs_fs_info *fs_info) while (!list_empty(&splice)) { root = list_first_entry(&splice, struct btrfs_root, delalloc_root); - root = btrfs_grab_fs_root(root); + root = btrfs_grab_root(root); BUG_ON(!root); spin_unlock(&fs_info->delalloc_root_lock); btrfs_destroy_delalloc_inodes(root); - btrfs_put_fs_root(root); + btrfs_put_root(root); spin_lock(&fs_info->delalloc_root_lock); } diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 3178849ee82d..955d7826b6af 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -87,14 +87,14 @@ struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info); * If you want to ensure the whole tree is safe, you should use * fs_info->subvol_srcu */ -static inline struct btrfs_root *btrfs_grab_fs_root(struct btrfs_root *root) +static inline struct btrfs_root *btrfs_grab_root(struct btrfs_root *root) { if (refcount_inc_not_zero(&root->refs)) return root; return NULL; } -static inline void btrfs_put_fs_root(struct btrfs_root *root) +static inline void btrfs_put_root(struct btrfs_root *root) { if (!root) return; diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c index f07c2300ade2..657fd6ad6e18 100644 --- a/fs/btrfs/export.c +++ b/fs/btrfs/export.c @@ -88,7 +88,7 @@ static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, key.offset = 0; inode = btrfs_iget(sb, &key, root); - btrfs_put_fs_root(root); + btrfs_put_root(root); if (IS_ERR(inode)) { err = PTR_ERR(inode); goto fail; diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 18df434bfe52..04ad2100ecc1 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5415,7 +5415,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root, } else { free_extent_buffer(root->node); free_extent_buffer(root->commit_root); - btrfs_put_fs_root(root); + btrfs_put_root(root); } root_dropped = true; out_end_trans: diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 062580a1721f..254fa3cc1ba7 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -297,7 +297,7 @@ static int __btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, key.type = BTRFS_INODE_ITEM_KEY; key.offset = 0; inode = btrfs_iget(fs_info->sb, &key, inode_root); - btrfs_put_fs_root(inode_root); + btrfs_put_root(inode_root); if (IS_ERR(inode)) { ret = PTR_ERR(inode); goto cleanup; diff --git a/fs/btrfs/free-space-tree.c b/fs/btrfs/free-space-tree.c index c79804c30b17..bc43950eb32f 100644 --- a/fs/btrfs/free-space-tree.c +++ b/fs/btrfs/free-space-tree.c @@ -1253,7 +1253,7 @@ int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info) free_extent_buffer(free_space_root->node); free_extent_buffer(free_space_root->commit_root); - btrfs_put_fs_root(free_space_root); + btrfs_put_root(free_space_root); return btrfs_commit_transaction(trans); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index bc961ca6995f..bbb8a9641a6d 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2533,7 +2533,7 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); if (WARN_ON(ret < 0)) { - btrfs_put_fs_root(root); + btrfs_put_root(root); return ret; } ret = 0; @@ -2605,7 +2605,7 @@ static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id, backref_insert(&new->root, backref); old->count++; out: - btrfs_put_fs_root(root); + btrfs_put_root(root); btrfs_release_path(path); WARN_ON(ret); return ret; @@ -2720,7 +2720,7 @@ static noinline int relink_extent_backref(struct btrfs_path *path, key.offset = 0; inode = btrfs_iget(fs_info->sb, &key, root); - btrfs_put_fs_root(root); + btrfs_put_root(root); if (IS_ERR(inode)) { srcu_read_unlock(&fs_info->subvol_srcu, index); return 0; @@ -5923,7 +5923,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) inode = btrfs_iget(dir->i_sb, &location, sub_root); } if (root != sub_root) - btrfs_put_fs_root(sub_root); + btrfs_put_root(sub_root); srcu_read_unlock(&fs_info->subvol_srcu, index); if (!IS_ERR(inode) && root != sub_root) { @@ -10257,14 +10257,14 @@ int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, int nr) while (!list_empty(&splice) && nr) { root = list_first_entry(&splice, struct btrfs_root, delalloc_root); - root = btrfs_grab_fs_root(root); + root = btrfs_grab_root(root); BUG_ON(!root); list_move_tail(&root->delalloc_root, &fs_info->delalloc_roots); spin_unlock(&fs_info->delalloc_root_lock); ret = start_delalloc_inodes(root, nr, false); - btrfs_put_fs_root(root); + btrfs_put_root(root); if (ret < 0) goto out; diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 7df2576aa2e3..8ec61f3f0291 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -676,7 +676,7 @@ static noinline int create_subvol(struct inode *dir, btrfs_record_root_in_trans(trans, new_root); ret = btrfs_create_subvol_root(trans, new_root, root, new_dirid); - btrfs_put_fs_root(new_root); + btrfs_put_root(new_root); if (ret) { /* We potentially lose an unused inode item here */ btrfs_abort_transaction(trans, ret); @@ -870,7 +870,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, d_instantiate(dentry, inode); ret = 0; fail: - btrfs_put_fs_root(pending_snapshot->snap); + btrfs_put_root(pending_snapshot->snap); btrfs_subvolume_release_metadata(fs_info, &pending_snapshot->block_rsv); dec_and_free: if (snapshot_force_cow) @@ -2176,7 +2176,7 @@ static noinline int search_ioctl(struct inode *inode, if (sk->tree_id == 0) { /* search the root of the inode that was passed */ - root = btrfs_grab_fs_root(BTRFS_I(inode)->root); + root = btrfs_grab_root(BTRFS_I(inode)->root); } else { key.objectid = sk->tree_id; key.type = BTRFS_ROOT_ITEM_KEY; @@ -2210,7 +2210,7 @@ static noinline int search_ioctl(struct inode *inode, ret = 0; err: sk->nr_items = num_found; - btrfs_put_fs_root(root); + btrfs_put_root(root); btrfs_free_path(path); return ret; } @@ -2372,7 +2372,7 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info, ret = 0; out: if (root) - btrfs_put_fs_root(root); + btrfs_put_root(root); btrfs_free_path(path); return ret; } @@ -2500,7 +2500,7 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, memmove(args->path, ptr, total_len); args->path[total_len] = '\0'; - btrfs_put_fs_root(root); + btrfs_put_root(root); btrfs_release_path(path); } @@ -2540,7 +2540,7 @@ static int btrfs_search_path_in_tree_user(struct inode *inode, btrfs_free_path(path); return ret; out_put: - btrfs_put_fs_root(root); + btrfs_put_root(root); goto out; } @@ -2743,7 +2743,7 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp) ret = -EFAULT; out: - btrfs_put_fs_root(root); + btrfs_put_root(root); out_free: btrfs_free_path(path); kzfree(subvol_info); @@ -4041,7 +4041,7 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) btrfs_set_fs_incompat(fs_info, DEFAULT_SUBVOL); btrfs_end_transaction(trans); out_free: - btrfs_put_fs_root(new_root); + btrfs_put_root(new_root); btrfs_free_path(path); out: mnt_drop_write_file(file); diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index 6240a5a1f2c0..3a3c648bb9d3 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -588,7 +588,7 @@ u64 btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, u64 nr, while (!list_empty(&splice) && nr) { root = list_first_entry(&splice, struct btrfs_root, ordered_root); - root = btrfs_grab_fs_root(root); + root = btrfs_grab_root(root); BUG_ON(!root); list_move_tail(&root->ordered_root, &fs_info->ordered_roots); @@ -596,7 +596,7 @@ u64 btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, u64 nr, done = btrfs_wait_ordered_extents(root, nr, range_start, range_len); - btrfs_put_fs_root(root); + btrfs_put_root(root); total_done += done; spin_lock(&fs_info->ordered_root_lock); diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 762f254b4b38..8fb576495be9 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1040,7 +1040,7 @@ int btrfs_quota_enable(struct btrfs_fs_info *fs_info) if (ret) { free_extent_buffer(quota_root->node); free_extent_buffer(quota_root->commit_root); - btrfs_put_fs_root(quota_root); + btrfs_put_root(quota_root); } out: if (ret) { @@ -1106,7 +1106,7 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info) free_extent_buffer(quota_root->node); free_extent_buffer(quota_root->commit_root); - btrfs_put_fs_root(quota_root); + btrfs_put_root(quota_root); end_trans: ret = btrfs_end_transaction(trans); diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index f6d63d6cf22d..754f18e8019b 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -257,7 +257,7 @@ static void free_backref_node(struct backref_cache *cache, if (node) { cache->nr_nodes--; if (node->root) - btrfs_put_fs_root(node->root); + btrfs_put_root(node->root); kfree(node); } } @@ -870,7 +870,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, ASSERT(btrfs_root_bytenr(&root->root_item) == cur->bytenr); if (should_ignore_root(root)) { - btrfs_put_fs_root(root); + btrfs_put_root(root); list_add(&cur->list, &useless); } else { cur->root = root; @@ -887,7 +887,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, ret = btrfs_search_slot(NULL, root, node_key, path2, 0, 0); path2->lowest_level = 0; if (ret < 0) { - btrfs_put_fs_root(root); + btrfs_put_root(root); err = ret; goto out; } @@ -903,7 +903,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, root->root_key.objectid, node_key->objectid, node_key->type, node_key->offset); - btrfs_put_fs_root(root); + btrfs_put_root(root); err = -ENOENT; goto out; } @@ -916,7 +916,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, ASSERT(btrfs_root_bytenr(&root->root_item) == lower->bytenr); if (should_ignore_root(root)) { - btrfs_put_fs_root(root); + btrfs_put_root(root); list_add(&lower->list, &useless); } else { lower->root = root; @@ -926,7 +926,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, edge = alloc_backref_edge(cache); if (!edge) { - btrfs_put_fs_root(root); + btrfs_put_root(root); err = -ENOMEM; goto out; } @@ -936,7 +936,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, if (!rb_node) { upper = alloc_backref_node(cache); if (!upper) { - btrfs_put_fs_root(root); + btrfs_put_root(root); free_backref_edge(cache, edge); err = -ENOMEM; goto out; @@ -985,7 +985,7 @@ struct backref_node *build_backref_tree(struct reloc_control *rc, edge->node[UPPER] = upper; if (rb_node) { - btrfs_put_fs_root(root); + btrfs_put_root(root); break; } lower = upper; @@ -1224,7 +1224,7 @@ static int clone_backref_node(struct btrfs_trans_handle *trans, new_node->level = node->level; new_node->lowest = node->lowest; new_node->checked = 1; - new_node->root = btrfs_grab_fs_root(dest); + new_node->root = btrfs_grab_root(dest); ASSERT(new_node->root); if (!node->lowest) { @@ -2189,7 +2189,7 @@ static void insert_dirty_subvol(struct btrfs_trans_handle *trans, btrfs_update_reloc_root(trans, root); if (list_empty(&root->reloc_dirty_list)) { - btrfs_grab_fs_root(root); + btrfs_grab_root(root); list_add_tail(&root->reloc_dirty_list, &rc->dirty_subvol_roots); } } @@ -2216,7 +2216,7 @@ static int clean_dirty_subvols(struct reloc_control *rc) ret = ret2; } clear_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state); - btrfs_put_fs_root(root); + btrfs_put_root(root); } else { /* Orphan reloc tree, just clean it up */ ret2 = btrfs_drop_snapshot(root, NULL, 0, 1); @@ -2441,7 +2441,7 @@ int prepare_to_merge(struct reloc_control *rc, int err) btrfs_update_reloc_root(trans, root); list_add(&reloc_root->root_list, &reloc_roots); - btrfs_put_fs_root(root); + btrfs_put_root(root); } list_splice(&reloc_roots, &rc->reloc_roots); @@ -2503,7 +2503,7 @@ void merge_reloc_roots(struct reloc_control *rc) BUG_ON(root->reloc_root != reloc_root); ret = merge_reloc_root(rc, root); - btrfs_put_fs_root(root); + btrfs_put_root(root); if (ret) { if (list_empty(&reloc_root->root_list)) list_add_tail(&reloc_root->root_list, @@ -2564,7 +2564,7 @@ static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans, BUG_ON(IS_ERR(root)); BUG_ON(root->reloc_root != reloc_root); ret = btrfs_record_root_in_trans(trans, root); - btrfs_put_fs_root(root); + btrfs_put_root(root); return ret; } @@ -2599,8 +2599,8 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, BUG_ON(next->new_bytenr); BUG_ON(!list_empty(&next->list)); next->new_bytenr = root->node->start; - btrfs_put_fs_root(next->root); - next->root = btrfs_grab_fs_root(root); + btrfs_put_root(next->root); + next->root = btrfs_grab_root(root); ASSERT(next->root); list_add_tail(&next->list, &rc->backref_cache.changed); @@ -3073,8 +3073,8 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, btrfs_record_root_in_trans(trans, root); root = root->reloc_root; node->new_bytenr = root->node->start; - btrfs_put_fs_root(node->root); - node->root = btrfs_grab_fs_root(root); + btrfs_put_root(node->root); + node->root = btrfs_grab_root(root); ASSERT(node->root); list_add_tail(&node->list, &rc->backref_cache.changed); } else { @@ -3772,7 +3772,7 @@ static int find_data_references(struct reloc_control *rc, } out: - btrfs_put_fs_root(root); + btrfs_put_root(root); out_free: btrfs_free_path(path); return err; @@ -4258,7 +4258,7 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, trans = btrfs_start_transaction(root, 6); if (IS_ERR(trans)) { - btrfs_put_fs_root(root); + btrfs_put_root(root); return ERR_CAST(trans); } @@ -4278,7 +4278,7 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, err = btrfs_orphan_add(trans, BTRFS_I(inode)); out: - btrfs_put_fs_root(root); + btrfs_put_root(root); btrfs_end_transaction(trans); btrfs_btree_balance_dirty(fs_info); if (err) { @@ -4538,7 +4538,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) goto out; } } else { - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); } } @@ -4592,7 +4592,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) err = __add_reloc_root(reloc_root); BUG_ON(err < 0); /* -ENOMEM or logic error */ fs_root->reloc_root = reloc_root; - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); } err = btrfs_commit_transaction(trans); @@ -4628,7 +4628,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) err = PTR_ERR(fs_root); } else { err = btrfs_orphan_cleanup(fs_root); - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); } } return err; diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 2c94b5318b40..0a455f116666 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -288,7 +288,7 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info) set_bit(BTRFS_ROOT_DEAD_TREE, &root->state); btrfs_add_dead_root(root); } - btrfs_put_fs_root(root); + btrfs_put_root(root); } btrfs_free_path(path); diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index 0c8b60055c2e..53261bf04c11 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -667,7 +667,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ret = btrfs_search_slot(NULL, local_root, &key, swarn->path, 0, 0); if (ret) { - btrfs_put_fs_root(local_root); + btrfs_put_root(local_root); btrfs_release_path(swarn->path); goto err; } @@ -688,7 +688,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, ipath = init_ipath(4096, local_root, swarn->path); memalloc_nofs_restore(nofs_flag); if (IS_ERR(ipath)) { - btrfs_put_fs_root(local_root); + btrfs_put_root(local_root); ret = PTR_ERR(ipath); ipath = NULL; goto err; @@ -712,7 +712,7 @@ static int scrub_print_warning_inode(u64 inum, u64 offset, u64 root, min(isize - offset, (u64)PAGE_SIZE), nlink, (char *)(unsigned long)ipath->fspath->val[i]); - btrfs_put_fs_root(local_root); + btrfs_put_root(local_root); free_ipath(ipath); return 0; diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 6520ad8f4e81..a7041f270140 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7211,7 +7211,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) btrfs_root_dead(clone_root)) { spin_unlock(&clone_root->root_item_lock); srcu_read_unlock(&fs_info->subvol_srcu, index); - btrfs_put_fs_root(clone_root); + btrfs_put_root(clone_root); ret = -EPERM; goto out; } @@ -7219,7 +7219,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) dedupe_in_progress_warn(clone_root); spin_unlock(&clone_root->root_item_lock); srcu_read_unlock(&fs_info->subvol_srcu, index); - btrfs_put_fs_root(clone_root); + btrfs_put_root(clone_root); ret = -EAGAIN; goto out; } @@ -7275,7 +7275,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) * for possible clone sources. */ sctx->clone_roots[sctx->clone_roots_cnt++].root = - btrfs_grab_fs_root(sctx->send_root); + btrfs_grab_root(sctx->send_root); /* We do a bsearch later */ sort(sctx->clone_roots, sctx->clone_roots_cnt, @@ -7363,20 +7363,20 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) for (i = 0; i < sctx->clone_roots_cnt; i++) { btrfs_root_dec_send_in_progress( sctx->clone_roots[i].root); - btrfs_put_fs_root(sctx->clone_roots[i].root); + btrfs_put_root(sctx->clone_roots[i].root); } } else { for (i = 0; sctx && i < clone_sources_to_rollback; i++) { btrfs_root_dec_send_in_progress( sctx->clone_roots[i].root); - btrfs_put_fs_root(sctx->clone_roots[i].root); + btrfs_put_root(sctx->clone_roots[i].root); } btrfs_root_dec_send_in_progress(send_root); } if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) { btrfs_root_dec_send_in_progress(sctx->parent_root); - btrfs_put_fs_root(sctx->parent_root); + btrfs_put_root(sctx->parent_root); } kvfree(clone_sources_tmp); diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 80fea16cf34c..476c93a238eb 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1094,16 +1094,16 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); if (ret < 0) { - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); goto err; } else if (ret > 0) { ret = btrfs_previous_item(fs_root, path, dirid, BTRFS_INODE_REF_KEY); if (ret < 0) { - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); goto err; } else if (ret > 0) { - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); ret = -ENOENT; goto err; } @@ -1120,7 +1120,7 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ptr -= len + 1; if (ptr < name) { ret = -ENAMETOOLONG; - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); goto err; } read_extent_buffer(path->nodes[0], ptr + 1, @@ -1128,7 +1128,7 @@ static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info, ptr[0] = '/'; btrfs_release_path(path); } - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); } btrfs_free_path(path); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 32ee8698a87f..968605b901ed 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3296,7 +3296,7 @@ static void free_log_tree(struct btrfs_trans_handle *trans, clear_extent_bits(&log->dirty_log_pages, 0, (u64)-1, EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT); free_extent_buffer(log->node); - btrfs_put_fs_root(log); + btrfs_put_root(log); } /* @@ -6312,7 +6312,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) log->node->len); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); - btrfs_put_fs_root(log); + btrfs_put_root(log); if (!ret) goto next; @@ -6348,10 +6348,10 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) } wc.replay_dest->log_root = NULL; - btrfs_put_fs_root(wc.replay_dest); + btrfs_put_root(wc.replay_dest); free_extent_buffer(log->node); free_extent_buffer(log->commit_root); - btrfs_put_fs_root(log); + btrfs_put_root(log); if (ret) goto error; @@ -6385,7 +6385,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) free_extent_buffer(log_root_tree->node); log_root_tree->log_root = NULL; clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags); - btrfs_put_fs_root(log_root_tree); + btrfs_put_root(log_root_tree); return 0; error: diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index d261a39b7aa6..7483521a928b 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4391,7 +4391,7 @@ static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, ret = 1; break; } - btrfs_put_fs_root(subvol_root); + btrfs_put_root(subvol_root); out: return ret; }