All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Qu Wenruo <wqu@suse.com>, linux-btrfs@vger.kernel.org
Cc: clang-built-linux@googlegroups.com, kbuild-all@lists.01.org
Subject: Re: [PATCH 3/3] btrfs: allow BTRFS_IOC_SNAP_DESTROY_V2 to remove ghost subvolume
Date: Tue, 29 Jun 2021 00:23:20 +0800	[thread overview]
Message-ID: <202106290002.38Ir01lm-lkp@intel.com> (raw)
In-Reply-To: <20210628101637.349718-4-wqu@suse.com>

[-- Attachment #1: Type: text/plain, Size: 5101 bytes --]

Hi Qu,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on kdave/for-next]
[also build test WARNING on v5.13 next-20210628]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Qu-Wenruo/btrfs-allow-BTRFS_IOC_SNAP_DESTROY_V2-to-remove-ghost-subvolume/20210628-181747
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: arm-randconfig-r025-20210628 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 4c92e31dd0f1bd152eda883af20ff7fbcaa14945)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/391ab0041fef5776e7517ab363701d6f86d9406b
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Qu-Wenruo/btrfs-allow-BTRFS_IOC_SNAP_DESTROY_V2-to-remove-ghost-subvolume/20210628-181747
        git checkout 391ab0041fef5776e7517ab363701d6f86d9406b
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> fs/btrfs/ioctl.c:2931:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ioctl.c:2967:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   fs/btrfs/ioctl.c:2931:2: note: remove the 'if' if its condition is always false
           if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ioctl.c:2911:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   1 warning generated.


vim +2931 fs/btrfs/ioctl.c

  2894	
  2895	/*
  2896	 * Special case that some subvolume has missing ORPHAN_ITEM, but its refs is
  2897	 * already 0 (without any ROOT_REF/BACKREF).
  2898	 * In that case such subvolume is only taking space while unable to be deleted.
  2899	 *
  2900	 * No reproducer to reproduce such corruption, but it won't hurt to cleanup them
  2901	 * as we can reuse existing code since we only need to insert an orphan item and
  2902	 * queue them to be deleted.
  2903	 */
  2904	static int __cold remove_ghost_subvol(struct btrfs_fs_info *fs_info,
  2905					      u64 rootid)
  2906	{
  2907		struct btrfs_trans_handle *trans;
  2908		struct btrfs_root *root;
  2909		struct btrfs_path *path;
  2910		struct btrfs_key key;
  2911		int ret;
  2912	
  2913		root = btrfs_get_fs_root(fs_info, rootid, false);
  2914		if (IS_ERR(root)) {
  2915			ret = PTR_ERR(root);
  2916			return ret;
  2917		}
  2918	
  2919		/* A ghost subvolume is already a problem, better to output a warning */
  2920		btrfs_warn(fs_info, "root %llu has no refs nor orphan item", rootid); 
  2921		if (btrfs_root_refs(&root->root_item) != 0) {
  2922			/* We get some strange root */
  2923			btrfs_warn(fs_info,
  2924				"root %llu has %u refs, but no proper root backref",
  2925				rootid, btrfs_root_refs(&root->root_item));
  2926			ret = -EUCLEAN;
  2927			goto out;
  2928		}
  2929	
  2930		/* Already has orphan inserted */
> 2931		if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
  2932			goto out;
  2933	
  2934		path = btrfs_alloc_path();
  2935		if (!path) {
  2936			ret = -ENOMEM;
  2937			goto out;
  2938		}
  2939		key.objectid = BTRFS_ORPHAN_OBJECTID;
  2940		key.type = BTRFS_ORPHAN_ITEM_KEY;
  2941		key.offset = rootid;
  2942	
  2943		ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0);
  2944		btrfs_free_path(path);
  2945		/* Either error or there is already an orphan item */
  2946		if (ret <= 0)
  2947			goto out;
  2948	
  2949		trans = btrfs_start_transaction(fs_info->tree_root, 1);
  2950		if (IS_ERR(trans)) {
  2951			ret = PTR_ERR(trans);
  2952			goto out;
  2953		}
  2954	
  2955		ret = btrfs_insert_orphan_item(trans, fs_info->tree_root, rootid);
  2956		if (ret < 0 && ret != -EEXIST) {
  2957			btrfs_abort_transaction(trans, ret);
  2958			goto end_trans;
  2959		}
  2960		ret = 0;
  2961		btrfs_add_dead_root(root);
  2962	
  2963	end_trans:
  2964		btrfs_end_transaction(trans);
  2965	out:
  2966		btrfs_put_root(root);
  2967		return ret;
  2968	}
  2969	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 35286 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 3/3] btrfs: allow BTRFS_IOC_SNAP_DESTROY_V2 to remove ghost subvolume
Date: Tue, 29 Jun 2021 00:23:20 +0800	[thread overview]
Message-ID: <202106290002.38Ir01lm-lkp@intel.com> (raw)
In-Reply-To: <20210628101637.349718-4-wqu@suse.com>

[-- Attachment #1: Type: text/plain, Size: 5230 bytes --]

Hi Qu,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on kdave/for-next]
[also build test WARNING on v5.13 next-20210628]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Qu-Wenruo/btrfs-allow-BTRFS_IOC_SNAP_DESTROY_V2-to-remove-ghost-subvolume/20210628-181747
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
config: arm-randconfig-r025-20210628 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 4c92e31dd0f1bd152eda883af20ff7fbcaa14945)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/391ab0041fef5776e7517ab363701d6f86d9406b
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Qu-Wenruo/btrfs-allow-BTRFS_IOC_SNAP_DESTROY_V2-to-remove-ghost-subvolume/20210628-181747
        git checkout 391ab0041fef5776e7517ab363701d6f86d9406b
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> fs/btrfs/ioctl.c:2931:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ioctl.c:2967:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   fs/btrfs/ioctl.c:2931:2: note: remove the 'if' if its condition is always false
           if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ioctl.c:2911:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   1 warning generated.


vim +2931 fs/btrfs/ioctl.c

  2894	
  2895	/*
  2896	 * Special case that some subvolume has missing ORPHAN_ITEM, but its refs is
  2897	 * already 0 (without any ROOT_REF/BACKREF).
  2898	 * In that case such subvolume is only taking space while unable to be deleted.
  2899	 *
  2900	 * No reproducer to reproduce such corruption, but it won't hurt to cleanup them
  2901	 * as we can reuse existing code since we only need to insert an orphan item and
  2902	 * queue them to be deleted.
  2903	 */
  2904	static int __cold remove_ghost_subvol(struct btrfs_fs_info *fs_info,
  2905					      u64 rootid)
  2906	{
  2907		struct btrfs_trans_handle *trans;
  2908		struct btrfs_root *root;
  2909		struct btrfs_path *path;
  2910		struct btrfs_key key;
  2911		int ret;
  2912	
  2913		root = btrfs_get_fs_root(fs_info, rootid, false);
  2914		if (IS_ERR(root)) {
  2915			ret = PTR_ERR(root);
  2916			return ret;
  2917		}
  2918	
  2919		/* A ghost subvolume is already a problem, better to output a warning */
  2920		btrfs_warn(fs_info, "root %llu has no refs nor orphan item", rootid); 
  2921		if (btrfs_root_refs(&root->root_item) != 0) {
  2922			/* We get some strange root */
  2923			btrfs_warn(fs_info,
  2924				"root %llu has %u refs, but no proper root backref",
  2925				rootid, btrfs_root_refs(&root->root_item));
  2926			ret = -EUCLEAN;
  2927			goto out;
  2928		}
  2929	
  2930		/* Already has orphan inserted */
> 2931		if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state))
  2932			goto out;
  2933	
  2934		path = btrfs_alloc_path();
  2935		if (!path) {
  2936			ret = -ENOMEM;
  2937			goto out;
  2938		}
  2939		key.objectid = BTRFS_ORPHAN_OBJECTID;
  2940		key.type = BTRFS_ORPHAN_ITEM_KEY;
  2941		key.offset = rootid;
  2942	
  2943		ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0);
  2944		btrfs_free_path(path);
  2945		/* Either error or there is already an orphan item */
  2946		if (ret <= 0)
  2947			goto out;
  2948	
  2949		trans = btrfs_start_transaction(fs_info->tree_root, 1);
  2950		if (IS_ERR(trans)) {
  2951			ret = PTR_ERR(trans);
  2952			goto out;
  2953		}
  2954	
  2955		ret = btrfs_insert_orphan_item(trans, fs_info->tree_root, rootid);
  2956		if (ret < 0 && ret != -EEXIST) {
  2957			btrfs_abort_transaction(trans, ret);
  2958			goto end_trans;
  2959		}
  2960		ret = 0;
  2961		btrfs_add_dead_root(root);
  2962	
  2963	end_trans:
  2964		btrfs_end_transaction(trans);
  2965	out:
  2966		btrfs_put_root(root);
  2967		return ret;
  2968	}
  2969	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35286 bytes --]

  parent reply	other threads:[~2021-06-28 16:24 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-28 10:16 [PATCH 0/3] btrfs: allow BTRFS_IOC_SNAP_DESTROY_V2 to remove ghost subvolume Qu Wenruo
2021-06-28 10:16 ` [PATCH 1/3] btrfs: return -EINVAL if some user wants to remove uuid/data_reloc tree Qu Wenruo
2021-06-28 10:59   ` Anand Jain
2021-06-28 10:16 ` [PATCH 2/3] btrfs: remove dead comment on btrfs_add_dead_root() Qu Wenruo
2021-06-28 11:01   ` Anand Jain
2021-06-28 10:16 ` [PATCH 3/3] btrfs: allow BTRFS_IOC_SNAP_DESTROY_V2 to remove ghost subvolume Qu Wenruo
2021-06-28 16:22   ` kernel test robot
2021-06-28 16:22     ` kernel test robot
2021-06-28 16:23   ` kernel test robot [this message]
2021-06-28 16:23     ` kernel test robot
2021-06-30 13:16   ` David Sterba
2021-06-30 13:26     ` Qu Wenruo
2021-06-30 13:30       ` David Sterba
2021-06-30 13:35         ` Qu Wenruo
2021-07-20  4:05 ` [PATCH 0/3] " Zygo Blaxell
2021-07-20  4:33   ` Qu Wenruo
2021-07-20 15:41     ` Zygo Blaxell
2021-07-20 22:40       ` Qu Wenruo
2021-08-20  5:45 ` Qu Wenruo
  -- strict thread matches above, loose matches on Subject: below --
2021-06-28 17:18 [PATCH 3/3] " kernel test robot
2021-06-29  7:04 ` [kbuild] " Dan Carpenter
2021-06-29  7:04 ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202106290002.38Ir01lm-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=wqu@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.