From patchwork Fri Jan 24 14:32:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350369 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 6757B109A for ; Fri, 24 Jan 2020 14:33:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3BC4F2077C for ; Fri, 24 Jan 2020 14:33:11 +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="VaBYfpos" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392751AbgAXOdI (ORCPT ); Fri, 24 Jan 2020 09:33:08 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:36698 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391885AbgAXOdH (ORCPT ); Fri, 24 Jan 2020 09:33:07 -0500 Received: by mail-qk1-f196.google.com with SMTP id w198so948504qkb.3 for ; Fri, 24 Jan 2020 06:33:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BVpRvrdCkqENjZPXDiqlu/srGi8++ae1ZfXSXhzi+0A=; b=VaBYfposQdRAAsMehyXhUE5jLdJCSFCI34SK7pF4hiCSd9k4J/cqoB3t4jUDlkeM1i VW7LqG06G5T7Ik9RBgtnP9CY48jqN+zneSsi6a3AgwEmKV1UkbuWahoHv1ZU6SACmqzU qS70d15OKpOwrPiw+Whlkzgcq+pvPvm120B32u11xSnjNJvbilCrA84EluMMZ6sIfbj1 h2ztGO6ouurTNmFbSmm3mJ7Wf4mJSl9OfluD+OwGFux9w4dKiw62vKN/0oDp4XaNbOMm JcJgM3lXj0h3pZxOfE5ZlHOxynhw1Ut7smIij1txK//5LlEWL1zIBYhxj3oskkro/DpE ardg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BVpRvrdCkqENjZPXDiqlu/srGi8++ae1ZfXSXhzi+0A=; b=JMQxVjMm89/BRb4+Twdg9hJww8IIxnw6Z48oUomLCoU4vfz9uusXR0zhmSu90R7wly KVgjrRWOUA6eL2z2/pn19gbbR3ipkk+4DKMJS6sSYwOtSZrbhCLC9AAmfDPLjpF2x/CQ igUhZLlbhfPjZIx3Jei0i9deERUqZDXVsopHYd6ei7CQzO6lBmsL3pAmmYGwKkHdEf2i oHliOyaPLu76yiGkCUoW541osKwK/r4SRQMZoXuIwOnQBrTPbd8WpDqr9IA44P7boxSK hvFH0YjKNjHJEHOBGaH4tjs4CXvICZazDHYo+1omDjYFOtsE835jnpz6jDEM9JXGWsyb 9+4Q== X-Gm-Message-State: APjAAAXtVcyg7RExkJCCNIprgkCdhBLJz00YAjdy6Kj0QDOf68feF5HC FSQJSoBYZzDLWIQeKzjdsayz9w== X-Google-Smtp-Source: APXvYqz7Dqr7L7uGUPti/FSeqvb4ID1sSfxzrbFaDhRx42oeAEwqVr1sNa50K4rphPNR7AqkxYIm+w== X-Received: by 2002:a37:64d5:: with SMTP id y204mr2686721qkb.459.1579876385877; Fri, 24 Jan 2020 06:33:05 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id a19sm3148956qka.75.2020.01.24.06.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:05 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 01/44] btrfs: push __setup_root into btrfs_alloc_root Date: Fri, 24 Jan 2020 09:32:18 -0500 Message-Id: <20200124143301.2186319-2-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 5ce2801f8388..1dc33e95052b 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1130,6 +1130,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; @@ -1198,11 +1199,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; } @@ -1215,12 +1216,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; @@ -1244,12 +1244,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; @@ -1309,12 +1308,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; @@ -1401,14 +1398,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) { @@ -2208,12 +2203,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); @@ -2645,8 +2639,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; @@ -2825,8 +2821,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); /* @@ -3022,8 +3016,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 Jan 24 14:32:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350371 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 98C70924 for ; Fri, 24 Jan 2020 14:33:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7753320661 for ; Fri, 24 Jan 2020 14:33: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="At2FuIHj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392761AbgAXOdL (ORCPT ); Fri, 24 Jan 2020 09:33:11 -0500 Received: from mail-qv1-f66.google.com ([209.85.219.66]:46390 "EHLO mail-qv1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392752AbgAXOdI (ORCPT ); Fri, 24 Jan 2020 09:33:08 -0500 Received: by mail-qv1-f66.google.com with SMTP id u1so960405qvk.13 for ; Fri, 24 Jan 2020 06:33:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Gf4M2aChrlsQcpvrrq7JYDGrL1FKgNTCkzzAic53100=; b=At2FuIHj1QwgKLFOYqszDZ1y8Kqeuu7BCMulRO5sTA6Od5oY81rwuY65EBCNA5vgMv /1GxpxZLnkG7oTJncub6E8A1JNjH19MNXqSUOMzvNKkw6jG6pHq4p0j197bcDbbU+Ssk iOSxJfFvj8zb9qKzsm6GEN2VSvwA1U1t3Ix/iinQsd8NSBCy68uPc8q+Rw8HZI5qXsOR 6DMyVK5OSBMH9eWvdK9QadltiI+zup23KcxB+z69C3pQGbgUUrDajETL8dVx0ET/cyQb iyqup8nGirYWePegI6N63dhryJ2U7jK/1i/fJt7tkfZOb/Ng4iS6GyxZrdJPOexxqrHO l7pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Gf4M2aChrlsQcpvrrq7JYDGrL1FKgNTCkzzAic53100=; b=PLCfLVadpB4LgZY2U4UY3UTliwJsVJICbEFlnKRcDG2P4Yig8Zx3eck/IhTmop+W5x b11FfOfmmiZf2+f9h8lOtl0wba1XpE60vbRbpcbanZBnmSO2S4vnEsu4452TmljBW+EF J8pr6FSYroXiY6l9j9zLVWzEvV+xB9shr4d0lGsjkIFHhmUE16XXyrT6kieyV9i7DMbf R1/EbMKQt3jFq5KIHcRVekmvRv+JwdDjhD9QR2An9xq6UU+nq8nRRQvQWUf78LRp/uTR v6QTeR7W30Z3wUs617jY1YGiM8nAJx9PpZC+H9O26IVa+jl2Q+ugSVXIv/YqYzbEy7ZC vrkA== X-Gm-Message-State: APjAAAWdXKyZTV+U1hFeLNWduCafW9g2EgEosVOTQFcZYqGPYcKV1pVv I2vdatgmDG3pYYT3E/H+Bt9tPdXThD23pA== X-Google-Smtp-Source: APXvYqw+JhEU4NQIEMLHz+F9cZ4x7yjzeht8mu5N6l87lfpJEdbD1bgKNGqpUORMEYRzGi00NuA+BA== X-Received: by 2002:a0c:aee4:: with SMTP id n36mr3012216qvd.143.1579876387459; Fri, 24 Jan 2020 06:33:07 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g18sm3134392qki.13.2020.01.24.06.33.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:06 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 02/44] btrfs: move fs root init stuff into btrfs_init_fs_root Date: Fri, 24 Jan 2020 09:32:19 -0500 Message-Id: <20200124143301.2186319-3-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 1dc33e95052b..2d378aafb70b 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1445,12 +1445,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; } @@ -1474,6 +1468,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 Jan 24 14:32:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350373 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 F1443921 for ; Fri, 24 Jan 2020 14:33:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D0BB92077C for ; Fri, 24 Jan 2020 14:33: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="Lc7oJJiI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392763AbgAXOdM (ORCPT ); Fri, 24 Jan 2020 09:33:12 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:37203 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392756AbgAXOdK (ORCPT ); Fri, 24 Jan 2020 09:33:10 -0500 Received: by mail-qt1-f194.google.com with SMTP id w47so1638841qtk.4 for ; Fri, 24 Jan 2020 06:33:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TP1xlF1/ZZi1NsdI6J3j47bBMEePMqOBzLho3vuckcM=; b=Lc7oJJiI0jubqYwlmm0XoiNAe3VtlL2CGHxE9YSrLSM8KXtc/9X09v4NLPpnDV3z5V IcGvYPQw9NJn4RgxcOmzqjZx0EXcQVlYykLtwZG3qlKXogBNiAxnvsa98fgIJkTJbKhe cAMjkuNSJwDC25dPSyjAJZm++cgCAp+w2f4B5Q9qNS/lzbwZv5ggPW2jnKdtizikZo9s tjb89fTeCCY6nC1g7E1u9uoGj+E0G1hRbboifm2ucZKqiomGD5Si/vOXU+XpdrPidqQC z1a4COxNbKdzQUSdFPj11Up/Cv8qBYwmP3pWFYSTyhYlicUpO+GL7BQGKKDblNQt56td 5Gdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TP1xlF1/ZZi1NsdI6J3j47bBMEePMqOBzLho3vuckcM=; b=psN7E7dORc/rR/0A31kai5bdpGN3kn+JgoT0pU0sbnROqdbPx/C1dTe0ZqDQYmdCp6 4ANLc9lQdZtUZKUilgukr2ne5P2SvFKNXzk7wVyZc++ZSUILSMOJyeZq+sKdaXzW4aC1 3U9T15yAbDUL13tm/47uOIhGSX+ncMftnfdT8qBq8MkxQCXehY6hTYgmA9YWaIyiE/7h NjUnMaEqEPeDSFAEQgDO9Wo7YpNMEXtU1eGipMApLumDXP4ATGpQ5DU+cZrMBLdj581E 1qfAo5Bc8mlImR2mWo9OuWo67NNa3TTkdrfKYAyKqWOjV4vmhENUDILS8Xb/q20vA8gL XLbg== X-Gm-Message-State: APjAAAXaG7JN08asBI5mF8fX9+NX/TOpk8w7GHvikUnB/jLsURMG9gNC 8BuHH+k8pLR/VDeFu3hPX5aX2w4s/x38tg== X-Google-Smtp-Source: APXvYqzIAZro883OleiOTXhuNL4FJkep0983LptIgRflPIxHeyUfOsr8iQl2hqqkAY0Tl5LimfVccg== X-Received: by 2002:ac8:6bc9:: with SMTP id b9mr2399234qtt.108.1579876389057; Fri, 24 Jan 2020 06:33:09 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id i4sm3127472qki.45.2020.01.24.06.33.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:08 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 03/44] btrfs: make btrfs_find_orphan_roots use btrfs_get_fs_root Date: Fri, 24 Jan 2020 09:32:20 -0500 Message-Id: <20200124143301.2186319-4-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 612411c74550..094a71c54fa1 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 Jan 24 14:32:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350375 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 4CFF4924 for ; Fri, 24 Jan 2020 14:33:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2B20D2077C for ; Fri, 24 Jan 2020 14:33:14 +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="bZJ2SoOW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392766AbgAXOdN (ORCPT ); Fri, 24 Jan 2020 09:33:13 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:33675 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392760AbgAXOdL (ORCPT ); Fri, 24 Jan 2020 09:33:11 -0500 Received: by mail-qk1-f193.google.com with SMTP id h23so2224253qkh.0 for ; Fri, 24 Jan 2020 06:33:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F2WdbHxf3x/K7ZFWhJ+LPB3iVWaQkE0vPXMUKDv+efA=; b=bZJ2SoOWL+mEs7GataH2c289rUdNAt3G+bLB9+dcHr0XsLkfw3iV5RBkQwtY76bc6w EUYK4uJq6QLEik/hvIKLMJiK1H7mz+jTKV+qiTSgHTVO8eH7+AB6qB/2mtXAtynE/6XY 3voId5hr59JJKUJr4MvB+TWtR4mxeYyKr2atxCkmA/cFV4qKVkayMm3q/tWs6Qj/Hytk 6JBVKaLCQGd8tytKIiDrBqi1IoHB5a7a/jb2mbZUH4NY6NQkr5a7Jey78a0R5C/gP5YS qrgLtW3pGbOMrJjZGcbYObrJf753p4n9RbZDV1eLb9vmpTGtgAwvIzh0YJzaXCORyURz vLOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F2WdbHxf3x/K7ZFWhJ+LPB3iVWaQkE0vPXMUKDv+efA=; b=nPz2bR5h4TZF8/VCDecpLPjuh8EKxY1j6odv/O27ArCgBg+/WQP4p2wkXXGNqnd1/f oFrCH5XI0zW5njse1GunFaCLC9ZH4QTaKfOsI13W3rB7g1yat4EK0QoHAzZJVSbYiiUG 8ExCfRQbDm/LR+ISUIEj+dCML86qvV+i/0qwWCnKLN8afwcu9i4M4ggXVWFQeLNJMUdO +1fwSKjyi4P2k9j3srT91kCrGqjkuN3MQ9X2JlbtyTM4QxL1lCpbE7Vz7bQ0Txg3IhFr gqFRni8jhTiFSWyjNkzAdxsC6YiUrQ6G6Q1wOS9hK97S65UsIHApD3WJhMWWTpzMG9P6 kPtw== X-Gm-Message-State: APjAAAXlm7GeVdy1ih98Ep3Qgl+/5khc1curft0MoBmNtL8qAjCoZJUD ekRKJyR536dk0IFdlqD73HrRxQ== X-Google-Smtp-Source: APXvYqz9perD/BiNB4HpbbtOMUZpZf+UxyHeXSIqV/dh2x1PuMIjFeDfKcMnQwJT482ykBfOLsywVA== X-Received: by 2002:ae9:f003:: with SMTP id l3mr2808187qkg.457.1579876390705; Fri, 24 Jan 2020 06:33:10 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id d20sm1427685qto.2.2020.01.24.06.33.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:10 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 04/44] btrfs: export and use btrfs_read_tree_root Date: Fri, 24 Jan 2020 09:32:21 -0500 Message-Id: <20200124143301.2186319-5-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 2d378aafb70b..136a4d9d5fed 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1384,8 +1384,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 8c2d6cf1ce59..158fec0eeef2 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 a2bae5c230e1..e6e4b00cb46c 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6101,7 +6101,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 Jan 24 14:32:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350377 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 160F9924 for ; Fri, 24 Jan 2020 14:33:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E92102077C for ; Fri, 24 Jan 2020 14:33:16 +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="jmPiZ2yl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392767AbgAXOdP (ORCPT ); Fri, 24 Jan 2020 09:33:15 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:45435 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392756AbgAXOdN (ORCPT ); Fri, 24 Jan 2020 09:33:13 -0500 Received: by mail-qk1-f194.google.com with SMTP id x1so2148887qkl.12 for ; Fri, 24 Jan 2020 06:33:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MkPzl8Y/Ewdyep92I/H7EfOw2ybUpGJ8nQhdFCcNEfw=; b=jmPiZ2ylEXwh9xi288P72bwnKrXKB0jPSxI3c2ZjEUQW46t1LjVSCzEJ9bHFVjlYlM 3zmX8u3BUqqNxDSWnM8z5MZH9QSGCWZ2GwOkQOGUE1waQDh7Bl0vXE+qAFAhjffCACmR tydW6aJEjYcUuKevPTiyOeKiT+/EmzdQvD4wHYnWJKMSxP5NxAGBdBKyvv+j0Q2nAaGv AffNPmDqFogC9Tepi8Q6RJ3MNibByGzBviiaAKT5o8PCapUuJysh9TsW4o+yrVdxhpQG 6QdWm2zRHv1cqWSChrCNVQ28k5UVq2nmKGwNPEz8AoNXYu0+Xv+bWCWKd3KN/HjBcSYb H+lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MkPzl8Y/Ewdyep92I/H7EfOw2ybUpGJ8nQhdFCcNEfw=; b=Ph8NgmP01oRL8Z1EOgAvyCIViJsoZMJihNGDsGq8B8N7pNmaqohOl7yYNNhPloolUL 0uccN0aCqjVMceWF3uCBg62nZhWLuWb0pE6ymWD48o6t4BoLbirME47VPWzrhwD5Pti+ +xOQj/uRZb+Pzg/3/xzvYJIYKzmJQiqrcjvjr+EKd+nkrbyqje+fUPCqNOPE17pxld2A 1O7woWO27wgMGLxLwBt77eeL/GIDZzV8IZvhTH5fpJ1DZfnM1XKTwb5ViioTPCWgye3T fLfpRJX+4IlyIDz69b8YE56zZqjxusmkozegM3IZeM08bR6UsqGovm52FQplMXe5atEI f3Kw== X-Gm-Message-State: APjAAAWaXP+W9/pLU6+YlF8slOOzWDlqIlIzLR2Qfqn3AIi81RWbdPPV /zieLw6ahhBwvobPrrxUDYhJBA== X-Google-Smtp-Source: APXvYqwhD5NkR+Ax1lU5/OF35B8LrzROsmR7o+O64RgzGI1odHhgcHY6AnOpWoHHBYMpmVPd0VzC8A== X-Received: by 2002:a05:620a:13a1:: with SMTP id m1mr2694882qki.67.1579876392383; Fri, 24 Jan 2020 06:33:12 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id 135sm2566675qkl.68.2020.01.24.06.33.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:11 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 05/44] btrfs: make relocation use btrfs_read_tree_root() Date: Fri, 24 Jan 2020 09:32:22 -0500 Message-Id: <20200124143301.2186319-6-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 995d4b8b1cfd..aa3aa8e0c0ea 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1447,8 +1447,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; } @@ -4537,12 +4538,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 Jan 24 14:32:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350379 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 91659921 for ; Fri, 24 Jan 2020 14:33:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 701762077C for ; Fri, 24 Jan 2020 14:33: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="JSwxiF+h" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404148AbgAXOdR (ORCPT ); Fri, 24 Jan 2020 09:33:17 -0500 Received: from mail-qk1-f175.google.com ([209.85.222.175]:33589 "EHLO mail-qk1-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389147AbgAXOdP (ORCPT ); Fri, 24 Jan 2020 09:33:15 -0500 Received: by mail-qk1-f175.google.com with SMTP id h23so2224419qkh.0 for ; Fri, 24 Jan 2020 06:33:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qq+HaOFw8uEZw7ZngYuiXmV1vIKHpMK4mZuBf1yE9OY=; b=JSwxiF+hCcznUVJ67MEJ/UXgAdkIJxpUltn6jLdfDiEWdKETID2yZd3pZQyTdEOwMP MQE5CnAzu3iTWOOAInVVHcrk/FAmP+uWXQc5VbZ42JBLZMXc3u/3SYPPwWCc2PIYVC0j CfhSzHYnJXUcy+jujnr7UusZwtjvY1iZ/PCCC/eUxxUbUsP8SxCU6w4fjKIwL0LFBNHn wMKOfsjEIiGdZA1E5poTNP7YdtsSZS02TLQGCcLpuTMOvboZ7ZD6+Ln/jRF5qrxQlUiN 1mE4cyi9Sa2nOJqYau1v1omdOHvDKdG5oz2nAPtOYr+37QHwRCbhiYQCwP0ZPqUt9/iz eoOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qq+HaOFw8uEZw7ZngYuiXmV1vIKHpMK4mZuBf1yE9OY=; b=a3ohnTQpa9aYnabAZI2yTZ1eKuJGHjY742skf6/VXf6wDFsWq0V/OkxNmxFTG2KYvj bkaVF4nZTXvSSbat68rVWWGuk5VTDgcwnKIAiWlQfCLM7vhUoRpJweE0Kl2uE7E9s3Qy ggUQ3lfqOwm+LCNMkM6epY3r5iLwk+loRT0jsoHyUBHJ0Fe3fDOcQg8tN5vrIX9aAJ8K G7AbC6bFBEsfUr8e2PphfvPFF753UNuGi9jTrt5CPlSTxykURkUSXLfyiTSPtCWfx9Ji uRVRcvn8/vGSCMEU6H5ZAg5jce2qQdwS1UVzR58jFCrO/9Lc40JpWYchMrvZNzaqyjBT rSWw== X-Gm-Message-State: APjAAAX22jJhFlC0ooQKgCa7FRL6FwmhssHSDpeDU8NWojNn5hZO6IjB MMrpFmHYXR/uj8opv5gJD1jXaw== X-Google-Smtp-Source: APXvYqwLOjBF1N7nol/llCowuwkjal0h+wuxa1KxC7AyAZ7sTfR8luHmn8UiZRJo/6iX6Yl9WLiAqQ== X-Received: by 2002:a37:9f41:: with SMTP id i62mr2686957qke.272.1579876394014; Fri, 24 Jan 2020 06:33:14 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g18sm3134679qki.13.2020.01.24.06.33.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:13 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 06/44] btrfs: kill btrfs_read_fs_root Date: Fri, 24 Jan 2020 09:32:23 -0500 Message-Id: <20200124143301.2186319-7-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 136a4d9d5fed..99755d013dab 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1437,17 +1437,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; @@ -1568,7 +1557,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 158fec0eeef2..4e43bd37f9c5 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 Jan 24 14:32:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350381 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 49EF2924 for ; Fri, 24 Jan 2020 14:33:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 14DE72077C for ; Fri, 24 Jan 2020 14:33: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="KGixEaii" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403909AbgAXOdS (ORCPT ); Fri, 24 Jan 2020 09:33:18 -0500 Received: from mail-qv1-f68.google.com ([209.85.219.68]:36726 "EHLO mail-qv1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392756AbgAXOdR (ORCPT ); Fri, 24 Jan 2020 09:33:17 -0500 Received: by mail-qv1-f68.google.com with SMTP id m14so985870qvl.3 for ; Fri, 24 Jan 2020 06:33:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+d+LFkfjqTOdP67XWG4BYjw40zLiohvczIYK6YPxD+0=; b=KGixEaiiyGdecuWc8419W6QVPnTyl/hU/1OaKK+e8HtJlWuwV/THQdJne8jANBWumM u0uxetzevfu9HhTwmeY9fK/D+VFdOFIwoi0m/+nRQ+D5bpgQC6Agn5ZWMlifyf0c/JKq 8FQY9I5B4/IwSx36Fzcr7LaQIyWtmSBHgNFeqvog7sqcPPW7n3TchUEG7aFE0uiff6Bx JHt/jCTez6WTdYFAbKtzHoXuI+APUZm1sujFaGgoH08OnV9BZ5/CHE5Y6PHAB2QENNAm QYEWuBZt6n9W1UxJInTIQ+3khfUes8Bxxmr4BloEFXxMNtCAFx77xO8eIbi3q6SMZS5t hXfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+d+LFkfjqTOdP67XWG4BYjw40zLiohvczIYK6YPxD+0=; b=OdHtxZ08/VhCxvLPTEE6gS9sc1jSKTBJ06MH+RDLrncFt7b/4mvtoODOMEQnyBVbp5 eyGBgnIhwEijCsihDiswd9DO/vYNMN3xbyk01bE89a9KGIKO26fOUCQOZnAznUeus2zi 35ZE7w5DJa8eDPf3d+jjf496kaU7pnnN1KQKID1HD+UjPFK8S3f4x996RGyljVJvzSBR oDIJ3sFxs/p4lv2t5wJSBgJCq/UaZtIFqt7zRlZXGu2Cko6E22qUlKNmtsehTHDO/h6G 3A404M90Lv1Pp76owiNwEveof+DCEuvlPkz3ds2TzBKqOWNDMfliGwfyoUaukTGfWeVd RSeg== X-Gm-Message-State: APjAAAWOIkMyOlXzzhL/MmP5FLIxEksO4UqWtiUJ3dKB3qRkWD2OGkyH 4gtUQVsNGwJDN8eCQeBIBdhYKg== X-Google-Smtp-Source: APXvYqwQ/IcmZkM/ojuFE1cdSTpHjsMnpZ0unQPQc0Ep3xUdkP86wYV+vQTW1pOlAvu6qfujAYNpsA== X-Received: by 2002:a0c:ed47:: with SMTP id v7mr3074064qvq.10.1579876395589; Fri, 24 Jan 2020 06:33:15 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id 2sm3124312qkv.98.2020.01.24.06.33.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:14 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 07/44] btrfs: kill the btrfs_read_fs_root_no_name helper Date: Fri, 24 Jan 2020 09:32:24 -0500 Message-Id: <20200124143301.2186319-8-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 | 2 +- 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, 17 insertions(+), 23 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 99755d013dab..d13791ccb4f6 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3176,7 +3176,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 4e43bd37f9c5..c2e765edf034 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 a16da274c9aa..565ae8404e1c 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 6d2bb58d277a..8cd1b11c3151 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5021,7 +5021,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 0fa1c386d020..958c0245c363 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; @@ -3980,7 +3980,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 22cf69e6e5bc..b5f420456439 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -653,7 +653,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 091e5bc8c7ea..57eae56dd743 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7194,7 +7194,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); @@ -7233,7 +7233,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 a906315efd19..3118bc01321e 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1096,7 +1096,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 e6e4b00cb46c..db803765b500 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6113,7 +6113,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 3d5714bf2e32..ce3eff93c366 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4375,7 +4375,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 Jan 24 14:32:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350383 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 6E99E924 for ; Fri, 24 Jan 2020 14:33:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4D9242077C for ; Fri, 24 Jan 2020 14:33: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="ZT1IMsnl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404191AbgAXOdU (ORCPT ); Fri, 24 Jan 2020 09:33:20 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:41081 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404149AbgAXOdS (ORCPT ); Fri, 24 Jan 2020 09:33:18 -0500 Received: by mail-qk1-f194.google.com with SMTP id s187so2177417qke.8 for ; Fri, 24 Jan 2020 06:33:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bBQsI2DUZx2jdfhj90EcjcKWVKcdaVjG+fSjba7mD6A=; b=ZT1IMsnlqyTcBNM+HGFRfZ32+p5ia5FbueY16axy2IPf7lPH1CaexBrvTxWcCkeVYe AfCF27wb5UpxQIKz7ojXgMBPaYnWXqDbQaDSr3uVTAignDtDAvGQeVV9ySgUgKn2t+od KwM4KxhoWeKdY/SlwGbf2STWHcv0aNWP05HQvYhUQIhaBjQDsuJlYP2zcCw/R68nnV2F RLwPY6QpBTdfddir3ET1G3BCE2jMoWoq14fP+jMMmjAn/zhttuA93PkGblCY2lRf6q8+ u3vpuNAqDX6twCeuwD1ZPb/Nqh/atSbAACTmZ3I5wo4VhsETGe908hyZ7Mwd6LQHHV6o O0Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bBQsI2DUZx2jdfhj90EcjcKWVKcdaVjG+fSjba7mD6A=; b=qNwpCetqGicuxqLOYlmoCQDHcngw4tePC4wrrqo97fnRnis0EZQPlrE8BDZgzH1FLO VSCfiSefHWs9SfulDo9qSpTs52Nxz0Me6O7k99uF80EJ3wfdLpxWrZLb1BxkKu7fA18r oox5dnvPwtl2V0hjVDgpv2MrFk0DJkXs+H1ejn7kLBIlApYixfvTFPcyKlB2yEfbUeiz B7JKXxzhK3L8D5qMdStUHhlliKBTKLXqfe0HL5eniVCzLHAmA+kNzv4hnVrSH0HtAA9x toLOHpNUrzM0kXKBe/mA6ie5CBraNrcVpcFuO7zwE2ARIwP1qYLHakVOp9SpY0huYpdV ckhA== X-Gm-Message-State: APjAAAUeoBlIp7qtSMSV+2Nzz8LGGrzRREXS0KPpdYtvd9KAOCe4HMl3 SqUvmoDCZa1r18vBRRiWapL1gHLHKASOlw== X-Google-Smtp-Source: APXvYqxGqDQmSNYXUDBjPFjOQwB3QJle7Wg3y8aDbkI3tLeE6ahz7fdg6ZkBgA9rCD81WZ1YxjAkpg== X-Received: by 2002:a37:a558:: with SMTP id o85mr2882301qke.435.1579876397246; Fri, 24 Jan 2020 06:33:17 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id y27sm3416717qta.50.2020.01.24.06.33.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:16 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 08/44] btrfs: make the fs root init functions static Date: Fri, 24 Jan 2020 09:32:25 -0500 Message-Id: <20200124143301.2186319-9-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 d13791ccb4f6..f030ff87ed18 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1437,7 +1437,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; @@ -1488,8 +1488,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 c2e765edf034..7aa1c7a3a115 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 Jan 24 14:32:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350387 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 8D3CE109A for ; Fri, 24 Jan 2020 14:33:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6B8292077C for ; Fri, 24 Jan 2020 14:33:24 +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="jB/7jx9N" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392770AbgAXOdW (ORCPT ); Fri, 24 Jan 2020 09:33:22 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:46491 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404167AbgAXOdU (ORCPT ); Fri, 24 Jan 2020 09:33:20 -0500 Received: by mail-qk1-f196.google.com with SMTP id g195so2150943qke.13 for ; Fri, 24 Jan 2020 06:33:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ytnpG7wu0nRMJ8pe3jBKEfOsjIqrXdPt/VIAxIbGm2U=; b=jB/7jx9NFgxkyKks8OpZrDx8aeAn4xYvfW6hU63D40GV3OVcE12nqgKQmJjNEoVKGA YDvqnHP0y8NYISEF7I3l98XrweD9qdvwY+zd4cIsFxa8nRHs5WtlzRkO84sm1qAnvyPY guExtGTTyNu2yAP1DIl10gDCObE659iDXzinSSoij7ZFQe6hwe4K4XCzG7cYzFT5rZkR MVQ0AkwaWSgJ+DseUsKtLaeinwt/1B8roSX7gnGISDBSYO2agLgdZAkO1Z5O8wrcyCSM C6nXEKcdtotTdeJKAMWItA5Ryt5yhflHiMxxFsk1Tngvdi5814T57x59kJuRsjJj0UPP cxxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ytnpG7wu0nRMJ8pe3jBKEfOsjIqrXdPt/VIAxIbGm2U=; b=F+NCMe4X/QqT4oFfGtd/eqmtcBMqlFNzRxIT7NpwYWUWdYpGhKWWrf9b3/PKFYpdzQ raEePRVYeA+Qo/6wQwBdmm88kXgkUmEc/adQvNT0U83/h9HtE9ktEOhmX9wt45KrksGO 18JvJSprd2MbaC5BK9myqHoCb45CaXZQXCAUg2GgYZL1r0EOr7qMWg7PY9h0fr2obq16 j4+sAiv3+bgx6fCzSECSbBK8ZZEF7KutaY12Wu/bk18YCgkK6kk5n8pPi3RwwCXW/J7L LpokO4HmJGq/sWC6XZjrpw6XKXfJv7PVjePcax7K2oXHae/LGpmisEChcLDqcPe7A28g VXtQ== X-Gm-Message-State: APjAAAXu8ZROsGSa/l7dJZz1hFmw8oUnwtyUVDinwQCCt0ANKY8qCcnq AcHy0AQwv8sPSji4ootENkUBXfkw0+3/Pw== X-Google-Smtp-Source: APXvYqxvKDsrZ0AGf8ycjgIGXxAxg5gf7R+x4sZqzkMUGqsr2eDPj/nKuiPD2N5D056b8vMQKuGl0A== X-Received: by 2002:a37:5d1:: with SMTP id 200mr2793629qkf.492.1579876398826; Fri, 24 Jan 2020 06:33:18 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l4sm3155482qkb.37.2020.01.24.06.33.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:18 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 09/44] btrfs: handle NULL roots in btrfs_put/btrfs_grab_fs_root Date: Fri, 24 Jan 2020 09:32:26 -0500 Message-Id: <20200124143301.2186319-10-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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. Make btrfs_grab_fs_root the same so we can use it in cases where the root may not exist (like the quota root). Signed-off-by: Josef Bacik Reviewed-by: Nikolay Borisov --- fs/btrfs/disk-io.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 7aa1c7a3a115..8add2e14aab1 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -88,6 +88,8 @@ struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info); */ static inline struct btrfs_root *btrfs_grab_fs_root(struct btrfs_root *root) { + if (!root) + return NULL; if (refcount_inc_not_zero(&root->refs)) return root; return NULL; @@ -95,6 +97,8 @@ 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 Jan 24 14:32:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350385 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 0918A921 for ; Fri, 24 Jan 2020 14:33:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D931D20661 for ; Fri, 24 Jan 2020 14:33: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="uLypxOyC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404196AbgAXOdW (ORCPT ); Fri, 24 Jan 2020 09:33:22 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41255 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404149AbgAXOdV (ORCPT ); Fri, 24 Jan 2020 09:33:21 -0500 Received: by mail-qt1-f193.google.com with SMTP id k40so1624510qtk.8 for ; Fri, 24 Jan 2020 06:33:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LxUmk3tZA8Um4Lf5x+7+lgvEuXrmr4KXpR8o2atv9DY=; b=uLypxOyCJuqBAGIum44zBLcIGVJSgeDsiLxZxyvygij/8eQI0lE4DBvm4P9oMIEuHH n0Yge9/vRqstPDM2CaKlo60Au5d6WIJBI5HJXyUWELJhh1rkvEshVEKuAWgHNqPwnSeO pu/kOYcZdmm1JLQ6JkNiFj1PJFWt9vhmc5qJOxHBW/7tGmxxm7V3mJ+3Wd6xQ8isnNFp V8N2yip/02awNuNXh+7ArJmdWPq14UyAUkvTp2M4ZgNySDSNvG25XvPdb98KFildTegp 4S7GXXDwdnpE4hHLr+AtZPkAl+C+t9Lg62WGmKbVjGmrGatM0sYPgLzlnCQ9twiPPbeu UM2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LxUmk3tZA8Um4Lf5x+7+lgvEuXrmr4KXpR8o2atv9DY=; b=IAOJ9LcmK7dWX6Q2NU8ynqpbxaVj8uzawdx7fOyJu3YK11hNwmBi6ScKMy+BogV0rR oDCHn+4iBrfDFK7kO+N8fSYvj7mQpdc8MRx+UeElTYFvwpRG+P9MtWSQ9S+/bpx8dze5 BqG5YJFomgqhQ1IrEDrkb2lsuO72Om76F8g1/+jlez+LMEuu3IECl605z3e+CrJ3X7yJ YELUl++mqCs9cm+aT7B3o+TGXzUa6T3Dt4c61+KgI0w7oojRqS+BU7wJUB2O76Gv1Y4w +Z08n/V85HWMDyoOugXKVJHYarW0THgdscLIPtSWiSt0sDDzO0IOQVOpNmXXAMPC19Fa 1aCA== X-Gm-Message-State: APjAAAUpKM/kdOnsnksW7I3uc8UarJYRmMsOgnZmTc3FYKvLBMBhuZra TlU/v1NP323tPtI8mH2DUtnODrdqo0I8zg== X-Google-Smtp-Source: APXvYqyeDM7vbEsIsCoWfOee3I+V0daTPyyCElk7KBYzIwMNTP4BtYV4TO5L0ejdS29ko6xrKq6pYA== X-Received: by 2002:ac8:2afb:: with SMTP id c56mr2450937qta.112.1579876400382; Fri, 24 Jan 2020 06:33:20 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id h8sm3255960qtm.51.2020.01.24.06.33.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:19 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 10/44] btrfs: hold a ref on fs roots while they're in the radix tree Date: Fri, 24 Jan 2020 09:32:27 -0500 Message-Id: <20200124143301.2186319-11-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 f030ff87ed18..5f672f016ed8 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1513,8 +1513,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(); @@ -3814,6 +3816,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 Jan 24 14:32:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350389 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 B3391924 for ; Fri, 24 Jan 2020 14:33:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 919842077C for ; Fri, 24 Jan 2020 14:33: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="UzyqMpND" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404275AbgAXOdZ (ORCPT ); Fri, 24 Jan 2020 09:33:25 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:33218 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404167AbgAXOdX (ORCPT ); Fri, 24 Jan 2020 09:33:23 -0500 Received: by mail-qt1-f193.google.com with SMTP id d5so1658394qto.0 for ; Fri, 24 Jan 2020 06:33: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=IID+TNjtvNq2y6b27Gs67SLa1Kba2OW0SQsgqv4ynLA=; b=UzyqMpNDoIgy1ts3z7PdYPmElxsl8FtHJXG/WkbOGFvjCVRhzcip43aEkLB4CvD/OY lwU57MX1rbjRnkcB0APUGm+IAQ6P+INIlPmdltuMyuEodfjR1D+DPYWG1EMqmvjwmPf8 D7C7Te3ZK/wqj6sNA2LJ7erTmrRIc5sGiP179E4REd5de/jylT7xy57CPWsShqTZTolP vo9KZX6O3I7Xvu0CNNUWawApCZaf+kzyjp3jfMkLz6fRIQBKTFiyjSS+ATAv6kRNdK/g dumHnmW777siDiKpWQSCAdU45iDtXZuFN8m92ckqd7bDk0wgT2hoOyPnhKP5CxR3ga7M 0osQ== 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=IID+TNjtvNq2y6b27Gs67SLa1Kba2OW0SQsgqv4ynLA=; b=OkIqUEsFHuSLWyLAE9CpQGMZA4Ow4Zqv/OoRiHu2UQpVKIwxpWza8blYgtBSNgSMeZ 6WpwKfIZrurJfPBeDQeY4c8O13z0i4d9LWqMWTOAL5SMiN/qcWphHQh1iYh7/cA79B4v ckqZndbMFaFXObKiRHGs4YUaaeSmlhg1xCJ75wMvpjrr013P6ll4hqczh8RLMD2Kjrmd zdzSjBR4cDs80eBQYFVSsGZi/ppvW5p/GjZH7hFAWMSOuCsR5niTTh9IStTxQRmfY96g WXl9Yy5DIdwx6EOOxhI9MTCOG3sziI2kWwA7GMLEZ2RgQawYp+w5Cv23KqvRmkPdc9F5 cyCw== X-Gm-Message-State: APjAAAUXD8Pc5iVikJCmVhbG8F5XeFk588XhO7mxjTj0yhH5NHrhvmIp 8GlZzk1WXCaNyMaZ6Smd0xICiA== X-Google-Smtp-Source: APXvYqxbULP4DsRIJbT00hG0EriNKK4SsHfTaCH1dMdeIFEfdHO74RmpiybTpx5kWyTVmgNQqiAOkQ== X-Received: by 2002:ac8:43d0:: with SMTP id w16mr2452613qtn.43.1579876402077; Fri, 24 Jan 2020 06:33:22 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g18sm3135005qki.13.2020.01.24.06.33.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:21 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 11/44] btrfs: hold a ref on the root in resolve_indirect_ref Date: Fri, 24 Jan 2020 09:32:28 -0500 Message-Id: <20200124143301.2186319-12-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Jan 24 14:32:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350391 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 BF2C1924 for ; Fri, 24 Jan 2020 14:33:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9D19820661 for ; Fri, 24 Jan 2020 14:33: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="B8x8Ex/i" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404296AbgAXOd0 (ORCPT ); Fri, 24 Jan 2020 09:33:26 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:34542 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404149AbgAXOdY (ORCPT ); Fri, 24 Jan 2020 09:33:24 -0500 Received: by mail-qk1-f196.google.com with SMTP id d10so2220843qke.1 for ; Fri, 24 Jan 2020 06:33: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=MLBOgsB9gJ9L9KSeDm3NlcZBDe8/qJV/rRnXG9wy7vM=; b=B8x8Ex/i22lAYQB4MW53BjVW+O/grOWtf/9o+Is0mAW1WYa2fEsLq5Ecylta0cPbxx q6d1UldXRHQXjczbVUuUNjjy/Wi5HY6G3AV1p6fUvtaR0nqifspFIxKaqAkr3P+68rK+ GkBAjkGD+4d7BP0lr/tYXKSpvhOAqJ9lWoeBxSjJyW75SJ4IwIjskL+Gu//3ZeKUMyT+ +iwOBZ5R49VXNiQVJ9A+21Ouf33s16+kBfPvhZjS4skLSmtEgiy7Hu1g1HfgCJD72BnJ vUeQsx/V5SHNxbHFq8noXJtM61fyM4QtSrmmEfTCp6s3GrThVthjwYeb1HzHwyVoA4Y3 4JRg== 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=MLBOgsB9gJ9L9KSeDm3NlcZBDe8/qJV/rRnXG9wy7vM=; b=BYRKbD20El34F/7sUK9tUxZfZhlEk9dfGB/2lVPqQDZn0hRl5VCykBrFbR8+IbXDMn ByocJegIAXZaHmf+cHu3MRvZo3DqFE5cwPrtDIn7in87usK2Zd9utoopizN89n3UqOXk xAlq6q4zwNRRXjFucyr/KHypRsxq6k56acLR4dr3TG/cvdOlz1ZFfa2swRXx0t4BUCWp FCxXvwVfCZdPZ4XqGqN5MHiPtBOvyJbRXZgKd+3yDtW5iA56sLhxhkm7R2q6kaXt+FP7 GUlmCbiW/2qXiSX4SOQhZ8tBnFBUy+1u5XlB9fo6nMe5SGWAGFzogrjugh/FgsBU6Dob 6yZg== X-Gm-Message-State: APjAAAWk3JBinlHlI+dXV9mGfo1u532ZihPpw3u9o09dRnV0eCrRbFng ACfWCHe1nWMDrYwebdOsgCYmjy5ZwtwgXw== X-Google-Smtp-Source: APXvYqympu1ot1srqpmsumUEzyJzKvOfoZNTFmLQNyXRNDWvMMxUo5Kuljr0FDKJbE739VYTZECTew== X-Received: by 2002:a37:2751:: with SMTP id n78mr2928494qkn.177.1579876403645; Fri, 24 Jan 2020 06:33:23 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id n32sm3328418qtk.66.2020.01.24.06.33.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:23 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 12/44] btrfs: hold a root ref in btrfs_get_dentry Date: Fri, 24 Jan 2020 09:32:29 -0500 Message-Id: <20200124143301.2186319-13-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Jan 24 14:32:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350393 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 7A191921 for ; Fri, 24 Jan 2020 14:33:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 589522077C for ; Fri, 24 Jan 2020 14:33: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="RJN+0DJf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404369AbgAXOd2 (ORCPT ); Fri, 24 Jan 2020 09:33:28 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:40682 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404285AbgAXOd0 (ORCPT ); Fri, 24 Jan 2020 09:33:26 -0500 Received: by mail-qk1-f193.google.com with SMTP id t204so1362860qke.7 for ; Fri, 24 Jan 2020 06:33: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=HKt/gyH0Knlxys+g/v0pjWvfo/9TSnmMRROcvEGAxbM=; b=RJN+0DJfju5zB9oNqw6x1f9PKV6wlKIzjK1Lqw7OH6xkicYoFy9IT3zBL2XVe1HgxX p/LyETqzqplu5VbQ7p3z6M34Mpu3Rp+tPxuw064t/pfIeW0NeriUBEf/ccWUIPHkufef wjxIZ4pVlpNG6dLjXTrbVIKjIgSFIMAXuFih8xt6LFxNJi9AQHbgeBJY4ebwGzhKds42 AI8trnjKAuE5IfSfdSTdrdm21iDlFQjDnI0d0MKGkq4R6ADW4rX77mernvLOBoa3qL0n NaIei/+4Ya2CMi69XEojY0uBGeTUw0BB9QZH6LOcSwAP7O65dbPpKZ+LKOS1W0ZXLzrU 73Nw== 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=HKt/gyH0Knlxys+g/v0pjWvfo/9TSnmMRROcvEGAxbM=; b=hrFQPFDJHSvBFwyio9+0Oab7at2vfYTR5qez/NDwn0MwNZxm+KTm0FkiTObv07reNi Es9zxFT0yb5yHkndpRRgHd4JCPqz02R84/GYaSdcd8/igC3Hr8as+i+N/hGI6EzLevZ1 +fd5H7+ClqQZ1SnN/TOfJx9Qmxc1jGODe1iDEhF8Aor07SARzN9u3T3Nx1fWPlvPRnvm W+yteJ3uYrWGUVB6Gq7y/DJrkpu3sFWlXlb+0AVs8tL9MWFAXDPXZNPPIPkkugUiEjNa C8xCn1nxYp8nW9IWQHzj3x0IaMRIcPulgnWeDDV+TflfwQBU6R9thpl33Njc9voOWDPi +BiA== X-Gm-Message-State: APjAAAVJdiuU3nn/7JzAiC5c9tevPKnWQ28Gxrccm/4oDxN1bJzfCA3Y fOF8wJ7bUUqi/hDWZDH+D/PKm1E+/L9J3g== X-Google-Smtp-Source: APXvYqwLXVYyrRzOpvNnWQGBL1t9zCGfExoinOwVZUCuB/ab7e7sWMJuLw3Gz5OwL+KCkSuHC3PvvA== X-Received: by 2002:a37:bcc4:: with SMTP id m187mr2951169qkf.329.1579876405222; Fri, 24 Jan 2020 06:33:25 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id j1sm3098118qkl.86.2020.01.24.06.33.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:24 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 13/44] btrfs: hold a ref on the root in __btrfs_run_defrag_inode Date: Fri, 24 Jan 2020 09:32:30 -0500 Message-Id: <20200124143301.2186319-14-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 565ae8404e1c..3abc7986052b 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 Jan 24 14:32:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350395 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 B4FD5924 for ; Fri, 24 Jan 2020 14:33:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 947412077C for ; Fri, 24 Jan 2020 14:33:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="Zxv9jxC9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404374AbgAXOd3 (ORCPT ); Fri, 24 Jan 2020 09:33:29 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:45167 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404315AbgAXOd2 (ORCPT ); Fri, 24 Jan 2020 09:33:28 -0500 Received: by mail-qt1-f194.google.com with SMTP id d9so1606558qte.12 for ; Fri, 24 Jan 2020 06:33: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=SAiiIaHYxAwFxdCh+4UtFgo8Rs8ZoelHWG4/dfLjKQs=; b=Zxv9jxC9O2t4X6HlWcGH5uvCZwr6BnjpCM19D4FLJvh/64jgm9laVFaQ1t+/sdE653 PuWKBy7DgSk208BcLQt0nQGllAiceu4fcxD6AKlEZX2Fy4ZdkojZ2h0QRZqvYvJahfUJ n7JHTfZ1kJOW/KOIENGQPD13pMwtkRSKX6ZnqxkK7kq9L54Vg4kdQorsZlm5Og5dGLW8 ey18qzN+NmKcwzCpU+O/ygODJrjbwB3fHY2hiYZScMbc/0q5KH52Dv2oA446yQF0ZfZy 4B+bnO7IW7FnSb0PtcG9We78kzRD6a36CxX8BQXfXOLJC3TtFtmo5hLGaZM/GJIos7Lv gw3Q== 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=SAiiIaHYxAwFxdCh+4UtFgo8Rs8ZoelHWG4/dfLjKQs=; b=mgfjAo368Zlo6+3ImIlP3+seb6VzlonsjCvewq1P8dDekyWJcC2ZJW/xQUXm/1idOZ 4tc6r+fqpv789CZC/3Tib/NBk+BdinuC1E4JXOY7WF2EHwfBI2EzqZSAVgipx9S2ig/z rl7C6jIqZZgwc8fL+gc2EQfK5D8vkWBKswju/zspUHV9nZWILJOWMCB93M8nni7U1wbk 0UbDp7heSLW3iQYGNkp+4t2EgP+66tOpwWqgnmLwz1tzpYziTKGU5fY84oxiSQdurSBC XBtEatCC3EIxLa/KRv+uVLGtX6Tz9sf5MsIWOKSTue04IheoOwjHVLrhJrPcigF02MS4 CXPA== X-Gm-Message-State: APjAAAUcWUcAtYPhxqsZk5yYgZvpaEStvQ2HTuDKzRDI8koFWNIDAUzh mte6I+6nYLQQINd1BY6EU9n7Sb9tN3EW9Q== X-Google-Smtp-Source: APXvYqwQUVLcQK1G6s3zpQ3IwuzQ0UL+MqkQTBvnSmnLPR7Nz0OnHWa2fjVftJ01yoWZxZzU1Nt3ng== X-Received: by 2002:ac8:7188:: with SMTP id w8mr2389732qto.139.1579876407063; Fri, 24 Jan 2020 06:33:27 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id n20sm3038187qkk.54.2020.01.24.06.33.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:26 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 14/44] btrfs: hold a ref on the root in fixup_tree_root_location Date: Fri, 24 Jan 2020 09:32:31 -0500 Message-Id: <20200124143301.2186319-15-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 8cd1b11c3151..85104886c1e7 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5026,6 +5026,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); @@ -5268,6 +5272,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 Jan 24 14:32:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350397 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 6EDB5924 for ; Fri, 24 Jan 2020 14:33:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4D1E72077C for ; Fri, 24 Jan 2020 14:33: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="MuvFaWPg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404398AbgAXOda (ORCPT ); Fri, 24 Jan 2020 09:33:30 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:43647 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404285AbgAXOd3 (ORCPT ); Fri, 24 Jan 2020 09:33:29 -0500 Received: by mail-qt1-f193.google.com with SMTP id d18so1617744qtj.10 for ; Fri, 24 Jan 2020 06:33: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=hA4iNKOpd+uPQ09XByOlq3GwjvuYpxH5XpAmxRgdPC0=; b=MuvFaWPgM61BfbZjQ2r4+UI7/QmprFWkez0dBZFf+9yeDJHEOAigyscfM00GneqnOP SL1EeqMfpyc575zsl6bI8/koAx1BSdd2ZIAoPaJDLEus3+VMImjzEu9+LQbeBFay8lzi t/7iFxOxH09OcZshvLuszcwzt1b6FjGTZgQ0A5c/WlzzuZ7HFHAadn2+0UCc7S34g+KT lWlxnIXOlwBezA4b0sVd7xI82PrnTLPBYyxNyTK82AS4QV+tC2dqzASfJq4Tvwi7T9vz wg7UTLA0tVtKMfn84MZUBc5xzaE2OgZvl6cdx5x5Lhn5MNoZHRAdehZMDtGr+o8lfPJc XaCg== 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=hA4iNKOpd+uPQ09XByOlq3GwjvuYpxH5XpAmxRgdPC0=; b=Q17ttM28V33EjsogJn5HLBzAMeiTUWL0Pr5SOkCyZTLZX0xYtaHbigIuEuZgSBrzRt kYeolClOy3+wAqmTazHU67BrTwQmvpWUAIvQvRI+syNxjiy4onHjtDu+qOBzp5OJ9JKe woiJrvFDSEM4wG6bq29nDRCC+aNwgsO3Nm9vK7Aid64bft2Fy4dk2jsRc62Yzsh1w90M pXxF3SLHK+vLFTh30VM1ZpqyL+TJY8Q3+XJC/8q/2aMScZoixgsyJh8YjjtfPmqr735v oQIRtkHc3/26dzq8lcZZilu4DY8LDlYC/631BMYLXcBWZJDWXWGTmmnGcojQMWkh7u6j TbVw== X-Gm-Message-State: APjAAAWXZylaIxcA2l4xZb8hNZtE28qM/OrxxYnGCMvyFjYf3kGrIRrl MyDH8yRgSI/dixIAa57vS9l3Hg== X-Google-Smtp-Source: APXvYqzcqR1yMA8F/IntSKfK554vbG639Q2A9cA0o84gKD14LROQRJYFcYgM32HObhNJxr15IQxd3A== X-Received: by 2002:ac8:4086:: with SMTP id p6mr2367033qtl.161.1579876408626; Fri, 24 Jan 2020 06:33:28 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g16sm3090410qkk.61.2020.01.24.06.33.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:28 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 15/44] btrfs: hold a ref on the root in create_subvol Date: Fri, 24 Jan 2020 09:32:32 -0500 Message-Id: <20200124143301.2186319-16-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 958c0245c363..b1d74cb09cb4 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 Jan 24 14:32:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350399 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 1EBF8921 for ; Fri, 24 Jan 2020 14:33:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F117B20661 for ; Fri, 24 Jan 2020 14:33: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="d/bECHpg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404406AbgAXOdc (ORCPT ); Fri, 24 Jan 2020 09:33:32 -0500 Received: from mail-qk1-f193.google.com ([209.85.222.193]:37091 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404384AbgAXOdb (ORCPT ); Fri, 24 Jan 2020 09:33:31 -0500 Received: by mail-qk1-f193.google.com with SMTP id 21so2204880qky.4 for ; Fri, 24 Jan 2020 06:33: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=UcvWdvkB+kuoKVdsm56WFQ+OEF9OJP2c6Pzz38qJFgg=; b=d/bECHpgVxiFosiCuIO87vwDFJ5KUkC4RY0sM3xcc3dLKVcTm2XdkICA+loVoKqYXj QS9Z6PDBIn+xuHipn6/uNf1g/4DOb5NMlvPEdZLEvtKWHu6fC6tE57OfOxZaWTSHZa/h ULnat6/90SLHUPsAQGlNEuHf4IlBGaXO4jb7BlAgkC/y91+Mns9cHJkvjvO6r64ybnUA 5UUdZ345JsAq88Fy6NkrxlrESddMAsWcXEVpqgYzAPVSFhd4Ekbyi9b53v43A85iCmI7 m589vY/HCbc83m2mL1W+su84LS2qIst/fmzseUwDgjHPZgjG+LBe2QbzMUMGidOsjcIm uNhw== 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=UcvWdvkB+kuoKVdsm56WFQ+OEF9OJP2c6Pzz38qJFgg=; b=p5KP6oUlBqP8dX9gIj0rdiO5FQTTHums+WZU7eiVr00mI/3aDAxLuyd0AD3A/Ne3cX 3SHEN4/jeNVSOnkOvJPF+/d9izh1h2gZVvR1LNVdSugUcFN5ICQR0rPdsYagGFzxoW3E d1bdQ+esDZcvHC1YaMTpsQR3gkCDMlF/jnQ9LnydQCA0GpCD4ShBc3avEwTPLGVYxaxR tKbQQT/p5Nbu+cdk9N+ixrG7XmsMlUP92vzmhfZcx4E0yjdBvurflNRxKr7foU5dUyty Fp5ObrDcZMX0XmdP2bAvZH1OEji3jmr9qeIp69erQTazOeYNwi2b/VvGQzJ0NHG2BuqX /1Vw== X-Gm-Message-State: APjAAAWOHsFF9peBGczFiSu+6mqNl+AyMcG4K80/yhDZx0PbifaN/Jn+ vC+OXx2cBYipwjRqvYB4gOIp8w== X-Google-Smtp-Source: APXvYqznmC1/OY1UOXxSeNhsfZV+xuJC5AuLtkltD1nL7f00yVLPxs4910D1DbPZEWVHzJLdIzf/Mg== X-Received: by 2002:a05:620a:1509:: with SMTP id i9mr2594311qkk.447.1579876410169; Fri, 24 Jan 2020 06:33:30 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id x19sm3288369qtm.47.2020.01.24.06.33.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:29 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 16/44] btrfs: hold a ref on the root in search_ioctl Date: Fri, 24 Jan 2020 09:32:33 -0500 Message-Id: <20200124143301.2186319-17-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 b1d74cb09cb4..62dd06b65686 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 Jan 24 14:32:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350401 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 D3062924 for ; Fri, 24 Jan 2020 14:33:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B00FA20661 for ; Fri, 24 Jan 2020 14:33:35 +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="OKzsQZcc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404413AbgAXOde (ORCPT ); Fri, 24 Jan 2020 09:33:34 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:41277 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404404AbgAXOdc (ORCPT ); Fri, 24 Jan 2020 09:33:32 -0500 Received: by mail-qt1-f196.google.com with SMTP id k40so1624967qtk.8 for ; Fri, 24 Jan 2020 06:33: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=kvs2zgeWGFIOEWBcae13gISN2NDUfogrB0w8hZ982w4=; b=OKzsQZcczMc1INfUi9onKUg/omr/QjguyQE1l9S36vCnSLzcvq1V7z06K/obFMkS2K CLw4am4QE6PH+Da/85ZmhNa4x+MmnOWAW2ZCKNwwL7/nXWcalnCKny7xwixEgN0L/CPS IQjRY8TvCAf5XuHsvDyK00lkReKBipnPdQ6OjuKdVC99f7kptOBrDp1oG9RprXsH0dMu XERFtAMZDFCeOBjp6Q2oJgkJMx+FcBx2xr/57eM/Fxw67JHlrfj8W2daITnBi1y81Fdq NI5TQz7QTirM0/jZrMG8noaWO6V803nLJaUaoq+4NQ3BQr59DwwzoYUWu1RfBqhV5poR jIMQ== 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=kvs2zgeWGFIOEWBcae13gISN2NDUfogrB0w8hZ982w4=; b=EmnDUzw8N+PasFoWBOfkjSf1v9LLRo+NetkKjSknEOfTY2sSvqZFI5Ht/QY45Vu/4V RKmvyvXQ9tNds2hHyHtxG5caViuj6GiBDYenZf2Q/Blzqd56xLk4sx0ctd/3ezgwqGT3 fTdbQszRmrps/6RsEGgkGCj1NzZfLoA06QU9Cq9HW/55qJWIy3w98/wlNlQySfbIWyal V0j4TXw856Udx0Jr3auHimIoAp/EA6pe0yndPX7owcr9Ga9tv/0rDr+EM3q1wn0cjcCE 1e93a7vHlsV9HQHE//EN1ofnfMR2fkt5AIEGeKyq1CCSg3YQMSYls0Zj3Pdrpz5eQXkN z4/w== X-Gm-Message-State: APjAAAXWngxHTgw/C8m9isC5LQSaXcN4BOODUpzDoB2vTv87zTQwWcGf 2sOPVi8vRFoX+vF+VZXz1dvyfpl3o050LQ== X-Google-Smtp-Source: APXvYqwZVMSshSoKXvBVi1g0beYgtiMfkrYkyv4myK7JRrZ93XX+TM08apFcTUgf3agBkqr7UWkMKw== X-Received: by 2002:aed:36e5:: with SMTP id f92mr2430071qtb.354.1579876411764; Fri, 24 Jan 2020 06:33:31 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id t29sm2524663qkt.36.2020.01.24.06.33.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:31 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 17/44] btrfs: hold a ref on the root in btrfs_search_path_in_tree Date: Fri, 24 Jan 2020 09:32:34 -0500 Message-Id: <20200124143301.2186319-18-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 62dd06b65686..c721b4fce1c0 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 Jan 24 14:32:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350421 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 A8743924 for ; Fri, 24 Jan 2020 14:33:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 86C0620661 for ; Fri, 24 Jan 2020 14:33: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="tOc7i1au" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404429AbgAXOdh (ORCPT ); Fri, 24 Jan 2020 09:33:37 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:36544 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404384AbgAXOde (ORCPT ); Fri, 24 Jan 2020 09:33:34 -0500 Received: by mail-qt1-f195.google.com with SMTP id t13so1233620qto.3 for ; Fri, 24 Jan 2020 06:33: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=Tqq9AWCcNSxr5Rv3Ka/wfb0mCX1ebqBK/iWKe9Ld2rI=; b=tOc7i1auBLBmktUiOw4FgUeHqP23zODsp86/cCpj0Ln0WqvFFCXk3Qon+40ooUbL1p Eql+ky01yY3C15j5q3OLoV53rMXfJqfztSxUeFZdOqouibVRkfkbic4CiypBx4Z1ldNH 3CjDbl8O4pHIfCRuhsZpP1fbargm0rPyRTCrJDYdcBtjcyID0Kf5T/B3lI2zMLWi9gwL IbTtkIsbG4wHaaaVg6ziqlMAiavx69Ku6/2b/dmP1gWIFrn9qoso3Cx14X4S5Zx8k2q8 ALDby25l8j4YkdToKWXpQKXYKmXGYAz1K0KLiQ3UkaIrN/CTMkaP41KggKdy3a0WdYRe HC+g== 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=Tqq9AWCcNSxr5Rv3Ka/wfb0mCX1ebqBK/iWKe9Ld2rI=; b=f0fr9NLEPWc3twTxhvwe4wNlRoBX90Rn/BYToHnI8AkPSulWVlFJ1OG6U0buJ/r35L kWeau+9eoRoExAA1XjEsGqhD2W4qLq1jgClMl3XvFEMfWD/lv+Iy19TsEuayPN83OZM0 9OzQLttWgL4ETzTQOr4gMOr+ZFKb8P/8E/vv8NVymxdbcVZXNqpVOb9gLiP2MdGsofWq ahss1hqaM7vzTiury8mRY+El+3z4rLSGlemxg+FeWB2e6bJ9VjL3WKhIM0K+hRDZcffK YXa1RKyfLOt/M/+hMW1BvT2tHN/84HXhfVgGMQQwhEvIHo4o/kcI//EKXIrBpsnaBy96 Gw2A== X-Gm-Message-State: APjAAAWGWBwhrurs7UmG2Ob6UiOUpgxgWNLjMC+W+vBlW0v1R1XicEFb hdk1yd0XOllTkcaSgmIAwkzuEQ== X-Google-Smtp-Source: APXvYqxCWRc0/UzMHsIAuTqORI+5WzqWPLNQefaAMMTJnVjnUcJ/4d9HXaMX3Is6ozGJl0vhR/hwFg== X-Received: by 2002:ac8:602:: with SMTP id d2mr2408338qth.245.1579876413458; Fri, 24 Jan 2020 06:33:33 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v24sm3311710qtq.14.2020.01.24.06.33.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:32 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 18/44] btrfs: hold a ref on the root in btrfs_search_path_in_tree_user Date: Fri, 24 Jan 2020 09:32:35 -0500 Message-Id: <20200124143301.2186319-19-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 c721b4fce1c0..5fffa1b6f685 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 Jan 24 14:32:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350403 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 8C5DA924 for ; Fri, 24 Jan 2020 14:33:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6AB50206F0 for ; Fri, 24 Jan 2020 14:33:40 +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="vuTeyCSo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404518AbgAXOdi (ORCPT ); Fri, 24 Jan 2020 09:33:38 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:36801 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404404AbgAXOdg (ORCPT ); Fri, 24 Jan 2020 09:33:36 -0500 Received: by mail-qk1-f194.google.com with SMTP id w198so950361qkb.3 for ; Fri, 24 Jan 2020 06:33: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=RqkGJtTlwbicUPBLGp2IaZBBFNmS7nDH0ciMWvbfcF4=; b=vuTeyCSonUDccR/MiEr2kG1M+c7cl/qOhrSOxioDFcmJAVj/ftK+zWldM0E/pJVv58 X6u/AqsAULToLX6hX1P7cb8Z3PXvBXThqtw8VbJj9PXgy+lFxXpYdOyKRNWOgcF9JyvO 8GOfo0TO7mttaIHA/DPYw80LI/RIFl2HLCTavZ8MtwSoWyL1LCUW0/rzA8ys+sypVUq7 mkp5jcVPoKgD1SfEwWd79AKUlakaD46wb68taWdDK+KiM1f8ED7HIXUj5wIQw99bBfBv 8LaIQ0egoXvIYANB5/xWHhgyG/KnBrCjWNrRUg1o0+JP7JUCXEAAf9fnJeFMoMQz9g4R rPGg== 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=RqkGJtTlwbicUPBLGp2IaZBBFNmS7nDH0ciMWvbfcF4=; b=Pxy4ACx1uiBaKg1lWCteQn0y0BA8HaR107iPCjnj7KC9H7UKvoG/FqSLy0FYEwiH7v QkZ84Q59yCNqiacVCj/zRU52ckUxcYa2PhpCAUINIzVlGIl5+7W+jfCcUeOP3EV05dxz qWOQi2p0+Tgbt2+sFeBDq2P3u4YNpMlmHpxlws8XjyZTMy0QpRZNYTYfJX0IHRkGj5VZ mlWDlwbMzesp2pQ+xBCXwOYVJQpqndC2YFQeA4MoeXrlOKnztaYK4JrorEWAn7pXexo2 A3puhgBcYGCXWdkUgBLQDpuEIHenQkfm8/VjarzFxkHkS+nxFcodmolb62nAZo/X7q0E yCpw== X-Gm-Message-State: APjAAAWgOO/bhHbsskzgZ7JCPfrzxUpzgmjB2vB45mER07yzV8kX5X2M xnoc6BSPHY9i2c7wjFkO5zCBbWNuhHOTNA== X-Google-Smtp-Source: APXvYqzmt7vr74RNzCBE+S99Jw1Muocx8sE11NQiLYmww7bw2ZN8qfpKxm743W8C0lLxIRjKuY6sqA== X-Received: by 2002:a37:9c8b:: with SMTP id f133mr2728924qke.375.1579876414986; Fri, 24 Jan 2020 06:33:34 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id k62sm3109856qkc.95.2020.01.24.06.33.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:34 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 19/44] btrfs: hold a ref on the root in btrfs_ioctl_get_subvol_info Date: Fri, 24 Jan 2020 09:32:36 -0500 Message-Id: <20200124143301.2186319-20-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 5fffa1b6f685..7d30c7821490 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 Jan 24 14:32:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350413 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 BC7D7921 for ; Fri, 24 Jan 2020 14:33:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9B7B22077C for ; Fri, 24 Jan 2020 14:33: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="y+82Ja5f" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404579AbgAXOdp (ORCPT ); Fri, 24 Jan 2020 09:33:45 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:46616 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404420AbgAXOdh (ORCPT ); Fri, 24 Jan 2020 09:33:37 -0500 Received: by mail-qt1-f195.google.com with SMTP id e25so1608038qtr.13 for ; Fri, 24 Jan 2020 06:33: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=PP4dVMcgyT8OTB+vOohtLtUZzvbmwfUKl46nd4xdSyk=; b=y+82Ja5ffKbcoj4aBWSDmZ8dZUmV0L3G8Y1qwrxx/JeX39zM9uxcndkxO5RexlI/FX kDgzCBRYfypRATV8SpnzPtRb1iyCScvfFwGy52emG+8FR/naPBbwPyUdaQWGTGLDBWDG 4MB3mnkVZrq2BlSCnLGzyOWHH21qcP2723Vlim9B7NtIieTEi7OB09mArg3nfBNEx3c3 AXaUx4RpFrG3pyFO3buwd5EgiiTAuPN+QS1nSvzVWGRz+CBFFp6RClMJ48gEy7m/XvxO JH7NlZAXEpjk3i1Vc6OWv7T6XRixX7G+xa+/NDlhXvRt8MGBDLxR2B3NLYMta1zKOPvP OxQA== 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=PP4dVMcgyT8OTB+vOohtLtUZzvbmwfUKl46nd4xdSyk=; b=tJe6RgRhwkbtH+NhTZ+zqyq8lsloortrFGhKtFVmwusGvd3Gi9B79htkXnZwCAMGsc R2hZ7k53hKGn7MQTPkMBPJejvLQYt9jQ0/tJ8X/6EoWK2ivLC6A82yLG/Svjne4Ls7P3 s/z6ezfEx2Pyl5T6ElUVHHiN/gtiVcu/3A0gE3MiiWB4Ez0+G0wmb9dKWvzQOjL4MxfU /RkQBoSKzYbfVVX07Q87RtKBV9XTmoGhk3BsCQu/rvT/O1NJFhE5NjNMoGXDOOxZdCvs QipA/YyclwqFMbr/4v54N9Y3y1SOPPXDN79HirFrBVfUBPDC7tzyr3VaaPZdc4eL7l0u k+Bg== X-Gm-Message-State: APjAAAU7yfMiWuMN3HZcIX6jFgD6O9g6zHRkMAAe+Nr9WxE73n868q29 C38GbiUVluxn0Wh52d2vjD2PJQ== X-Google-Smtp-Source: APXvYqxV+jUIUZhrHQCPWtnjJNCc+Pn5HYAAhHteXWAeQPStb6YUWr0k2fzLivoi2a5sW4uw79FRNA== X-Received: by 2002:ac8:7cb0:: with SMTP id z16mr2411754qtv.276.1579876416542; Fri, 24 Jan 2020 06:33:36 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v55sm713492qtc.1.2020.01.24.06.33.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:35 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 20/44] btrfs: hold ref on root in btrfs_ioctl_default_subvol Date: Fri, 24 Jan 2020 09:32:37 -0500 Message-Id: <20200124143301.2186319-21-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 7d30c7821490..69c39b3d15a5 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -3987,7 +3987,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; @@ -4018,44 +4018,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 Jan 24 14:32:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350407 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 2B0D2921 for ; Fri, 24 Jan 2020 14:33:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F39BC2077C for ; Fri, 24 Jan 2020 14:33:44 +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="VPhQSrso" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404357AbgAXOdn (ORCPT ); Fri, 24 Jan 2020 09:33:43 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:45187 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404404AbgAXOdj (ORCPT ); Fri, 24 Jan 2020 09:33:39 -0500 Received: by mail-qt1-f195.google.com with SMTP id d9so1607096qte.12 for ; Fri, 24 Jan 2020 06:33:38 -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=waR2Lt/X4+7LzUw69Y9pUyuaF2RLHp3vzC1zQ/caxek=; b=VPhQSrsoltF/mUQ7kTvxZJbxRsIM+wfv+EobWib/YUE1MCDy6gevDoRCS2Ptke0aXw hnmImqpejSpjDFkr7gIzdq6ZY4ZfHU6GadKg+vrDuhr5DGHkIwv04JTgV+WKAHhaSE/0 TPelI7G9vkn21i0tyS0vOYbOGWqBjDkWLz+3VXIaoCVXMOvBvGJN8HaqbkDVCoavYE+F PZAVWPBzJ8Q1dXDPps68wvXRljZioyZQLgSMQ3jQF2t3Qw0VcHLayJ0mKliqj+nKoxvx 30Jp2juQyjzvhHY1z419hR+Ms7wcpjXrETbLJdyvnjU64oRmZFJPgww326jLsV3zRD0m oSMg== 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=waR2Lt/X4+7LzUw69Y9pUyuaF2RLHp3vzC1zQ/caxek=; b=nwG/tcVG5WtgKl4OyDZyHyHsgA8zWupBJW6pcTa4q36Zf2DCakoZwiDNca6ORUBfXU jglgUDeqrfjvW60EqEw8kxRKEVrG8K+nXeFk3svdNbleaZ5UCeNmtNqleRRrBSPQBR13 2Q5uePmOARfu3Jy40fztB0USEwxFtQgqtFweTmD68S/2o0WwsJZ1OWwLFwLi8vNMY9aB 4PAZqn88Y0TnJ6R5GuoEyfYOpTrvHWnPlmfAw3YjXhqKHi2YJEJPkmLhxnWh+u2tVuY+ rmU9vgMKU0RCnKLSv09FXUaW/24eBSBUScTqTLiczA9vIjzxHqDPacGaCXqgNCMq6lod OtFg== X-Gm-Message-State: APjAAAVVHmxVW+yX6wf71sS9wwS+yTbV8Tqe64jJZEQEzgwk1cQ4zoZ8 7yaHwjAwcXimgo7KGv+0X0E22Ir6OdfSMg== X-Google-Smtp-Source: APXvYqy60iFT8/jQYghtXY5tYyJwAh/oY4TbXT2rRwbXv9alWFBsNxBo7UO3joqjo0C6WYS7+zcB/w== X-Received: by 2002:ac8:2647:: with SMTP id v7mr2422479qtv.219.1579876418134; Fri, 24 Jan 2020 06:33:38 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id j15sm3190027qtn.37.2020.01.24.06.33.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:37 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 21/44] btrfs: hold a ref on the root in build_backref_tree Date: Fri, 24 Jan 2020 09:32:38 -0500 Message-Id: <20200124143301.2186319-22-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index aa3aa8e0c0ea..990595a27a15 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); } } @@ -589,7 +591,7 @@ static struct btrfs_root *find_reloc_root(struct reloc_control *rc, root = (struct btrfs_root *)node->data; } spin_unlock(&rc->reloc_root_tree.lock); - return root; + return btrfs_grab_fs_root(root); } static int is_cowonly_root(u64 root_objectid) @@ -891,6 +893,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; @@ -899,10 +905,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; } @@ -915,6 +923,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; } @@ -930,6 +939,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; } @@ -941,15 +951,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; } @@ -959,6 +972,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; @@ -1006,8 +1020,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; } @@ -1244,7 +1260,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]) { @@ -2622,7 +2639,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); @@ -3094,7 +3113,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 Jan 24 14:32:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350405 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 AE971921 for ; Fri, 24 Jan 2020 14:33:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8DB3A2077C for ; Fri, 24 Jan 2020 14:33: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="J2eEkiZM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404560AbgAXOdm (ORCPT ); Fri, 24 Jan 2020 09:33:42 -0500 Received: from mail-qv1-f68.google.com ([209.85.219.68]:36755 "EHLO mail-qv1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404546AbgAXOdk (ORCPT ); Fri, 24 Jan 2020 09:33:40 -0500 Received: by mail-qv1-f68.google.com with SMTP id m14so986523qvl.3 for ; Fri, 24 Jan 2020 06:33:40 -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=79SwE5YlG/SPO84o5TzSObabEBwnaBR1h21On1MbvN8=; b=J2eEkiZMv8a8zeR2FoFjp3I1aLA8pEo8klZmMQcpa2/OvQonQX7ymxm1CWRzhwwBi9 5ol+vHuEfSVJrezI1dx1Q4F+BOiCY6/ShzSXRIqgQT+6ZUALHpnPWJRSWUbbnazoCUfo g9Gy6au0ptEACd1LqEyhP+DdPAx+kzZf9vWG+dI4Cx2t31bI0qc0GeNnxvnQGlbvSmpq o26hPOgIw879DtqmKjC4MBcY/bTIiwhskg60xa3oF8nSTmP2CR6ROmp8nf5gWBRGFW+N zm2jVM5Fh26gEPPMW6Dvzv6IYQ9oTAl1lkgDM5c8IFM4AzA/hT2X0+SnwIuhP7WHK7yQ 318g== 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=79SwE5YlG/SPO84o5TzSObabEBwnaBR1h21On1MbvN8=; b=rgYDxHuJumHgNOsTYu1GSVxIEsZJ0+34duQnDkALLl3rY655Pkba/0KyPOiAP21Kk1 rZtFLgILFhmdonZtf9xJu2rWVR5L94GV6/z+fTRLzAdLYhncl0MgJB0Ara5KY7zIyILv 1Ga+CK06xWfYt7hTjPJGX9gl8gxsHIIaJIy93PXyUhgu/h3UKuZU6aXO13VMPMF+8c4M 39NeBKzkSsIkSqDg5HZJi8eq3OhZtd0lIaGR0fFm4JAvdoLNuXepUK4DafpOuc0iZ1vt VvlK3mOnySlPmOqX3yETTfTsIwzQTFdBwA1QAYsV9iAOa2rft8lwn2JBAx4TioviQ1rX M9vg== X-Gm-Message-State: APjAAAWLElNejNzJVpQ1imkmAKUg3OvXp1wwaXWnsYpa8sgTngEp3uZn p4ceXFE5M6euvkcsatzQclHPPN88wPIGmQ== X-Google-Smtp-Source: APXvYqys/S1ti8RC6IzUNTRaHHKWHH5pij0yO/Hw/38MD4izMqNqpkOks+eFak0qTdg2gOhEHYOoMQ== X-Received: by 2002:a05:6214:c3:: with SMTP id f3mr2969779qvs.226.1579876419784; Fri, 24 Jan 2020 06:33:39 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g62sm3140057qkd.25.2020.01.24.06.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:39 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 22/44] btrfs: hold a ref on the root in prepare_to_merge Date: Fri, 24 Jan 2020 09:32:39 -0500 Message-Id: <20200124143301.2186319-23-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 990595a27a15..53df57b59bc3 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2474,6 +2474,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); @@ -2486,6 +2488,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 Jan 24 14:32:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350409 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 0B416924 for ; Fri, 24 Jan 2020 14:33:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DE3282077C for ; Fri, 24 Jan 2020 14:33: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="Z7hImNwU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404575AbgAXOdo (ORCPT ); Fri, 24 Jan 2020 09:33:44 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:36559 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404547AbgAXOdm (ORCPT ); Fri, 24 Jan 2020 09:33:42 -0500 Received: by mail-qt1-f195.google.com with SMTP id t13so1233975qto.3 for ; Fri, 24 Jan 2020 06:33:42 -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=3pyxPNY94oOXrEeZK2hUi64+WTr11ylLgHcJGK8aNDE=; b=Z7hImNwUK/4FaxbLR2CvrLfaN1Il2rKZRnwcOzAE5+iRLA6Vp1+wvzL9GM+hTbD2LE v/3gpZvh2oSwttW3VmYYwyiwsFX+1qJ9VsBL+CqGp0PVoBhRiFCe9owW6/iV+HtMJyKn jtv4IVBbOMh0amtKcYyVEjh+RedMujv4ay9KIwBOAzuJl5KAk4JzxEGso/l0ROl/iaLG JVRmlDIg53V+/v79va9s3ZDidtmoqDG9IqQFb67Ghll0szP2nufQK3eS1HQKsxjNYGrP jMiHrN1Znoc6GO4/xNyoEtI4pg+RWCluq7jIQjs7zo8eb9/0CmqQ7Wh1oh2M9j0wbEUf Dp7A== 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=3pyxPNY94oOXrEeZK2hUi64+WTr11ylLgHcJGK8aNDE=; b=lR4qtYTl66XLhpaHgn4EXWuR1LE89sVn0l1FY5Ras1YBQH8SrEx29joqXmX0aieG3Z uGIK+jo3ItlGgQZkX6WKLi/gwQVj8njKxNEyIuA7ibACocPciJ8SQAJ/PecVK8YXvfIk vW8D5vXnwKsHDlAAb5dDFJFND+F9QNLTSKJ8dHeqLqJF8OSRiHxCBdaIOiPtnekd3xgx 8GJIi9EoXWi7ze+z1W0yRx0LcYEMwNk/wsIze/LTgjRQIj16v817hbwhinRToWNF5Y4W S4p+hZ0P11mnlyvdtT866EQZl7cpIw4zNPG4upnHjja75cjcDs48rYea+ioDD31eHgoC WKIA== X-Gm-Message-State: APjAAAVa0vTAqypNWp2qkuwo01cMkE4LXGz/zJ4Aoqd2wNOglfKe3J30 Ffh3+VuOWXuy/d/jmnNg6U6Jrw== X-Google-Smtp-Source: APXvYqwSkKoIZOC7wuy5NLmuoNKeEP96bcv4eoin5FMJ613LlFq9Md/0qNLf82/sroFUAOZlQj9mAg== X-Received: by 2002:ac8:5313:: with SMTP id t19mr2448490qtn.375.1579876421456; Fri, 24 Jan 2020 06:33:41 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id l17sm3092912qkk.22.2020.01.24.06.33.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:40 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 23/44] btrfs: hold a ref on the root in merge_reloc_roots Date: Fri, 24 Jan 2020 09:32:40 -0500 Message-Id: <20200124143301.2186319-24-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 53df57b59bc3..79430a4245b5 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2546,10 +2546,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 Jan 24 14:32:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350411 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 C4EB7924 for ; Fri, 24 Jan 2020 14:33:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A358B20838 for ; Fri, 24 Jan 2020 14:33: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="jLWrc37V" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388237AbgAXOdq (ORCPT ); Fri, 24 Jan 2020 09:33:46 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:34907 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404571AbgAXOdo (ORCPT ); Fri, 24 Jan 2020 09:33:44 -0500 Received: by mail-qt1-f195.google.com with SMTP id e12so1651856qto.2 for ; Fri, 24 Jan 2020 06:33: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=b2Rhd/xiW6guBCO0svVDPB2riGJU48lMSVrOtNfEDqU=; b=jLWrc37VDoZ2+Wobl1zS9IPMImBQEE7c1Dif/AxyKp0TNsSrtyAsnZmHQp200gEqoX 5feJTbHeXOv8a8n1ySWF0Wh5kSsjY7GJiMn9RkzU78ggd6ZlhZNsAQARzaSFw9HNV6J5 xaGsArLivDdfDLiRmt+BwLy9ROhfFP4jyOTKI8OYtOnNZqplEnX14cg1yI2jJlZNF0Iu 6lcHiab3JfhCAazlGDJ7lBiwzDr1HBfiRU0pSeKBjlbst7l1JX/bYEooHLvFuUEa5LUe 1RbGWbPW4yD2G5WuZbWWLRExF+4tBQpv+S3yvChpzTo+awE2Tphh4kgQqAVrYXqZmskV 4ngA== 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=b2Rhd/xiW6guBCO0svVDPB2riGJU48lMSVrOtNfEDqU=; b=qZOVOna/XhysS9C+eP1owKd5LLGyBqxNnnyz6OVu79rFIZ1Hm/amNraMsw0cOj3Lw2 elngbLXKUaJokxRlRPLtolyzSwMrqIUZfu6CZOX6XDVGK9n6R82pc5hLLKJilhc31Siu rCO5E3HM4fR9txW1j7uJXes8CSdM3tAjMbQIFaAPke8u6AM6mxeHOa8Z65OcnpM5/pJl WsvIMr+1o/kjwj+ylMp4qibNAdZIeHg6ddyW3MiwdfW63b6smQPM7nOBJyX9GzdAObYj eYt7TaXJclc9tHeGOnGco31q97jBfDemZnsC6OtzfJAjXK9w2TNLcelidwsE+x/MJ3uQ Rl0g== X-Gm-Message-State: APjAAAXNcLEBxoyF86ad7YkOG08WPBQaopbplCs3QpSN3pjHJWDfRYSa juLC+e9pO9Ypbe/IJLmUf+3SFA== X-Google-Smtp-Source: APXvYqzxzjGUQecaElj72n7cun27P7IS+wkS7wLkXnHdamOUCuFeFGYZly0lEVs6peuF4mRhWVT5Qw== X-Received: by 2002:aed:35e7:: with SMTP id d36mr2461020qte.363.1579876423091; Fri, 24 Jan 2020 06:33:43 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id a36sm3378760qtk.29.2020.01.24.06.33.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:42 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 24/44] btrfs: hold a ref on the root in record_reloc_root_in_trans Date: Fri, 24 Jan 2020 09:32:41 -0500 Message-Id: <20200124143301.2186319-25-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 79430a4245b5..9b61fdc89af7 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2604,15 +2604,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 Jan 24 14:32:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350415 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 0158A924 for ; Fri, 24 Jan 2020 14:33:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D397120661 for ; Fri, 24 Jan 2020 14:33: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="RK8txTPJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391955AbgAXOds (ORCPT ); Fri, 24 Jan 2020 09:33:48 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:46561 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404581AbgAXOdq (ORCPT ); Fri, 24 Jan 2020 09:33:46 -0500 Received: by mail-qk1-f196.google.com with SMTP id g195so2152463qke.13 for ; Fri, 24 Jan 2020 06:33: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=ZyvR/29E2jaJfcsrXDpaKI230YXqgH46fp1QGEE+fWU=; b=RK8txTPJ9CxzuPDb7pXtJPFg098AdnH2bHyLBafbqvw9r5K0SKrCFy4TImhncmmhmy o0ztnYTm+n38J29N6Y4ttf/rm705FfSA5SxbBmQx0AK9eq+SIfjOmo4KXfF9UI8bD01O iMMeLV0XZ/NV3+kcPxaYTwASDq6pDrMt9E8fr2BnZ+GbvlurH87QWHnKopYtkdHJz446 7oEdxLTHaxik9txGW55iT0NGaWsDrSo4rNKuliWFaUmSu5fqmbCL9hh546qnHfs4ZSF+ qtRHbUFYziMev95fS7W47ngi9oD8BmoigMc9vyvI8ZuMOwf4pCAx03JQ6DG4KA/6TH/B sljA== 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=ZyvR/29E2jaJfcsrXDpaKI230YXqgH46fp1QGEE+fWU=; b=moKCgT4zWqcoSJJfGTmix9d/x7l0KGQZe0eM+n97se7sWLaNbsudbCIEVd/1x2mRuF xyVqsKBd+pR5hfxgm0tEtNwrhnxhluO+q1PV++37+ToR3rtzSvYrptsv0p8zYnU4V3eA PcJ1mfboX2LlvXZgpOlOaevDA5Z2ffMNMKtMLRiPpHkuySexs8rORJBJbEIiqc7We5g2 Ff71gc57mN24nYnhZh2wkPlMOGBT+FE+XUOjk5U5yAtbs3hQ06KHxcKKHti395Jrh1Iz RNYB+8a83+nmXJjjr5RHHO2b8cxsqmJpVUc7ccx9fr/udgdhvRc8chzDCWmfEzfEPNbJ ZdvA== X-Gm-Message-State: APjAAAWQ/M1k3AB3/fvByN4joK57WqSBvD5M5Jt12aak9fP2qSBTOwB9 1g1YXRw0j/cC38iWuxsQa6KEkQ== X-Google-Smtp-Source: APXvYqyjjPPUNyAMNj2Vd5H8Wao24Am+9qIE8vSir5mIb+RaB8q8UcgZ8ENZeNPfJDeFZ65rYNm2hw== X-Received: by 2002:a05:620a:20db:: with SMTP id f27mr2525339qka.78.1579876425367; Fri, 24 Jan 2020 06:33:45 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id a24sm3117282qkl.82.2020.01.24.06.33.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:44 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 25/44] btrfs: hold a ref on the root in find_data_references Date: Fri, 24 Jan 2020 09:32:42 -0500 Message-Id: <20200124143301.2186319-26-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 9b61fdc89af7..0c75ae09a3a8 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3708,7 +3708,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; @@ -3821,6 +3825,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 Jan 24 14:32:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350419 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 9DA5C921 for ; Fri, 24 Jan 2020 14:33:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7CF172077C for ; Fri, 24 Jan 2020 14:33: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="pI0u8lqo" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392067AbgAXOdu (ORCPT ); Fri, 24 Jan 2020 09:33:50 -0500 Received: from mail-qv1-f65.google.com ([209.85.219.65]:37878 "EHLO mail-qv1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391244AbgAXOds (ORCPT ); Fri, 24 Jan 2020 09:33:48 -0500 Received: by mail-qv1-f65.google.com with SMTP id f16so982820qvi.4 for ; Fri, 24 Jan 2020 06:33: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=Q0WxG9jK50p7ua/c+vZWCANharCGvbWEZUCcaKh7TSw=; b=pI0u8lqohtVlsg91IhfgCjms7/x9+fFMXAzkk7rHw19ZaK06upEAHvCjmlC+x9COk2 uN2kRNyX0u+676xbuIof8JX5QjwjIealpCuXtqWGdlMzJoCGKGBbiDt2EabTvNc+1Iii 9RSXREAzcBs8Zo+cgP4Z5tN4WyI8WoCnZI4Li7eQKfhK/WwLcNbkeF2zQyOlgBtmEcHd x+MfI7TJeOwZPbVfVREszyOs9juCcIZHqKis1OJyZS+kx/jDLfg2OECIGDGkrgkE+Uat 9srRoKrI0w7iAyYn3XOkUnk5NOfUgoCHEVS5JBvTVTE11SBxdQscqQS4GqHSqaGU9utp FyYg== 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=Q0WxG9jK50p7ua/c+vZWCANharCGvbWEZUCcaKh7TSw=; b=d+SJCHTH5O+fVhEzVB3CYHkcf9YWrKnT2cyPR6ezsPnltQkjAwGREliSmtIUnSZPOD o1istVrrPwrezl187mlFcKeR4IXvv5RHI/i4FukSQ7h/b22mXAmYJHJ/yshdKP4pXKIN utg9HjI38Qw86sPyxzYnr3Z3WFdzWn4PQInXvsF4rKVAGiIv9gBv2xwVlUw3LSWexucH TnEaBUENoD8rXzGM248J6AXpqNAbRy8rqa+LgXysf6JqYj5HV2AfekI8NkJok5rJkWXU 5JVxotXST+RaKCazKJb2ML8w3lrTUKXUxS2uPj1GyqfUmb2CymHvjmWMeWqS/yY5m2p8 ZPZw== X-Gm-Message-State: APjAAAWc8v49mZItfFd9wh36kvNMdWE6sVquvdMVAYEs8/fV37d7Wg+L rlO+hv24zlX28NuQhCZn5yZHDw== X-Google-Smtp-Source: APXvYqzen/8IiMSdMDzjK80CYOet/2PUqSs+B8kx6HbyFBMRByMaqJ8jl8LXX1hq7gPSOplYq7kOwg== X-Received: by 2002:a05:6214:a08:: with SMTP id dw8mr3036532qvb.121.1579876427715; Fri, 24 Jan 2020 06:33:47 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id h28sm3124214qkk.48.2020.01.24.06.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:47 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 26/44] btrfs: hold a ref on the root in create_reloc_inode Date: Fri, 24 Jan 2020 09:32:43 -0500 Message-Id: <20200124143301.2186319-27-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 0c75ae09a3a8..9531739b5a8c 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4308,10 +4308,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) @@ -4329,6 +4333,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 Jan 24 14:32:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350423 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 8FF8B921 for ; Fri, 24 Jan 2020 14:33:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6EDA420661 for ; Fri, 24 Jan 2020 14:33: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="sqjG/3tv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404571AbgAXOdw (ORCPT ); Fri, 24 Jan 2020 09:33:52 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:43073 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391244AbgAXOdv (ORCPT ); Fri, 24 Jan 2020 09:33:51 -0500 Received: by mail-qk1-f196.google.com with SMTP id j20so2170707qka.10 for ; Fri, 24 Jan 2020 06:33:50 -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=h2PRB5MkErkwZsCJkupV2sp4chKoTyeU5t+uSqL5pyU=; b=sqjG/3tvbCQtHBkWuCNZsGkDFfVdBMxDxL42daoXcopvohu6/44UO0KcyP3VY6l6s5 kQLI3jP+Z5ypuUl8iuTS1cYlPTpNsCF3KD8+FO29EPmGhsv2U1Ms7W7K2vZOqzrxeKR7 gA3pqHaNNl5YuAdq2t9N1QYxGptCLNm9rpv4nNbsbQSRQ8qAPuCY1f1djijSzxPKRExo DmcihXx6oZADZ/XdzEQpABYAEpNB0W92QrMSofBjpImPvEF6HPPTr8cASQWASwD+9sr0 iVdbKBOsHJvDf3x4yoCo089muV49ehECB9FvFC70i++pdhDGV4dE2RxeBu0eJG+c+YrN W/PA== 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=h2PRB5MkErkwZsCJkupV2sp4chKoTyeU5t+uSqL5pyU=; b=kBstiz0E+M6GLaemFL2Dmfq+oxgEdO/ZsDTciTFbJwGB20YBEBYtnBscMSU4+BgB5e OctY3pPpDmo4u+NnxWBwriRRX7K0VWshMsMQd4dne/Ii1Sab+mYmZ2hJkgM3K9cBeU3d dmYUxjzKwBBxIFZOC9BWz5Ym+4I7nHrzJo3C5CxeZWKudY0Bjnxm31TovzCgL6FvRYFv m4bRoI/2swA+fLyoF8ouErMrM7PKBnwovfLySzJdO3eZtUVePlPHfWCzFStZntJ2ofTt A/Qz9IVkm+yxBDHFaz5kGtxdWhcc/zK8oT09fiHX3HDQcJ3dXsChxBMOvnxpBW1rDBj0 +M4g== X-Gm-Message-State: APjAAAVhKiQO2dhF5mjnQoN9gKliJht7lTKEbrsLcU1g3VhfZhAjkOPb X0cBfnYgfFHr0dsKqYjnZCsX5ViwgBfSuQ== X-Google-Smtp-Source: APXvYqxHZv8VhqfXCOaCFganHAqZ4RbxtCZRisf5XtbBvrTxI1HcFhKNqlxY0l/WA3zXk8PaBiuZZw== X-Received: by 2002:a37:6481:: with SMTP id y123mr2757431qkb.53.1579876430304; Fri, 24 Jan 2020 06:33:50 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id c3sm3149032qkk.8.2020.01.24.06.33.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:49 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 27/44] btrfs: hold a ref on the root in btrfs_recover_relocation Date: Fri, 24 Jan 2020 09:32:44 -0500 Message-Id: <20200124143301.2186319-28-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 9531739b5a8c..81f383df8f63 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4593,6 +4593,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) { @@ -4604,6 +4608,8 @@ int btrfs_recover_relocation(struct btrfs_root *root) err = ret; goto out; } + } else { + btrfs_put_fs_root(fs_root); } } @@ -4653,10 +4659,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); @@ -4688,10 +4699,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 Jan 24 14:32:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350425 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 3E584921 for ; Fri, 24 Jan 2020 14:33:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1EE4721556 for ; Fri, 24 Jan 2020 14:33: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="RXM/JJLV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391966AbgAXOdz (ORCPT ); Fri, 24 Jan 2020 09:33:55 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:34924 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390591AbgAXOdy (ORCPT ); Fri, 24 Jan 2020 09:33:54 -0500 Received: by mail-qt1-f195.google.com with SMTP id e12so1652315qto.2 for ; Fri, 24 Jan 2020 06:33: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=vDbW1mrEYanbdYu0SIhgQpf/34kUYfIu/uyTtfNmUlw=; b=RXM/JJLVHWSon8V6Ync3PB6DUaFIcyRiKL2Oqv09eQeYU+yEs3McGYxJbAX0FX5Vj5 m27tFzIhrRBd2wFbd7Ul2OZYrDitzV1qBoJYWtwG/UBweHuNXgxZyzZhso7C1fU/xIQ1 fKuimzOanxKpimyharVMUv7leN5K2tsRqS8Py/QhGscoYr14uM7Pe9jR2TxRzL+OO7YJ NUhYHWXtU3P8jI0XM4VQohIZlbFt1fwYEbnFYm83BXVYVmHS0//04/QCdRfyFk4SKyDo Q9jtIsP3p92hXwJPGVgeE7YmBlKOid82vqJZdlD+YbNYHXcwu4jbJNhnTSx7Vf5bbpoV zlRA== 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=vDbW1mrEYanbdYu0SIhgQpf/34kUYfIu/uyTtfNmUlw=; b=DX66A6O7G7ovltrF2W0CxWC1i4Ww2EFOqJmjwd1p4dgjn03L8sSZ8LKxUCC6XPD7W6 WJQR/IKhTHO4X0nqRwoAmCufZ5UopfSTNGSKhDmjqDx5JQ/YjtnHF+za2PGZcl1w0E7m +7GOX39Qu5ttKjj7L0HCinTmzhXIypUSuv37NTpY00xc/8cXaKKrvH6XpThLVwlGCb2V O8uVnTMreOyG0LOOXiYRNxgAuyeZ7d8lFW5FzkK42oKDdc9mUohT4IHrXXU2S48JjNHl sI6bC+BECZtrrOsLDNF492ssXjP2QJAFyixq51uNAUulHpGABmAAbm1FVx3t2Dwr4iAc ZoTw== X-Gm-Message-State: APjAAAWKaVd1Q3x0V6bbLmjccrqf1hViJPJP30HEmSGyAwfr+4RaL1Jh 4fytF7z8CflKbNguEh5HEFMNynumNWys/A== X-Google-Smtp-Source: APXvYqxQRb3Ib/tKzTvINDTd2ruAGDgrHWtDAXo1Qmy/tL2I+Z92CEEbotGxSckZyEDvWhuRU+B1dg== X-Received: by 2002:ac8:33f8:: with SMTP id d53mr2386568qtb.86.1579876433249; Fri, 24 Jan 2020 06:33:53 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id x8sm3110350qki.60.2020.01.24.06.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:52 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 28/44] btrfs: push grab_fs_root into read_fs_root Date: Fri, 24 Jan 2020 09:32:45 -0500 Message-Id: <20200124143301.2186319-29-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 81f383df8f63..d166cc742f75 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -613,6 +613,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; @@ -621,7 +622,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 @@ -893,10 +899,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; @@ -2474,8 +2476,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); @@ -2546,8 +2546,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); @@ -2610,8 +2608,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); @@ -3710,10 +3706,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; @@ -4308,8 +4300,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)) { @@ -4593,10 +4583,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) { @@ -4659,10 +4645,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 */ @@ -4702,10 +4684,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 Jan 24 14:32:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350427 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 5AF34921 for ; Fri, 24 Jan 2020 14:33:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 393542077C for ; Fri, 24 Jan 2020 14:33: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="iOEQAvBn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392056AbgAXOd5 (ORCPT ); Fri, 24 Jan 2020 09:33:57 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:38922 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390591AbgAXOd4 (ORCPT ); Fri, 24 Jan 2020 09:33:56 -0500 Received: by mail-qt1-f196.google.com with SMTP id e5so1634124qtm.6 for ; Fri, 24 Jan 2020 06:33: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=ckTN1AcxkeHORRhsqXj7YNF2NgUrl9S+/nMmxj1pRCE=; b=iOEQAvBnyn+aYUc//5ejiB9XspOYTof7iP54CxzeGwdsbnizPlPz2vVOC5SDpXNOrr urxDGrOYcv3zaMxeiaDD5QP5pppGgI71YsVzlPFCAT9r4pLS21eVrIz4ZMJZhUNE1MID RqW9xhESbkJekmgt4J2AmRgpIsUJ+w2J851OltMgXkfpe0+ivCjUJUQwABItoBTN5Cfc nZIcHGvmbZaH2bZQfrHNv7zkIy6OAnszvbKSDLNA/SGtF42HDXMQrH77k7/oH2a9iYDk BAZEDwbilc4EyTDgKqOrviIIC1ZltHW5KQTGnae9xD7ATrTpojkma/VhIoruA7gwBiT0 hefQ== 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=ckTN1AcxkeHORRhsqXj7YNF2NgUrl9S+/nMmxj1pRCE=; b=DI+bC8IckjK469bKXza70YWyEqecm1MIAMyLqgCxFapwQ9hB5ZqORKsbjvxnVySPZu mAJPjgJiuTN2gsopVjblmn8hoqWAJ15LJiqN6TzapqMoDe2gBtWnKdDCiu73AiYqYYxH BfXMA920hcxxXJf4N8XaSepc5OtwyiLhwkqhV0QgaGmhIPljlZowMiV1ukO/meES0pNk Xy6CencAlexfi9Px71PhXwKuZ6OkNz6h9C6mqRMmQPIRg5LmjeyEsB+qkz6ZmGJZUgk9 sJqAUnbnmEqGRKB6oIUIXzblJlP2+vpVE7erf8NzmG6u8tHEawc5/UDGXOZBAP/K1Ch2 bJLw== X-Gm-Message-State: APjAAAXlx1kB0khJbUfePrDzjeW4Ib2VgS1pjSqLwdpd3ub5i468BLFU QJX7YXjKicq4QbJDgVdQll6bJw== X-Google-Smtp-Source: APXvYqw4g1iiFbL0xYHyAU2Ka6xuVYHwwxNHMxjzq8vflMSVKknh9TNgRze1Fz3mtNoF7NfSd8Yjhw== X-Received: by 2002:aed:2bc2:: with SMTP id e60mr2417628qtd.115.1579876434961; Fri, 24 Jan 2020 06:33:54 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v24sm3312374qtq.14.2020.01.24.06.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:54 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 29/44] btrfs: hold a ref for the root in btrfs_find_orphan_roots Date: Fri, 24 Jan 2020 09:32:46 -0500 Message-Id: <20200124143301.2186319-30-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 094a71c54fa1..25842527fd42 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 Jan 24 14:32:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350429 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 47235924 for ; Fri, 24 Jan 2020 14:34:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 26A0F2077C for ; Fri, 24 Jan 2020 14:34: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="EcYeQXXP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391201AbgAXOd7 (ORCPT ); Fri, 24 Jan 2020 09:33:59 -0500 Received: from mail-qv1-f67.google.com ([209.85.219.67]:45023 "EHLO mail-qv1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388120AbgAXOd5 (ORCPT ); Fri, 24 Jan 2020 09:33:57 -0500 Received: by mail-qv1-f67.google.com with SMTP id n8so970005qvg.11 for ; Fri, 24 Jan 2020 06:33:57 -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=4adHR5F024ZCFETalNl7qYodPCR2rclkM9ufEryDrI4=; b=EcYeQXXP+rfA0o6IxiKn8mmKQ4jK3Wqw/O2qSk6+yoKxLlDYJmSTxMFJZrPnJ4tC16 WenrTS51etCyB/hw+7S3F+pxiov1KHt4SklWCsgRzG5Rym6yIMuwTWUzADbndukID0WC P6YtxHm+KZEA2WZAVabYvRIC+GHYYqwhyZNmeuLGlq5lMXASxUShzgLRDJgBxPvM+O6g pQQhUpLGaxiPz8E6/ZR9EbmuP2hILXGrtf9NZwbMNZXtbvNUIFce1zmMz4rb3tN9w1Jt 4GuEZk/YtPrBZt6bLc9e+ygHQGXMSTtGVfr+IDRW9N3YYjv1bw1CfkrGs/YTX0dfEwVC R+OQ== 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=4adHR5F024ZCFETalNl7qYodPCR2rclkM9ufEryDrI4=; b=I4HohjKPe1awFEUWjhekuNcKoVhSvYvxgbvnA9adS4HqGzLlfOqfxwgjR7l/ul2+i1 flRvQaAtRmFJyTQqKHjY4dHjwi4E8aHFBs2EWgL2O7AbR0/9FyZ4xYVXK05abd5oy677 23b8QvMlh1Btu5rMwy+kadK+zCH1qkZ3nsHnub01C2oG7pxf2LgdQi4jRl2K2tb39k/1 oqX7RElSMvcmYmXTkVr9PSNFEYGvc4dcQsjNj/n/qB7VsMTo9un142HgCc7gYrE7zpIi yLQdprGzLrYxPJM3ePHdNmPqig25SBdqwFIEmxTZg3ily/Y3SYHLo4MpThoEhRBmu1EI PVuQ== X-Gm-Message-State: APjAAAX2y9LC0ok0d2s+M9yd+4Iw3MjEr/zBWJV/mT0YzAAxS2CqzEbn +nk+C2awYfH2V2Pc91+Ct26LTm9uAPYo7A== X-Google-Smtp-Source: APXvYqxr9CiTf6K0C9HJMYfbYUKUMoc2bS0G1chMiz1Lb5OjoaUW7cqRZg4uChnoD5AY8bYVN9zu7Q== X-Received: by 2002:ad4:496f:: with SMTP id p15mr2905547qvy.191.1579876436570; Fri, 24 Jan 2020 06:33:56 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id z5sm3309852qts.64.2020.01.24.06.33.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:55 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 30/44] btrfs: hold a ref on the root in scrub_print_warning_inode Date: Fri, 24 Jan 2020 09:32:47 -0500 Message-Id: <20200124143301.2186319-31-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 b5f420456439..f9ee327d7978 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -658,6 +658,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) @@ -668,6 +672,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; } @@ -688,6 +693,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; @@ -711,6 +717,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 Jan 24 14:32:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350435 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 150DB924 for ; Fri, 24 Jan 2020 14:34:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E309420838 for ; Fri, 24 Jan 2020 14:34: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="OIvCKI0X" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404593AbgAXOeB (ORCPT ); Fri, 24 Jan 2020 09:34:01 -0500 Received: from mail-qv1-f66.google.com ([209.85.219.66]:39341 "EHLO mail-qv1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390591AbgAXOd7 (ORCPT ); Fri, 24 Jan 2020 09:33:59 -0500 Received: by mail-qv1-f66.google.com with SMTP id y8so980197qvk.6 for ; Fri, 24 Jan 2020 06:33: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=FwNTEst1m2U3SR0GtEueCY9s2aSODxSlAQjE0Suamz0=; b=OIvCKI0XAUnZYIAEZSHe70k6bA83h9mkUyNAg3cnN6Ym5OTQRXfTXG5sRoYUe5XeI0 u2t1U4VsDWZyTdG5P05hABfnV8w/5SjS6VQzHtH6SDonxgr1tl8WvM9v6xd1D5dpxPU/ b2zjuaFuE5tV/QrQo36BbxJOKthMsjAbyost/qeH05f3g/ARuDyifsXtqs+NqXL1KmXY NySzV4iYK3RFRnLH4BuTNuDk+D06dC+cetHG5fSq6eYjQ0HPi5xy5HVWswXWxnaXOAFL rPrmwV5QrgY/11zfgg3be4fBwAR6FR4YaMG9MWN0Cjbgn1H6iDbkMk1ihXeNR3MGZk1e Ov1Q== 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=FwNTEst1m2U3SR0GtEueCY9s2aSODxSlAQjE0Suamz0=; b=WaUsCEZGWEva8Y/OFjAYbitT6Z81Ti51TLQPPmWm+e6hU5hio+h1KY92xiTGLm+dwr O8u93Xgsgk7bUVfZ70eT41oJfECPOBUKZmac3UeeQ1f3UzfHbcGp2ALp+/u2I9wlppDg MJepyh1f2IZBeeN70+vheryAIYuSLXx9z9Muu6pdF2dx02nmG3p/cziROG3u3p6Shmaa beBBKETKA1l9F08QH9zngLn2FZdslM7/z/844EDXerxOgFfPP4ElysOGflHaY1nEifmg WSRcEc5Ad0WCSVCOKBh/R1JWapMTWHmZEmLHJ55KjiQrbzvmTjECKcWrXgxSfpvKqUcH MkjA== X-Gm-Message-State: APjAAAU1GZog80TLoRwxs/ghuPLN0sXAEAw/xxoCqOOsI8zW8jc/eUuZ lV8Rxa+kZY9rpTe56UP872tNqw== X-Google-Smtp-Source: APXvYqzqqJ5e45355axcDm5ZgavQdMWfjVvAEHXQGY22H8/iU8crNWpRzuzk1B3sR1S0b/RftehLkA== X-Received: by 2002:a0c:c28e:: with SMTP id b14mr3101561qvi.72.1579876438131; Fri, 24 Jan 2020 06:33:58 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id d25sm3209705qtq.11.2020.01.24.06.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:33:57 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 31/44] btrfs: hold a ref on the root in btrfs_ioctl_send Date: Fri, 24 Jan 2020 09:32:48 -0500 Message-Id: <20200124143301.2186319-32-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 57eae56dd743..ee2fc9ea9d7e 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7200,11 +7200,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; } @@ -7212,6 +7218,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; } @@ -7239,6 +7246,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++; @@ -7266,7 +7279,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, @@ -7351,18 +7365,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 Jan 24 14:32:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350431 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 41837924 for ; Fri, 24 Jan 2020 14:34:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1FA8020838 for ; Fri, 24 Jan 2020 14:34: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="oRRHd2ZS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404639AbgAXOeC (ORCPT ); Fri, 24 Jan 2020 09:34:02 -0500 Received: from mail-qv1-f67.google.com ([209.85.219.67]:36871 "EHLO mail-qv1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404591AbgAXOeB (ORCPT ); Fri, 24 Jan 2020 09:34:01 -0500 Received: by mail-qv1-f67.google.com with SMTP id f16so983132qvi.4 for ; Fri, 24 Jan 2020 06:34:01 -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=v3jy/bucDHb1mxW6er9m37yXCMVg9C8Ly2cHcVVVXag=; b=oRRHd2ZSLlbBOFg70OvhtuuF1mK5Xpi38c2ky89qMMeEmYbOX7qS5iMWX/K9Vl0wYG 77rnxKra5OYP1DyERCg4zeerP6m/uqdT9fsVKwAmE3kdOhuExA5xrz+aK3vQMHBHcdqz 2UJftnNnK+kTsUyi+ZLVOiyBWr82UIoi9pr85vT4dhWIUKJRD6v92X+8LDYemiHhMO/k VtUeIc0TiwmUVNMW0yrOeDLMFezCuq2OzBQMjgAvXfq67r95Af+54RBLg1IGinecO/Bp zlSxUCy2mi+X+DW7v8f02SyAe2ovzSTyYkb/67Fd0GtI2a3sULexVQgvXgRRftPndvBT nWKg== 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=v3jy/bucDHb1mxW6er9m37yXCMVg9C8Ly2cHcVVVXag=; b=bIHn/+9Pmgk3NvIeVmFQzi1xZLQ8FfAOAQtx3+BZolKCqoZAhQrviqdN5leopHN3bu 8M2bXSUjD7MF3qOv8M7tWq8nTkksBh0FRlxCUbpuzxTXIAVo43u9uA2yw7ru7hgpO9/w lQXPaLvpkxh72YASaKcUIDQQDL4XFNQNsWOdBBQNkjYZMbW5MdZTrr9hINnHcXEzganx eSHW1Kk0iPYm4PsqYzQhLG8YxMoDK6QiKTKG9LgQXQzRh3iYT8uyBCtO0D/mYSYhvg6V HZ4t41DYIogMk4dOHjA6NUofKGLJ1Hv5Oy9jafw+bbirybJGc1pXPZ4PgOpG+cx9eo0I mhrA== X-Gm-Message-State: APjAAAXyGXMy9gTkTKawvCuzEZU9+N/+iJmP6vvjs30IqTnw37bvEZIJ JHfNqmjmEtvyPjv/TEw7mUwXsWaBnmJZLA== X-Google-Smtp-Source: APXvYqyiIDv4PxTtwydJWapt/rMVhGeDIZ8/nsp2JjS0CRt4mtSKfWcPMScrQrF4RcJRESYTjHI1aw== X-Received: by 2002:a05:6214:13a3:: with SMTP id h3mr3060286qvz.212.1579876440654; Fri, 24 Jan 2020 06:34:00 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id f28sm1336368qkk.130.2020.01.24.06.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:00 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 32/44] btrfs: hold a ref on the root in get_subvol_name_from_objectid Date: Fri, 24 Jan 2020 09:32:49 -0500 Message-Id: <20200124143301.2186319-33-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 3118bc01321e..5c3a1b7de6ee 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1101,6 +1101,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 @@ -1113,13 +1117,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; } @@ -1136,6 +1143,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, @@ -1143,6 +1151,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 Jan 24 14:32:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350433 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 915C9921 for ; Fri, 24 Jan 2020 14:34:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6F2C82077C for ; Fri, 24 Jan 2020 14:34:06 +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="0g/gx1dg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404652AbgAXOeF (ORCPT ); Fri, 24 Jan 2020 09:34:05 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41320 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404591AbgAXOeE (ORCPT ); Fri, 24 Jan 2020 09:34:04 -0500 Received: by mail-qt1-f193.google.com with SMTP id k40so1626277qtk.8 for ; Fri, 24 Jan 2020 06:34:03 -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=P8XNEd0C6kBDH9BTgE6tDYjoHWT0SVgdH+Usr5cP7to=; b=0g/gx1dgwNHzqi4wwSS26fAO0jw77NAiVOHl+LOEnWlG5P1SsLsrPlY63EMY7kndEb BHdpeVX1hQmmyRreur3N8STsTSGmlwDg827Sc/fVn8N9oGTmT4uU+xHbQ6Q9QaaSLIl/ McjQFa6nJdLZDe8g62Ua4AFt853NDno/2RbMqgNsdCcwjg2LC73oDc/+VmsL4R5Uq7qH Cu/gTW5xk+Rft0TjGE70qMpGaDv+NAbrPN5VbFmGOZPcHKsoS3ZZzOfWaPHcfKaS0OF9 rjZhMZ46dMSrPl6fydTbC/Nx7auZrWg1kaURfT6stcNOJsawzeSENfnmcDDLjdYHILMg DVIA== 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=P8XNEd0C6kBDH9BTgE6tDYjoHWT0SVgdH+Usr5cP7to=; b=Pe8jgw8eHetCA1J69tU1todrRimwH7YoNrbmVXrJGj5baPXN7Ri0gV4vD/3A10zoMg s2gust/WkNrSqFCra5nNCVM+/2BW82s0Ss1TNRNaNGKjfkriaTNpMNjnFiYBy4kLBHOC 3RyiwkzL1DjjUyaK/FhwAmb+z2CAubei41IZVpxB/C8h13Rr5kqdGxjV3K1vPXQAxP01 Ytvk4sMp0dVBezHssH6Ymh1nPN8Kko6OUIxcQkg0f3uP6AKQTO14B75GMVzoANygKX0X eftbNZalfqA3Nn69EMijL/0CyzWWh7IpipYsKfJdL5fEut6Y6SaKtgf+iTijDS1G8un3 qSfw== X-Gm-Message-State: APjAAAUj4doNA2m43OITRgj9O8NppiVwnyWrir2VDU0MIiD2Ir1ZcnpP SnMi5o4tbG4q0i2mUX+3dm+usNxh7/qEOg== X-Google-Smtp-Source: APXvYqwMd+KVSXEQUvJRXBccI5KiegcjSKmTcOn0UDlNeeQkzw3bYvfNA7nqkCykatKlFeWoGWDatw== X-Received: by 2002:ac8:689a:: with SMTP id m26mr2435703qtq.68.1579876442929; Fri, 24 Jan 2020 06:34:02 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id k17sm3080360qkj.71.2020.01.24.06.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:01 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 33/44] btrfs: hold a ref on the root in create_pending_snapshot Date: Fri, 24 Jan 2020 09:32:50 -0500 Message-Id: <20200124143301.2186319-34-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 69c39b3d15a5..47953d022328 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 Jan 24 14:32:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350437 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 E3165924 for ; Fri, 24 Jan 2020 14:34:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C1B84208C4 for ; Fri, 24 Jan 2020 14:34: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="DHfDZgaS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391785AbgAXOeH (ORCPT ); Fri, 24 Jan 2020 09:34:07 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:45237 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390638AbgAXOeG (ORCPT ); Fri, 24 Jan 2020 09:34:06 -0500 Received: by mail-qt1-f196.google.com with SMTP id d9so1608358qte.12 for ; Fri, 24 Jan 2020 06:34:06 -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=pM6Baxg4dx7swLymggU9GXTkL1FxfAoUeQLO3SfFwWk=; b=DHfDZgaS8S61ib5N78m7kcAXlLUdR7Y2wUETQFaxB0nWBslwR/xcZpFReDvh9/Gyzr OgocaT42DWiB8MYGv1TfcRsqyMPS/65UUt2wHEyTf9U6DLGZ65SLMi99vDrtk3VITPQd BgDzv+M9eN2/I3IW+DY7BSa4CdR5kqVw6Gb0/rYWMNy6i6Lwc7JDOFyCw7ZK0nB6rfdw QdtlWDxZSkvYREIUrzLb5co45TYrp+5zqMPbw0xh7p7e4SAhrNvXB8cmjXI7Jc3o/atH FrR2NMZrfYbgxHvPEjimJYNKHi/WIRA0EgcWqvLuyKYXV0KV1+Ge147voT7CTWh+fLO+ oURA== 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=pM6Baxg4dx7swLymggU9GXTkL1FxfAoUeQLO3SfFwWk=; b=YKMgtTOJYVy6+r0GcoqPzfUDmd/2eBplR/CqbM8dp8py178EiyZIlJC7YVC8KQI4St V3F3wYZDTEJQky160tHmEc6RO/2JYpkH90kHUeLUeXB1qz9/8Pbjc12v3vCBCU6VNDrR 2v8P78QZcYKhlH99qWsrf+fN5isnh6DqCc28TqEleo8mXVk8i22tcgkqVobmTJfkTH4Y 1dAe783An794TwC7gAuDK/hwxZpLnEYKYEg3Bv22AqSrO7UA0pV9cCPf+19TK8QqC07c obPt3BI5i3mHzu3scnHBBBOLFIOYWOustuV+K0v1fBPrDjiKzhNnduupWKSquXUYKNuV YPuA== X-Gm-Message-State: APjAAAV+qcIGfIrD7/dgM8KJ/dxFnyUZFuPPAO8v2q9euuISbr05EI8L 91SYxhbUYAl538iaO61o634jGw== X-Google-Smtp-Source: APXvYqxWBFzqLxVUQu7YxmtFNmIZaSLtese8uLIrJ0A/9QCkEY15vsOEK/3MtIQKz9C+0PCH4HrH0Q== X-Received: by 2002:ac8:148b:: with SMTP id l11mr2427109qtj.390.1579876445484; Fri, 24 Jan 2020 06:34:05 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id k133sm3198078qke.134.2020.01.24.06.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:04 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 34/44] btrfs: hold a ref on the root in btrfs_recover_log_trees Date: Fri, 24 Jan 2020 09:32:51 -0500 Message-Id: <20200124143301.2186319-35-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 db803765b500..5b05419a0f4c 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6114,6 +6114,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); @@ -6170,6 +6174,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 Jan 24 14:32:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350439 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 8FF96921 for ; Fri, 24 Jan 2020 14:34:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6E783206F0 for ; Fri, 24 Jan 2020 14:34:14 +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="aHknNs1v" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404667AbgAXOeK (ORCPT ); Fri, 24 Jan 2020 09:34:10 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:42101 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390638AbgAXOeJ (ORCPT ); Fri, 24 Jan 2020 09:34:09 -0500 Received: by mail-qt1-f195.google.com with SMTP id j5so1625474qtq.9 for ; Fri, 24 Jan 2020 06:34: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=7dXPcLtcCSCDRGETr4vm+QgKm0KbD9S2RIf4ehLy/AM=; b=aHknNs1vYy4c796nT4joO5f+xrpJX44v66v4fQ/nSWRNNUqxqIR967pid6byoAIvRb qZ9YzUWhtmnXmuBkXEyQk6hgkquuhFpxImLh66aCqjJZFyeQKlBy+2r3fO3N+YC5NZ3b Glrkai+Kx/7Ee8A0ZbK4L8AJ+p8brqha3N5Iw/35syr98AGVIRtBeecY5cgCI9DWJ4/U 2eN5J4aPTZ6XNdhnk9MdIOuTxn7LW4nqi5JYuPR0wuLaKEGJ+o6A5uoHJqIp/ApsBtDl 0lpDp6BDLqTyhc2uitUnKGIlo+nQIyGu5a683TKtlkjrqDUux8Zdkr/WHOh8jtt/Kkby b5lg== 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=7dXPcLtcCSCDRGETr4vm+QgKm0KbD9S2RIf4ehLy/AM=; b=ObPpy6dMfiZTfDrmc1m2IZne0kxq3O4bcXxtj1IXv2FES1+59powqCL+O5K40CsCB2 cW4HovAbZp3zniOfxRWvgYqV6AgcKcr1cDsSKrTnZfWiun844iEqp+ov7bn+64bKeObW S0mdap69y8SGCz8r99h6tnZsSjL3KElxQyjpjtfTMwsKjLtfm5nV8QqIqmPkJbjrVRqc FL2FvaYOoyr/zDui7mfdOWq8U9so/ksCMPWG5DD9MnhYJFWr6E1UbS7VGprHkTajRxDe uLyldcwxJGdPNEDFEpWVed02Q0EGhuUpicQLLzB8otK3gw/OuxySGwAxBQJrzaZNtyHM RImw== X-Gm-Message-State: APjAAAXH+wUnL+hsmeHTiSIILGc4jnLcW8BR/kb/+F+uhMqqERItDYbF gceom9KGdKcaqRobq+LJtUrK2Q== X-Google-Smtp-Source: APXvYqxPepp8gJYxm/GoWW3ZccToAAQWSTJl8A4cIxMPR5/GN+Nz0+Dgt2iDFPFzeNP+aOp/VuyWkw== X-Received: by 2002:ac8:43ce:: with SMTP id w14mr2366286qtn.256.1579876448040; Fri, 24 Jan 2020 06:34:08 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id t29sm2995410qkm.27.2020.01.24.06.34.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:07 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 35/44] btrfs: hold a ref on the root in btrfs_check_uuid_tree_entry Date: Fri, 24 Jan 2020 09:32:52 -0500 Message-Id: <20200124143301.2186319-36-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 ce3eff93c366..527b0b41ebdc 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4382,6 +4382,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: @@ -4394,7 +4398,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 Jan 24 14:32:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350443 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 D9FE9109A for ; Fri, 24 Jan 2020 14:34:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B84BA206F0 for ; Fri, 24 Jan 2020 14:34: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="CXb2dltM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392016AbgAXOeP (ORCPT ); Fri, 24 Jan 2020 09:34:15 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:43722 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404665AbgAXOeK (ORCPT ); Fri, 24 Jan 2020 09:34:10 -0500 Received: by mail-qt1-f196.google.com with SMTP id d18so1619568qtj.10 for ; Fri, 24 Jan 2020 06:34: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=gDXEsKWmN9OUY0khkSOaMhJZiAuwsok1866a6a1RcM4=; b=CXb2dltM7fNjKeqszjuW4fAsK1NEqjk2+J4JRs/cpXEVgF1xxCsIDnAOEQE1815nIr 7QtfCNxq8sAYTea4IcyRPz94ipgPr/lUvi5wYeOcXYLQICbAzAVWvXlCM4z3pex3z65Z YT7elYrHWXg8W6WCWRLtCPyvILkvvZDvwnmG0OIXrO748Mp3knCMmCygK+fO25DcWm+z gwjV0Lrp49EBzEE1L4y9+8Mm4Q/+G+086qx9VbIteQ7jrp/GEw9Om56IbBjWJmRtL5GZ YY+d6vY+jARRLjk1OeFgS9xTzUqkI90snGLPSQNwjnrP7lnc9+JNiaKZIHzxMIoLQl5v g4fg== 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=gDXEsKWmN9OUY0khkSOaMhJZiAuwsok1866a6a1RcM4=; b=jpJvxU3w/kztV2QAfjdlxQuCBz2lsUmI6BaWUL2AzqOvYhyTyX7qg+mj1a0hmJv2d0 +x9try+jk+WFzI1z2ou5qu/mC2RnwYVKKByxGDJb3EqeDfvpftMWYDBUuK/XNZMlLX4u hhQY1wD6e2O0Ex0giYDdjTt2m+QcAjR86qNC5kPbUcMS3RGJStMjrEmzE0kKWZtg7yRX yaSQhZvuvkZO2wzpZyPnbAqdmoXWcAH/CGaj1OZWiQyy7AsStXguLcyZbAVi+1BYuwQq d5yo82DXcsHJg9mtuboZHAobxtg68GmCrbYOatffdcHAKDQQlSBIqskBZC0rCm3scMlZ eEqg== X-Gm-Message-State: APjAAAVihz+wIUS28aG368+oHHpZHC2BA1bc9UWb0w+IN0zPhQUIGFdD uVZnb7uIBtG/RunNNzm5fiVV0Vbr4ZZ+dA== X-Google-Smtp-Source: APXvYqwQlfe0x6a2oEjsKJ2Rxo29po1s4CejJ4Ol4596iuje/2twXi8JmRIU7wwezKav3LB18greKw== X-Received: by 2002:ac8:5548:: with SMTP id o8mr2466561qtr.338.1579876449744; Fri, 24 Jan 2020 06:34:09 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id t38sm3485352qta.78.2020.01.24.06.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:09 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 36/44] btrfs: move free_fs_info Date: Fri, 24 Jan 2020 09:32:53 -0500 Message-Id: <20200124143301.2186319-37-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 going to start freeing roots and doing other complicated things in free_fs_info, so we need to move it to disk-io.c and export it in order to use things lik btrfs_put_fs_root(). Signed-off-by: Josef Bacik Reviewed-by: Nikolay Borisov --- fs/btrfs/ctree.h | 17 ----------------- fs/btrfs/disk-io.c | 18 ++++++++++++++++++ fs/btrfs/disk-io.h | 1 + fs/btrfs/super.c | 6 +++--- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index f90b82050d2d..68510af4cacf 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -2697,23 +2697,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 5f672f016ed8..c605be6ba889 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1523,6 +1523,24 @@ 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); + kvfree(fs_info); +} + + struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_key *location, bool check_ref) diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 8add2e14aab1..97e7ac474a52 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 5c3a1b7de6ee..0c81456df23e 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1580,7 +1580,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 { @@ -1603,7 +1603,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); @@ -2169,7 +2169,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 Jan 24 14:32:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350441 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 7D3D6921 for ; Fri, 24 Jan 2020 14:34:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5A5E22077C for ; Fri, 24 Jan 2020 14:34: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="t4QlFf9/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391539AbgAXOeO (ORCPT ); Fri, 24 Jan 2020 09:34:14 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:41335 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388226AbgAXOeM (ORCPT ); Fri, 24 Jan 2020 09:34:12 -0500 Received: by mail-qt1-f195.google.com with SMTP id k40so1626636qtk.8 for ; Fri, 24 Jan 2020 06:34:11 -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=Y98z689vOUInjSVPqNQnpoOFgpKnVs7895GrjYLrbYM=; b=t4QlFf9/vv/xp1t8Mj85TlpAL5MrKUMWgH/ZSlPIghRYcGvWilphuk6W2Srjl6hKvh Vn4SRQbSmEo0OgVp/1xrbsTSf+MP9KHbs7dL+Z9z3V60cpmO+avp3/My8PtQNCEgVKsh skL7iTgckMkYbdN1V8mw4gXJXXfuCmrwB3SS+vuCZmP24is8MfbafUsmpdpNMXa+/h8I jb4vS534K5NcUBlZX6atRwkGwurWssSzqTFljgatwUph549KmpcZpju/ibVMt7WmB4m9 Bp6qRDBt7eFkAlNhgXxf2y2Kmuuj+O2dTyvmWWWH4KQrsBtgy4Hb4NBXFXucJKOYYiDp aPag== 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=Y98z689vOUInjSVPqNQnpoOFgpKnVs7895GrjYLrbYM=; b=YCqDIEaNqUMzTSXLZkJqkfoUDG8s4aAgunG0hmopUxALhzCmbQqfLKxoXIjUvHGxw7 FzEiyuwM2lEptjGaJirTf3mcMnI0+VrarA0MI2L+hvMqAPnxeibB1Pbs2Z4ZigNnD20Z Oji5nda3/4C0dvIgfXTZoG/k086UKbyOEWVJ7h4wZlurGoHxwDKx3xdbVoLgdVbPmSja Ufd0T5qLSTzJetXveHaOcZl1upPRUquPLG8yKHOB3+5m3gJEZo15C1BGG/zaa0MjDndV l/VIaXj7LXHtMN5TLmVABdZmhzFVXVBhEwO7UBElDhMtpNjZkJS0SaNBuwefEgtxDyUw pvsQ== X-Gm-Message-State: APjAAAUNyI3gGtfj5WY7DoSE6bkgUtqBft+44aJnSuOmXAd1gJtHkoqa Lg0NEgoXWPMUr15lZ8B59C4cbFGChr7zwg== X-Google-Smtp-Source: APXvYqxUYnChIyAR1kNyqwLGkxRS5P8SGzzFfBLbT63cFyyOtSkdpbr8WJGGjMBVl1S0b3dnp7hOyA== X-Received: by 2002:ac8:4244:: with SMTP id r4mr2373583qtm.169.1579876451451; Fri, 24 Jan 2020 06:34:11 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id w23sm3188164qto.97.2020.01.24.06.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:10 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 37/44] btrfs: hold a ref on the root in open_ctree Date: Fri, 24 Jan 2020 09:32:54 -0500 Message-Id: <20200124143301.2186319-38-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index c605be6ba889..433c29ddfca7 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1537,6 +1537,7 @@ void btrfs_free_fs_info(struct btrfs_fs_info *fs_info) 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); } @@ -3203,6 +3204,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; From patchwork Fri Jan 24 14:32:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350445 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 6069B921 for ; Fri, 24 Jan 2020 14:34:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 320C4206F0 for ; Fri, 24 Jan 2020 14:34:17 +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="cEAC4IfT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390119AbgAXOeQ (ORCPT ); Fri, 24 Jan 2020 09:34:16 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:37311 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387506AbgAXOeP (ORCPT ); Fri, 24 Jan 2020 09:34:15 -0500 Received: by mail-qt1-f194.google.com with SMTP id w47so1641556qtk.4 for ; Fri, 24 Jan 2020 06:34:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BKRM1g67Pfr98mDQPNb6bIGdHJzZfFefgMZbElHLyuk=; b=cEAC4IfTJyqxq8DuVukzdrZlzW98HsJq2mwUQL8ayIW6SmkuPaenwM/kTddMb3mS5u 3l+uUDon3MEo9iqCwTxehl4bQGWkb4UlfCLA+IvGwzb0ORi6Fx3/ThHhNsP1WNCLB5tn PyjdJWRYpXZog4b+PAzLlsW7DtTxR95vR/cHYOAYqrkKReWOr+hGyzL3PfKNOICHbWvH xYX3dk6TwlYMcJEsFnX+fPJmYpg+nE998y07t46mL1wouf7crLAfzh12SvF5Tc8aRIjJ RqWM6zs3cXi+Ks+/fMJRxqwzowmOnKGKkbGruyUNmO4V103i2S50E/D69bYI7uP2JtB2 1TbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BKRM1g67Pfr98mDQPNb6bIGdHJzZfFefgMZbElHLyuk=; b=OxTKe09jnTcwP008ADwxpVeuJ196SDLiczPN/bRySeYT00xJMGaRive/Ehn8LqfRy2 aGP+sLWyreR1t8KV28mTU/k+KldRg563GHI9ZxAnubOpWOlGVJXhByaXzpVLckSZb1Br 21kRNUIKadGy5aJEarBilLNNaULyoIXy5pqDsmB6lo679Shiq88rUkHk0l0g5tOrCjwM ZF325J6+Ev3vdH8FT780fUiHR38meZGX/vtyTtdtRFaUKVc/72oBVt241duE7vR18nXh 0Dcui7Ugmn4A+3hYEho8uaNL74E4Tmq1q/fKx6kGfNEIumxQ1gVycaEM9jQKYeRoKFQE Tn8g== X-Gm-Message-State: APjAAAWzgDfLFwjA7JxidLV0ep0LmGu5oBtP8azPNlCiCyF7vk776KPR s4+WYZSy70zXoHydPgHSGdoq5oQ7S3KLnA== X-Google-Smtp-Source: APXvYqzRreib0lksksIdgEqL6/nqDxr+Y6uCkd/7iyGZ5Rbz5THRwf97SaEzSeQtczDPHMeseCSB3Q== X-Received: by 2002:ac8:22fd:: with SMTP id g58mr2371837qta.125.1579876454038; Fri, 24 Jan 2020 06:34:14 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id d25sm3202786qkk.77.2020.01.24.06.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:13 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 38/44] btrfs: use btrfs_put_fs_root to free roots always Date: Fri, 24 Jan 2020 09:32:55 -0500 Message-Id: <20200124143301.2186319-39-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- fs/btrfs/disk-io.c | 30 +++++++++++++++--------------- fs/btrfs/free-space-tree.c | 2 +- fs/btrfs/qgroup.c | 4 ++-- fs/btrfs/tests/btrfs-tests.c | 2 +- fs/btrfs/tree-log.c | 8 ++++---- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 433c29ddfca7..fa721ca1e732 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1297,7 +1297,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); } @@ -1328,7 +1328,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); } @@ -1431,7 +1431,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; @@ -1527,17 +1527,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); } @@ -2223,12 +2223,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 */ @@ -2237,7 +2237,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 98d9a50352d6..0845e56a1672 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/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c index c12b91ff5f56..27f5b662d2cb 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -228,7 +228,7 @@ void btrfs_free_dummy_root(struct btrfs_root *root) /* One for allocate_extent_buffer */ free_extent_buffer(root->node); } - kfree(root); + btrfs_put_fs_root(root); } struct btrfs_block_group * diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 5b05419a0f4c..f06ad415faf8 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3284,7 +3284,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); } /* @@ -6138,7 +6138,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; @@ -6177,7 +6177,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; @@ -6211,7 +6211,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 Jan 24 14:32:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350449 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 80253109A for ; Fri, 24 Jan 2020 14:34:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 49D462077C for ; Fri, 24 Jan 2020 14:34: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="QyR4cpw5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404691AbgAXOeU (ORCPT ); Fri, 24 Jan 2020 09:34:20 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:33820 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387506AbgAXOeS (ORCPT ); Fri, 24 Jan 2020 09:34:18 -0500 Received: by mail-qt1-f193.google.com with SMTP id h12so1651001qtu.1 for ; Fri, 24 Jan 2020 06:34: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=ZiQjbwJ7NryblTjySfhGfvyrNO9cmH6e9y1g4xb0z7c=; b=QyR4cpw5ZeXVXVRsFqlqSx0ogYsssQbWb53jiyZPAqFRdDjtos7I3MHRWdtKQonVno ATp5xbBJGrinEyaAVXZTlW8UcUxtgqvB+6pbsjnSL+Zu/7y65pCz26rKWtJrLp6Ce5QV nikRiVH5OKcSfryy0/tjXz601raFlwObXVVv+OGFdm9ZrKBILt6W5RL45GILg58GlAaY Wg6f2vTaGsmNmD7sNXcH1U2yzSs9NpyfMKQPdri1tQE8sVJ8epmyWyiy2MECR5yaL2F0 f9EYntcTGKX4KglH13e1g8iciVKqK2VfTtuYHtXOl+7ntiqOs2rypwWJ10tlRpVoiJ+w /VUQ== 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=ZiQjbwJ7NryblTjySfhGfvyrNO9cmH6e9y1g4xb0z7c=; b=Adc6fUGI3EiFTbmlzuW4uIS8mDxPHm/qwf3Tj+MKUx8rgCId1TxpecVvc4UBqEn4J3 1UUpVzGSBzSOyjZJP3hq2lmhjIkVZ3cHxWLws9HB7/iMDzXsnvDRRzCZlFePBWDj8sXc oV9F444qkg8YqsIjIfl4pr3axFcYlaxab+XmPXpz3a5N0g/hc75n3oVnSp/z5ExBtioc 4Lc8oWDZDZsD1Y3M+ipOI8yGt6+kol2FEzMVoScNAqZDMEBm04HchhgrDbHKrgm/JsdY ayTcExQB1Osc9d8rjwssvsc1ws1t8scydREK+ChyODe1w+LBCJF9ZnHlFeFZrEALXbkz LX5Q== X-Gm-Message-State: APjAAAUY9iHb8MwCroEVgvOqAtnFYGZ87MtEDWJQ6aBWsVsUxJdrlN0q +nDprRScm5o3dtHz91+YPJKW0Q== X-Google-Smtp-Source: APXvYqzPHVU1ECOxzEca504I/66qg4l9N9CeRtC7H7InxujSFXDynmh41JfQngZVmoz/m7oC4yyozA== X-Received: by 2002:ac8:745a:: with SMTP id h26mr2310340qtr.320.1579876456583; Fri, 24 Jan 2020 06:34:16 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id o12sm1211976qke.79.2020.01.24.06.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:15 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 39/44] btrfs: push btrfs_grab_fs_root into btrfs_get_fs_root Date: Fri, 24 Jan 2020 09:32:56 -0500 Message-Id: <20200124143301.2186319-40-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 | 45 ++++++++++++++++++++++++------------------ fs/btrfs/export.c | 4 ---- fs/btrfs/file.c | 4 ---- fs/btrfs/inode.c | 4 ---- 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, 27 insertions(+), 105 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 fa721ca1e732..ac306807e5cd 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1496,6 +1496,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; } @@ -1552,29 +1554,31 @@ 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 btrfs_grab_fs_root(fs_info->quota_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 btrfs_grab_fs_root(fs_info->uuid_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 btrfs_grab_fs_root(fs_info->free_space_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; } @@ -1607,8 +1611,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; @@ -3204,13 +3218,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 3abc7986052b..682f21ee6034 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 85104886c1e7..c01dc2790a40 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5026,10 +5026,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 47953d022328..20861cabe6a1 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; @@ -4019,10 +3997,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 d166cc742f75..c08aeb83a8f7 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -613,7 +613,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; @@ -622,12 +621,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 25842527fd42..fca8334cb34d 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 f9ee327d7978..4f21f0b04a17 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -658,10 +658,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 ee2fc9ea9d7e..5ef4c6f75ecd 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7200,11 +7200,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)) { @@ -7246,12 +7241,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 0c81456df23e..8ce292a47634 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1101,10 +1101,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 f06ad415faf8..e7525689b1e8 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6114,10 +6114,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 527b0b41ebdc..4a922b9f6e2c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4382,10 +4382,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 Jan 24 14:32:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350447 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 ED4C6921 for ; Fri, 24 Jan 2020 14:34:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C1F372077C for ; Fri, 24 Jan 2020 14:34:22 +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="GOM704r/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404695AbgAXOeV (ORCPT ); Fri, 24 Jan 2020 09:34:21 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:34681 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390966AbgAXOeT (ORCPT ); Fri, 24 Jan 2020 09:34:19 -0500 Received: by mail-qk1-f196.google.com with SMTP id d10so2223962qke.1 for ; Fri, 24 Jan 2020 06:34:18 -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=W9bYrWIf26pXVM8x8x40i6bJMwAGF8hatl/9wT8cPGU=; b=GOM704r/J1VfUu06Q2SpnSgrPaD/jEJxDRI+7jWUxpngNmiNEBgcUKjNhKrqUO0o6B h5a6xJ1yqI9u6VJNj7u4vAsvGCbtnRtbvYX8m+3Ek1wLg8hD1CAedTnaKGYWru2dCVtO tYxEw4ua5LS6/JVU6Kt9QAEatJysLKRlf5InygHR5hgUtTzVT0HLxBxw9Iebw90H+bZ/ qlmB5B4P9bv0Bfpjbjad7JNuLWL8VWmKK/H6JxZi5bjvpybKU28zPmDfftDZSP4zMdKf K2DiApkE4ps+wKmAYwJ0mxYR6regye2H5HyowlmcS6pUZvh5phd5uVTWAKb46L3lYa73 KTIQ== 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=W9bYrWIf26pXVM8x8x40i6bJMwAGF8hatl/9wT8cPGU=; b=MLSc8joauP3gkSAHnL9yOOL9q/rxCoFpmRWZQFUxpiy0TzMXPvmZXJGNy+0iS9/8K5 bLeFFQWfWg9q+IXFM9uG8JORKm0jpBoD6nSYl2gPtPUpe9r8c9h4qC1wm5ZR45o5RAm4 Jo27Kw9+0LCSBEo0LGWyeLy/FvpvewhDP3XJPO8UqFiC7uSuC33/NWOhNNRoE5Uam8rt f46MPnSuNg9R4l9cS9aUa/3fbaDP1W54euDIsvMbbOKgKlfnCJ9BcifSYa2lLawGbK+L Gd8vyrl9Vp44tqcUu06rRLCayuFhxYdACguuBoqno4mIm51Oygwgn548gbaMlY47JAHD MXvw== X-Gm-Message-State: APjAAAU6LOzrMPs8qWIQD+9m3zRCWWr4b3zAeR8uuUu/PetKKze3eVtf hGwBRmY/9gWpxNsJc8BD+pfnCC8yvSmX+g== X-Google-Smtp-Source: APXvYqwttrEuR67I1l5jtqayUCFQgJ/seMyIdj9/2yGP2ApsbeZg9b98OWLHuwolKIzOKTooyjPQTQ== X-Received: by 2002:a05:620a:22d1:: with SMTP id o17mr2667841qki.137.1579876458221; Fri, 24 Jan 2020 06:34:18 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id r13sm3289642qtt.70.2020.01.24.06.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:17 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 40/44] btrfs: free more things in btrfs_free_fs_info Date: Fri, 24 Jan 2020 09:32:57 -0500 Message-Id: <20200124143301.2186319-41-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 ac306807e5cd..d8adc9c6d8ea 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -98,6 +98,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 @@ -1527,6 +1533,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); @@ -2882,7 +2890,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; } /* @@ -2919,11 +2927,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) @@ -2938,7 +2946,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) & @@ -2948,7 +2956,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); @@ -2992,7 +3000,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; } /* @@ -3008,7 +3016,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); @@ -3343,25 +3351,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; } @@ -4061,16 +4058,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 Jan 24 14:32:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350457 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 47431924 for ; Fri, 24 Jan 2020 14:34:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1BEF02077C for ; Fri, 24 Jan 2020 14:34:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="yCrwwUsR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404734AbgAXOeY (ORCPT ); Fri, 24 Jan 2020 09:34:24 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:38276 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404688AbgAXOeU (ORCPT ); Fri, 24 Jan 2020 09:34:20 -0500 Received: by mail-qt1-f193.google.com with SMTP id c24so1636481qtp.5 for ; Fri, 24 Jan 2020 06:34:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MGey6p1hUWXwXwi1c3MJ1yziUQ8/JK09+BGSrjgibj8=; b=yCrwwUsRSnIpJEvWas+jxhu1B9f5KvL7KGz8BJ4RSxto8nSd34noxdh8yf+yWdHiR3 7wa6w16SS4CgKC+b7yTtrN1exgFScDUcE7VxDKAx0sIvfbfns+JOd42qRAt70Ds3zU0/ NeBTafzAjKXZMoCEXqvKnqZU4LtwwFUTobpvi9qhR8DzWaBlYlA4Q0hqeZfPZyoYoasO ln3w8dq5aoUGkdK+j7mWMtMpIh0o0BCpUv/T0lDXqtjKji2e6pt4MwgQH1xPRbBDHYzQ 6IMjx2lgTJv+7scE6cDtIQgdkAhCHwLseEYYHdv2s/5RH+Yy3pSvNFiquW/S2dBf52WE PXeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MGey6p1hUWXwXwi1c3MJ1yziUQ8/JK09+BGSrjgibj8=; b=rdL/YfXEEVobIQTNtxxqS40rdlQwbXXsu2yYg89j+OyhXXrDEFsEvTfSYlilO42ocL 7ZS4WNCabRKnqkn2f678Vz7U+97ods5KNlGzwGuLyHiMmJ5fB2SqlyS8bIkWGsQThK2h 8Z5mP86eMZGy1bNml6z1RhUXGkgVzqDouyQjmVWmYwORVsXeb5YL+WLrkLTB7pg0Swy/ KoeexcaJC6ZbppKWlsKFZNq1VQkMqkolYgJBKLjEiJan0PSQHYW2lVQvIg3YFCgP8CU3 DMC7AVwkJ439mo6KNQEfTbhaehFT9vTW508Ucl2xVP7h7t0nPfa8W1oz2ayOfvnnQ89A cZ0A== X-Gm-Message-State: APjAAAVqsWq79H1k2TvP88vaqOERFsgOmwDvpuDXJ+u6+HUEqi+S33Cz a+tour8pso8RS/8wQyiIpeADww== X-Google-Smtp-Source: APXvYqxeU2z/mLFDJ2kio77eUWWAu5uJjHCnp0070Ac4cJUKai15OzQDsyTlrUfGf7KQP5fqrhRwyg== X-Received: by 2002:ac8:330d:: with SMTP id t13mr2305793qta.379.1579876459826; Fri, 24 Jan 2020 06:34:19 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v24sm3313160qtq.14.2020.01.24.06.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:19 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 41/44] btrfs: move fs_info init work into it's own helper function Date: Fri, 24 Jan 2020 09:32:58 -0500 Message-Id: <20200124143301.2186319-42-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- fs/btrfs/disk-io.c | 162 +++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 79 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index d8adc9c6d8ea..b7e4313bdc6f 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; @@ -2846,12 +2770,93 @@ 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) + 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; + + ret = init_fs_info(fs_info, sb); if (ret) { err = ret; - goto fail_alloc; + 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); /* @@ -3352,7 +3357,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 Jan 24 14:32:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350453 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 EBF63921 for ; Fri, 24 Jan 2020 14:34:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C0EAF2077C for ; Fri, 24 Jan 2020 14:34:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20150623.gappssmtp.com header.i=@toxicpanda-com.20150623.gappssmtp.com header.b="daRrxdof" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404753AbgAXOeZ (ORCPT ); Fri, 24 Jan 2020 09:34:25 -0500 Received: from mail-qv1-f43.google.com ([209.85.219.43]:36562 "EHLO mail-qv1-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404701AbgAXOeX (ORCPT ); Fri, 24 Jan 2020 09:34:23 -0500 Received: by mail-qv1-f43.google.com with SMTP id m14so987667qvl.3 for ; Fri, 24 Jan 2020 06:34: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=0hRI9eG70vsgDzAoHAfiq3AOAx6lVoPwzit0c3/1muM=; b=daRrxdofGv3HUplfvW2zEFFImxMlIXHbj9b7I4YsrY/+A54lEtPwN+9DAWcsS2RkER SKiDgewAL4MduNO1wvcf3iCzx6sgk1ot0GLoSeJhaD/8mqWy0S/86hWiNtDYIoWLlrZx 2WwmDW6wBJAk4bLYi/c0mrihjyXdg91jQr1gtH58pCOksZACCafvLSmc+euIrLouduNB Tkdsu+XqB6OMmbxteb654U5Ym03BY7uhvBc3YmWP4RiURvLuOxFZL1a8f9ErpycY3RHf lJa3IAC8em0zowtRd7exoaMVhLc/PaDQCBOpTY7EviIc9NVAcG6hTm4IJaKBNg26r13Y VKwQ== 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=0hRI9eG70vsgDzAoHAfiq3AOAx6lVoPwzit0c3/1muM=; b=sJ14xf4p8lq9QLh+aOgTz6tBdxsnEA4pf4DIqKtDyfrfB9O32N6Jswd+mqc3fldNxj XDjFknTXkNjXp56mzgwQFFesn3v/prmyiebXdh+cJUA9tZwdCw4lvPnQIMX7DuQRW9S4 micAvC4yUkONQ3vfrkFWIsdXQOlQ7MoR6iYkyqWjHDUibPuOtZmQtuRHGzkrvuy+DGeN llizggjxsJW8NtPxVeqngphqpmjJuHd+DNNq5mpSdKaXKoY4UFldrN4gZNJudvZS5ie8 qsRHhGqKs1fc7J/AEEv26kJ5mfrJprbEBa2rvi1uk1bmjg4bqk7sqAcMKevapgkw4gtw FPIw== X-Gm-Message-State: APjAAAWgHpLOscZiHv+ZNdP6xgIp2tl8RnZhaNQkpz+OqtqjLaCNO/6Y WuJiXReth9YyWd8S9SkqOHe0mA== X-Google-Smtp-Source: APXvYqxtknMZeJXknBpS8CqLwXXqNVpDiz57O+UPQ1ZoQ2VYcqcaHA97zS3VR/RaPLR1L071vRb9BQ== X-Received: by 2002:a05:6214:13ef:: with SMTP id ch15mr3017819qvb.183.1579876461426; Fri, 24 Jan 2020 06:34:21 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id r1sm3363204qtu.83.2020.01.24.06.34.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:20 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Subject: [PATCH 42/44] btrfs: make the init of static elements in fs_info separate Date: Fri, 24 Jan 2020 09:32:59 -0500 Message-Id: <20200124143301.2186319-43-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 In adding things like eb leak checking and root leak checking there were a lot of weird corner cases that come from the fact that 1) We do not init the fs_info until we get to open_ctree time in the normal case and 2) The test infrastructure half-init's the fs_info for things that it needs. This makes it really annoying to make changes because you have to add init in two different places, have special cases for testing fs_info's that may not have certain things init'ed, and cases for fs_info's that didn't make it to open_ctree and thus are not fully init'ed. Fix this by extracting out the non-allocating init of the fs info into it's own public function and use that to make sure we're all getting consistent views of an allocated fs_info. Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 19 +++++++++++-------- fs/btrfs/disk-io.h | 1 + fs/btrfs/super.c | 7 +++++-- fs/btrfs/tests/btrfs-tests.c | 28 ++++------------------------ 4 files changed, 21 insertions(+), 34 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index b7e4313bdc6f..87bad959b1a5 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2649,10 +2649,8 @@ static int __cold init_tree_roots(struct btrfs_fs_info *fs_info) return ret; } -static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) +void btrfs_init_fs_info(struct btrfs_fs_info *fs_info) { - int ret; - INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); INIT_LIST_HEAD(&fs_info->trans_list); @@ -2696,7 +2694,6 @@ static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) atomic_set(&fs_info->reada_works_cnt, 0); atomic_set(&fs_info->nr_delayed_iputs, 0); atomic64_set(&fs_info->tree_mod_seq, 0); - fs_info->sb = sb; fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; fs_info->metadata_ratio = 0; fs_info->defrag_inodes = RB_ROOT; @@ -2722,9 +2719,6 @@ static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) btrfs_init_balance(fs_info); btrfs_init_async_reclaim_work(&fs_info->async_reclaim_work); - sb->s_blocksize = BTRFS_BDEV_BLOCKSIZE; - sb->s_blocksize_bits = blksize_bits(BTRFS_BDEV_BLOCKSIZE); - spin_lock_init(&fs_info->block_group_cache_lock); fs_info->block_group_cache_tree = RB_ROOT; fs_info->first_logical_byte = (u64)-1; @@ -2769,6 +2763,15 @@ static int init_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) fs_info->swapfile_pins = RB_ROOT; fs_info->send_in_progress = 0; +} + +static int init_mount_fs_info(struct btrfs_fs_info *fs_info, struct super_block *sb) +{ + int ret; + + fs_info->sb = sb; + sb->s_blocksize = BTRFS_BDEV_BLOCKSIZE; + sb->s_blocksize_bits = blksize_bits(BTRFS_BDEV_BLOCKSIZE); ret = init_srcu_struct(&fs_info->subvol_srcu); if (ret) @@ -2833,7 +2836,7 @@ int __cold open_ctree(struct super_block *sb, int clear_free_space_tree = 0; int level; - ret = init_fs_info(fs_info, sb); + ret = init_mount_fs_info(fs_info, sb); if (ret) { err = ret; goto fail; diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 97e7ac474a52..2414d572bc9a 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -39,6 +39,7 @@ static inline u64 btrfs_sb_offset(int mirror) struct btrfs_device; struct btrfs_fs_devices; +void btrfs_init_fs_info(struct btrfs_fs_info *fs_info); int btrfs_verify_level_key(struct extent_buffer *eb, int level, struct btrfs_key *first_key, u64 parent_transid); struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 8ce292a47634..cf8c49d06a77 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1523,14 +1523,17 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, /* * Setup a dummy root and fs_info for test/set super. This is because * we don't actually fill this stuff out until open_ctree, but we need - * it for searching for existing supers, so this lets us do that and - * then open_ctree will properly initialize everything later. + * then open_ctree will properly initialize the file system specific + * settings later. btrfs_init_fs_info initializes the static elements + * of the fs_info (locks and such) to make cleanup easier if we find a + * superblock with our given fs_devices later on at sget() time. */ fs_info = kvzalloc(sizeof(struct btrfs_fs_info), GFP_KERNEL); if (!fs_info) { error = -ENOMEM; goto error_sec_opts; } + btrfs_init_fs_info(fs_info); fs_info->super_copy = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL); fs_info->super_for_commit = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL); diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c index 27f5b662d2cb..683381a692bc 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -120,6 +120,8 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(u32 nodesize, u32 sectorsize) kfree(fs_info); return NULL; } + INIT_LIST_HEAD(&fs_info->fs_devices->devices); + fs_info->super_copy = kzalloc(sizeof(struct btrfs_super_block), GFP_KERNEL); if (!fs_info->super_copy) { @@ -128,6 +130,8 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(u32 nodesize, u32 sectorsize) return NULL; } + btrfs_init_fs_info(fs_info); + fs_info->nodesize = nodesize; fs_info->sectorsize = sectorsize; @@ -138,30 +142,6 @@ struct btrfs_fs_info *btrfs_alloc_dummy_fs_info(u32 nodesize, u32 sectorsize) return NULL; } - spin_lock_init(&fs_info->buffer_lock); - spin_lock_init(&fs_info->qgroup_lock); - spin_lock_init(&fs_info->super_lock); - spin_lock_init(&fs_info->fs_roots_radix_lock); - spin_lock_init(&fs_info->tree_mod_seq_lock); - mutex_init(&fs_info->qgroup_ioctl_lock); - mutex_init(&fs_info->qgroup_rescan_lock); - rwlock_init(&fs_info->tree_mod_log_lock); - fs_info->running_transaction = NULL; - fs_info->qgroup_tree = RB_ROOT; - fs_info->qgroup_ulist = NULL; - atomic64_set(&fs_info->tree_mod_seq, 0); - INIT_LIST_HEAD(&fs_info->dirty_qgroups); - INIT_LIST_HEAD(&fs_info->dead_roots); - INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); - INIT_LIST_HEAD(&fs_info->fs_devices->devices); - INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); - INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); - extent_io_tree_init(fs_info, &fs_info->freed_extents[0], - IO_TREE_FS_INFO_FREED_EXTENTS0, NULL); - extent_io_tree_init(fs_info, &fs_info->freed_extents[1], - IO_TREE_FS_INFO_FREED_EXTENTS1, NULL); - extent_map_tree_init(&fs_info->mapping_tree); - fs_info->pinned_extents = &fs_info->freed_extents[0]; set_bit(BTRFS_FS_STATE_DUMMY_FS_INFO, &fs_info->fs_state); test_mnt->mnt_sb->s_fs_info = fs_info; From patchwork Fri Jan 24 14:33:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350451 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 B7868921 for ; Fri, 24 Jan 2020 14:34:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8C46E2077C for ; Fri, 24 Jan 2020 14:34: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="q3hYjh5l" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404792AbgAXOeZ (ORCPT ); Fri, 24 Jan 2020 09:34:25 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:46691 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404722AbgAXOeY (ORCPT ); Fri, 24 Jan 2020 09:34:24 -0500 Received: by mail-qt1-f193.google.com with SMTP id e25so1610067qtr.13 for ; Fri, 24 Jan 2020 06:34:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qNkIDLz8dmJwsmcSo1YUMF9saa/zRtpXMZgX5nnqA1o=; b=q3hYjh5lLQj8jJDLF3M3yBWq4HTpHyR+4OP9Jrv8vYaktB89pxYfX1ZGgqasiHBMZk IxsdWAULQe66nDH4SK4AgYx9eXyknBZ3lavAkCjyTzUOzz6oaZb4KHn4A+Un0YZUHj38 iPkIoaxjbK+180StdBqyb5Vb9eEZrjK9QySnwmBXB2p6eSXxA7hY0VWJjygHRbf8+e6u NFK36Raq3EbElPsMxQG880vzo19Cn5l1tj8xW7BO3fgjEUhH8nb1GjR6vECw0ceAox5R 3vd2TZcKo8RxnCaxVfCDAqRgeGFOwIoMxbQ345hXNjOf243YUwUtlONk/k3sCVp1wtHL vtAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qNkIDLz8dmJwsmcSo1YUMF9saa/zRtpXMZgX5nnqA1o=; b=rCYzIwCOXXbIoHClWfhPeeVTxUbIqo3RI8MV5eeGyGfIemTT1oOlabboBw8xBbR6zh xNf7UJC3NQgM0FOt8W1KNJMcOfFbZG9zfmft1QU0Lf2UVXUQgvAtZ/SLaiGtfFz/C1p8 JNm/ZA/ppCqrwfZwkbsHuYHPZXiHaFQwSm+CEkrFX5Kj1c49Ck4w1cgdjJNWpn2d081e Il4pscT9WTmUkwkkM6Pe/0aMf1BD20bslXsJQSeDmq4vzrLo7jJkto2ZrP79Xs+44Pf0 56oJQSt4z5sCoSk019WQAV3639Jg7H2xKZqtw3QdZernSpq3ZMBcjueWpHIqr9UDuPzk B6Ig== X-Gm-Message-State: APjAAAXM3FP069JNIKM/dHtwhQTksS9sghNicH++rs7Kn9EZbau2+u/u zwoEOrj7nXwpr8CeRX7jt6ciyA== X-Google-Smtp-Source: APXvYqxZx8W6YkGA473S6aZ/Vn5lKAkD+s80bj1KTfB2l5jzPcsILcRMIaG3ToXuIDsephxLtuR0xw== X-Received: by 2002:ac8:7103:: with SMTP id z3mr2432520qto.172.1579876463664; Fri, 24 Jan 2020 06:34:23 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id g205sm3193796qke.16.2020.01.24.06.34.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:23 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 43/44] btrfs: add a leak check for roots Date: Fri, 24 Jan 2020 09:33:00 -0500 Message-Id: <20200124143301.2186319-44-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- fs/btrfs/ctree.h | 5 +++++ fs/btrfs/disk-io.c | 28 ++++++++++++++++++++++++++++ fs/btrfs/disk-io.h | 9 ++++++++- fs/btrfs/tests/btrfs-tests.c | 1 + 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 68510af4cacf..6006e10f371f 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -949,6 +949,7 @@ struct btrfs_fs_info { #ifdef CONFIG_BTRFS_DEBUG struct kobject *debug_kobj; struct kobject *discard_debug_kobj; + struct list_head alloced_roots; #endif }; @@ -1151,6 +1152,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 87bad959b1a5..c01cade1a935 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1202,6 +1202,12 @@ 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); + 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, @@ -1531,6 +1537,24 @@ int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, return ret; } +void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info) +{ +#ifdef CONFIG_BTRFS_DEBUG + struct btrfs_root *root; + + 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); @@ -1551,6 +1575,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); @@ -2678,6 +2703,9 @@ void btrfs_init_fs_info(struct btrfs_fs_info *fs_info) 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 2414d572bc9a..04a29f961527 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -39,6 +39,7 @@ static inline u64 btrfs_sb_offset(int mirror) struct btrfs_device; struct btrfs_fs_devices; +void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info); void btrfs_init_fs_info(struct btrfs_fs_info *fs_info); int btrfs_verify_level_key(struct extent_buffer *eb, int level, struct btrfs_key *first_key, u64 parent_transid); @@ -101,8 +102,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); diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c index 683381a692bc..609abca4fe3a 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -193,6 +193,7 @@ void btrfs_free_dummy_fs_info(struct btrfs_fs_info *fs_info) btrfs_free_fs_roots(fs_info); cleanup_srcu_struct(&fs_info->subvol_srcu); kfree(fs_info->super_copy); + btrfs_check_leaked_roots(fs_info); kfree(fs_info->fs_devices); kfree(fs_info); } From patchwork Fri Jan 24 14:33:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11350455 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 B6189924 for ; Fri, 24 Jan 2020 14:34:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 76CF22077C for ; Fri, 24 Jan 2020 14:34: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="fIMAPfvS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390896AbgAXOe2 (ORCPT ); Fri, 24 Jan 2020 09:34:28 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:32859 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388823AbgAXOe1 (ORCPT ); Fri, 24 Jan 2020 09:34:27 -0500 Received: by mail-qk1-f196.google.com with SMTP id h23so2228576qkh.0 for ; Fri, 24 Jan 2020 06:34:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pwT98NyoHcEdkoYoPohiJ5rfnemsZ70bGRkcgICPm7I=; b=fIMAPfvSHxoLjuN0rN/B2CYGKs54w0G+osDzSLrqJezvzbZZrl7ha5sMp8nPTqzD04 mT/0BMBqgw/cXICMQ3ns8fN7feO23HDiqKczOyQE9c/GK0qE+dM5jGLzB5wzf87WaZ7l EM0eHId3wnBCV38IfYpSlGTmk4TDXxDTxuvvLMkgq34CgggGinL/AfgmlYRTA6a5p+dy dDzNioNR6YntPGL4nucakaaw27awYCAnwqbhIbA5gXwqpSn3hCxt9GEcFZYO5EhKSIRL HiPAu9CxBTQctWvAYhkWf6uAYd5/gpDWRr3YARhWmBy7+92tn8xy79qaMUBUn5JgU8b8 vE4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pwT98NyoHcEdkoYoPohiJ5rfnemsZ70bGRkcgICPm7I=; b=KSzDZ1nu/RVFKJ+AOySZDo3QbMyb18W9ZWw42JxFYjTR1nuR/1OwNtj5TkXVeSjaNP oH/2f0w3fCjhX69qC8nkkcC1roeE5DxFM4MBUj9DBkt1K4gPW0XK159paSnvjEbNW0ui 046p3yx0CX1/gZQr+bJCXpU5G8oF+RoC0SAs97tV5QOLm3fHlogGIRb1hGsZ0qGxt7hB bJ6dKLHy0aaMthMbZ4y3BaAmUjok2vg0iA/DqRFwFkDWVpmj9Anjd0VKjoZw/UgjOmmv QPqPtSFlszZ+ndsEvBiTCkHrd5kgWyqbiJStakMf/bV2Ofq/MkYv8eOKTfhsb+Ib8sPL Y6iQ== X-Gm-Message-State: APjAAAVmLokL0fmT2DpN0o2h3/k5v1q0eXpfvqlN283Q8ZPDNlfohnH0 N6BK5ttbnayz5qq7G1bqXXLTMA== X-Google-Smtp-Source: APXvYqxQSHwd5ZBGi2ZN+/osfoqTWZeS+gxu617yNJqBrVeZpCUyzQ6L2YsJExGy6/FMGIKAnyIHHg== X-Received: by 2002:a37:6158:: with SMTP id v85mr2770848qkb.4.1579876465428; Fri, 24 Jan 2020 06:34:25 -0800 (PST) Received: from localhost ([107.15.81.208]) by smtp.gmail.com with ESMTPSA id v7sm3402129qtk.89.2020.01.24.06.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2020 06:34:24 -0800 (PST) From: Josef Bacik To: kernel-team@fb.com, linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH 44/44] btrfs: rename btrfs_put_fs_root and btrfs_grab_fs_root Date: Fri, 24 Jan 2020 09:33:01 -0500 Message-Id: <20200124143301.2186319-45-josef@toxicpanda.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124143301.2186319-1-josef@toxicpanda.com> References: <20200124143301.2186319-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 Reviewed-by: Nikolay Borisov --- 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 | 6 +-- fs/btrfs/ioctl.c | 18 ++++----- fs/btrfs/ordered-data.c | 4 +- fs/btrfs/qgroup.c | 4 +- fs/btrfs/relocation.c | 50 +++++++++++------------ fs/btrfs/root-tree.c | 2 +- fs/btrfs/scrub.c | 6 +-- fs/btrfs/send.c | 12 +++--- fs/btrfs/super.c | 10 ++--- fs/btrfs/tests/btrfs-tests.c | 2 +- fs/btrfs/tree-log.c | 10 ++--- fs/btrfs/volumes.c | 2 +- 19 files changed, 109 insertions(+), 109 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 c01cade1a935..62067f60456e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1309,7 +1309,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); } @@ -1340,7 +1340,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); } @@ -1443,7 +1443,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; @@ -1509,7 +1509,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; } @@ -1528,7 +1528,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); @@ -1549,8 +1549,8 @@ 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 } @@ -1566,15 +1566,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); @@ -1592,29 +1592,29 @@ 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 btrfs_grab_fs_root(fs_info->quota_root) ? + return btrfs_grab_root(fs_info->quota_root) ? fs_info->quota_root : ERR_PTR(-ENOENT); if (location->objectid == BTRFS_UUID_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->uuid_root) ? + return btrfs_grab_root(fs_info->uuid_root) ? fs_info->uuid_root : ERR_PTR(-ENOENT); if (location->objectid == BTRFS_FREE_SPACE_TREE_OBJECTID) - return btrfs_grab_fs_root(fs_info->free_space_root) ? + return btrfs_grab_root(fs_info->free_space_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; @@ -1657,10 +1657,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; @@ -2062,7 +2062,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]); } } @@ -2270,12 +2270,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 */ @@ -2284,7 +2284,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; } @@ -3882,7 +3882,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) @@ -3893,7 +3893,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; } } @@ -3917,7 +3917,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) @@ -3947,7 +3947,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); @@ -3958,7 +3958,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++; } @@ -3966,7 +3966,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; } @@ -4358,12 +4358,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 04a29f961527..db21ab614357 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -89,7 +89,7 @@ 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 (!root) return NULL; @@ -98,7 +98,7 @@ static inline struct btrfs_root *btrfs_grab_fs_root(struct btrfs_root *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 0163fdd59f8f..c43acb329fa6 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5416,7 +5416,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 682f21ee6034..8f44cbea6255 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 c01dc2790a40..cbbe72d0600b 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5269,7 +5269,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) { @@ -9588,14 +9588,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 20861cabe6a1..ef6c5d672860 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); @@ -4035,7 +4035,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 ecb9fb6a6fe0..64281247bd18 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -580,7 +580,7 @@ void 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); @@ -588,7 +588,7 @@ void 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); spin_lock(&fs_info->ordered_root_lock); if (nr != U64_MAX) { diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 0845e56a1672..6ae868eb9a17 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 c08aeb83a8f7..fe5984c6c5d0 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); } } @@ -591,7 +591,7 @@ static struct btrfs_root *find_reloc_root(struct reloc_control *rc, root = (struct btrfs_root *)node->data; } spin_unlock(&rc->reloc_root_tree.lock); - return btrfs_grab_fs_root(root); + return btrfs_grab_root(root); } static int is_cowonly_root(u64 root_objectid) @@ -902,7 +902,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; @@ -919,7 +919,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; } @@ -935,7 +935,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; } @@ -948,7 +948,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; @@ -958,7 +958,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; } @@ -968,7 +968,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; @@ -1017,7 +1017,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; @@ -1256,7 +1256,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) { @@ -2225,7 +2225,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); } } @@ -2257,7 +2257,7 @@ static int clean_dirty_subvols(struct reloc_control *rc) */ smp_wmb(); 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); @@ -2482,7 +2482,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); @@ -2544,7 +2544,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, @@ -2605,7 +2605,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; } @@ -2640,8 +2640,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); @@ -3114,8 +3114,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 { @@ -3811,7 +3811,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; @@ -4297,7 +4297,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); } @@ -4317,7 +4317,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) { @@ -4589,7 +4589,7 @@ int btrfs_recover_relocation(struct btrfs_root *root) goto out; } } else { - btrfs_put_fs_root(fs_root); + btrfs_put_root(fs_root); } } @@ -4643,7 +4643,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); @@ -4679,7 +4679,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 fca8334cb34d..f2a59ec6c1ce 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 4f21f0b04a17..cf35bb2e9401 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -668,7 +668,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; } @@ -689,7 +689,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; @@ -713,7 +713,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 5ef4c6f75ecd..95aa0d54abec 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7205,7 +7205,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; } @@ -7213,7 +7213,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; } @@ -7269,7 +7269,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, @@ -7357,20 +7357,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 cf8c49d06a77..d421884f0c23 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -1113,16 +1113,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; } @@ -1139,7 +1139,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, @@ -1147,7 +1147,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/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c index 609abca4fe3a..69c9afef06e3 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -209,7 +209,7 @@ void btrfs_free_dummy_root(struct btrfs_root *root) /* One for allocate_extent_buffer */ free_extent_buffer(root->node); } - btrfs_put_fs_root(root); + btrfs_put_root(root); } struct btrfs_block_group * diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index e7525689b1e8..e4e53d38cbc1 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3284,7 +3284,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); } /* @@ -6134,7 +6134,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; @@ -6170,10 +6170,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; @@ -6207,7 +6207,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 4a922b9f6e2c..c72fd33a9ce1 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4394,7 +4394,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; }