All of lore.kernel.org
 help / color / mirror / Atom feed
* fs/btrfs/send.c:8282 btrfs_ioctl_send() error: we previously assumed 'sctx' could be null (see line 8272)
@ 2026-07-04 20:16 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-04 20:16 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Marco Elver <elver@google.com>
CC: Will Deacon <will@kernel.org>
CC: David Laight <david.laight.linux@gmail.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55
commit: 773b24bcedc16a4a29e8579d66ec67ca7aa0014f arm64, compiler-context-analysis: Permit alias analysis through __READ_ONCE() with CONFIG_LTO=y
date:   4 months ago
:::::: branch date: 16 hours ago
:::::: commit date: 4 months ago
config: arm64-randconfig-r073-20260704 (https://download.01.org/0day-ci/archive/20260705/202607050402.pML6Hy8Q-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 0a2fb2a2269da0e2a3e230beb6cad39ca314db33)
smatch: v0.5.0-9185-gbcc58b9c

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 773b24bcedc1 ("arm64, compiler-context-analysis: Permit alias analysis through __READ_ONCE() with CONFIG_LTO=y")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202607050402.pML6Hy8Q-lkp@intel.com/

smatch warnings:
fs/btrfs/send.c:8282 btrfs_ioctl_send() error: we previously assumed 'sctx' could be null (see line 8272)

vim +/sctx +8282 fs/btrfs/send.c

62d54f3a7fa27e Filipe Manana             2019-04-22  7978  
4e043cd196c85b David Sterba              2025-03-03  7979  long btrfs_ioctl_send(struct btrfs_root *send_root, const struct btrfs_ioctl_send_args *arg)
31db9f7c23fbf7 Alexander Block           2012-07-25  7980  {
31db9f7c23fbf7 Alexander Block           2012-07-25  7981  	int ret = 0;
0b246afa62b0cf Jeff Mahoney              2016-06-22  7982  	struct btrfs_fs_info *fs_info = send_root->fs_info;
31db9f7c23fbf7 Alexander Block           2012-07-25  7983  	struct btrfs_root *clone_root;
31db9f7c23fbf7 Alexander Block           2012-07-25  7984  	struct send_ctx *sctx = NULL;
31db9f7c23fbf7 Alexander Block           2012-07-25  7985  	u32 i;
31db9f7c23fbf7 Alexander Block           2012-07-25  7986  	u64 *clone_sources_tmp = NULL;
2c68653787f91c David Sterba              2013-12-16  7987  	int clone_sources_to_rollback = 0;
bae12df966f0e1 Denis Efremov             2020-09-21  7988  	size_t alloc_size;
896c14f97f700a Wang Shilong              2014-01-07  7989  	int sort_clone_roots = 0;
3e49363be6330f Filipe Manana             2023-01-11  7990  	struct btrfs_lru_cache_entry *entry;
3e49363be6330f Filipe Manana             2023-01-11  7991  	struct btrfs_lru_cache_entry *tmp;
31db9f7c23fbf7 Alexander Block           2012-07-25  7992  
31db9f7c23fbf7 Alexander Block           2012-07-25  7993  	if (!capable(CAP_SYS_ADMIN))
31db9f7c23fbf7 Alexander Block           2012-07-25  7994  		return -EPERM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7995  
2c68653787f91c David Sterba              2013-12-16  7996  	/*
2c68653787f91c David Sterba              2013-12-16  7997  	 * The subvolume must remain read-only during send, protect against
521e0546c970c3 David Sterba              2014-04-15  7998  	 * making it RW. This also protects against deletion.
2c68653787f91c David Sterba              2013-12-16  7999  	 */
2c68653787f91c David Sterba              2013-12-16  8000  	spin_lock(&send_root->root_item_lock);
dc058f5fda091a Filipe Manana             2024-11-06  8001  	/*
dc058f5fda091a Filipe Manana             2024-11-06  8002  	 * Unlikely but possible, if the subvolume is marked for deletion but
dc058f5fda091a Filipe Manana             2024-11-06  8003  	 * is slow to remove the directory entry, send can still be started.
dc058f5fda091a Filipe Manana             2024-11-06  8004  	 */
dc058f5fda091a Filipe Manana             2024-11-06  8005  	if (btrfs_root_dead(send_root)) {
dc058f5fda091a Filipe Manana             2024-11-06  8006  		spin_unlock(&send_root->root_item_lock);
dc058f5fda091a Filipe Manana             2024-11-06  8007  		return -EPERM;
dc058f5fda091a Filipe Manana             2024-11-06  8008  	}
e82c936293aafb Filipe Manana             2024-11-06  8009  	/* Userspace tools do the checks and warn the user if it's not RO. */
e82c936293aafb Filipe Manana             2024-11-06  8010  	if (!btrfs_root_readonly(send_root)) {
e82c936293aafb Filipe Manana             2024-11-06  8011  		spin_unlock(&send_root->root_item_lock);
e82c936293aafb Filipe Manana             2024-11-06  8012  		return -EPERM;
e82c936293aafb Filipe Manana             2024-11-06  8013  	}
e82c936293aafb Filipe Manana             2024-11-06  8014  	if (send_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  8015  		dedupe_in_progress_warn(send_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  8016  		spin_unlock(&send_root->root_item_lock);
62d54f3a7fa27e Filipe Manana             2019-04-22  8017  		return -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  8018  	}
2c68653787f91c David Sterba              2013-12-16  8019  	send_root->send_in_progress++;
2c68653787f91c David Sterba              2013-12-16  8020  	spin_unlock(&send_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  8021  
457ae7268b29c3 Dan Carpenter             2017-03-17  8022  	/*
457ae7268b29c3 Dan Carpenter             2017-03-17  8023  	 * Check that we don't overflow at later allocations, we request
457ae7268b29c3 Dan Carpenter             2017-03-17  8024  	 * clone_sources_count + 1 items, and compare to unsigned long inside
33e17b3f5ab74a David Sterba              2023-01-24  8025  	 * access_ok. Also set an upper limit for allocation size so this can't
33e17b3f5ab74a David Sterba              2023-01-24  8026  	 * easily exhaust memory. Max number of clone sources is about 200K.
457ae7268b29c3 Dan Carpenter             2017-03-17  8027  	 */
33e17b3f5ab74a David Sterba              2023-01-24  8028  	if (arg->clone_sources_count > SZ_8M / sizeof(struct clone_root)) {
f5ecec3ce21f70 Dan Carpenter             2016-04-13  8029  		ret = -EINVAL;
f5ecec3ce21f70 Dan Carpenter             2016-04-13  8030  		goto out;
f5ecec3ce21f70 Dan Carpenter             2016-04-13  8031  	}
f5ecec3ce21f70 Dan Carpenter             2016-04-13  8032  
c2c71324ecb471 Stefan Behrens            2013-04-10  8033  	if (arg->flags & ~BTRFS_SEND_FLAG_MASK) {
f884a9f9e59206 David Sterba              2024-01-10  8034  		ret = -EOPNOTSUPP;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  8035  		goto out;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  8036  	}
cb95e7bf7ba481 Mark Fasheh               2013-02-04  8037  
bf4afc53b77aea Linus Torvalds            2026-02-21  8038  	sctx = kzalloc_obj(struct send_ctx);
31db9f7c23fbf7 Alexander Block           2012-07-25  8039  	if (!sctx) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8040  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  8041  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8042  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8043  
fc746acb7aa9ae Filipe Manana             2025-02-13  8044  	init_path(&sctx->cur_inode_path);
31db9f7c23fbf7 Alexander Block           2012-07-25  8045  	INIT_LIST_HEAD(&sctx->new_refs);
31db9f7c23fbf7 Alexander Block           2012-07-25  8046  	INIT_LIST_HEAD(&sctx->deleted_refs);
31db9f7c23fbf7 Alexander Block           2012-07-25  8047  
c48545debfff56 Filipe Manana             2023-01-11  8048  	btrfs_lru_cache_init(&sctx->name_cache, SEND_MAX_NAME_CACHE_SIZE);
90b90d4ac03cba Filipe Manana             2023-01-11  8049  	btrfs_lru_cache_init(&sctx->backref_cache, SEND_MAX_BACKREF_CACHE_SIZE);
e8a7f49d9bfce2 Filipe Manana             2023-01-11  8050  	btrfs_lru_cache_init(&sctx->dir_created_cache,
e8a7f49d9bfce2 Filipe Manana             2023-01-11  8051  			     SEND_MAX_DIR_CREATED_CACHE_SIZE);
3e49363be6330f Filipe Manana             2023-01-11  8052  	/*
3e49363be6330f Filipe Manana             2023-01-11  8053  	 * This cache is periodically trimmed to a fixed size elsewhere, see
3e49363be6330f Filipe Manana             2023-01-11  8054  	 * cache_dir_utimes() and trim_dir_utimes_cache().
3e49363be6330f Filipe Manana             2023-01-11  8055  	 */
3e49363be6330f Filipe Manana             2023-01-11  8056  	btrfs_lru_cache_init(&sctx->dir_utimes_cache, 0);
66d04209e5a8d3 Filipe Manana             2022-11-01  8057  
d307d2f35ca5c5 Filipe Manana             2023-01-11  8058  	sctx->pending_dir_moves = RB_ROOT;
d307d2f35ca5c5 Filipe Manana             2023-01-11  8059  	sctx->waiting_dir_moves = RB_ROOT;
d307d2f35ca5c5 Filipe Manana             2023-01-11  8060  	sctx->orphan_dirs = RB_ROOT;
d307d2f35ca5c5 Filipe Manana             2023-01-11  8061  	sctx->rbtree_new_refs = RB_ROOT;
d307d2f35ca5c5 Filipe Manana             2023-01-11  8062  	sctx->rbtree_deleted_refs = RB_ROOT;
d307d2f35ca5c5 Filipe Manana             2023-01-11  8063  
cb95e7bf7ba481 Mark Fasheh               2013-02-04  8064  	sctx->flags = arg->flags;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  8065  
e77fbf990316d4 David Sterba              2021-10-22  8066  	if (arg->flags & BTRFS_SEND_FLAG_VERSION) {
e77fbf990316d4 David Sterba              2021-10-22  8067  		if (arg->version > BTRFS_SEND_STREAM_VERSION) {
e77fbf990316d4 David Sterba              2021-10-22  8068  			ret = -EPROTO;
e77fbf990316d4 David Sterba              2021-10-22  8069  			goto out;
e77fbf990316d4 David Sterba              2021-10-22  8070  		}
e77fbf990316d4 David Sterba              2021-10-22  8071  		/* Zero means "use the highest version" */
e77fbf990316d4 David Sterba              2021-10-22  8072  		sctx->proto = arg->version ?: BTRFS_SEND_STREAM_VERSION;
e77fbf990316d4 David Sterba              2021-10-22  8073  	} else {
e77fbf990316d4 David Sterba              2021-10-22  8074  		sctx->proto = 1;
e77fbf990316d4 David Sterba              2021-10-22  8075  	}
d6815592806f48 Omar Sandoval             2022-03-17  8076  	if ((arg->flags & BTRFS_SEND_FLAG_COMPRESSED) && sctx->proto < 2) {
d6815592806f48 Omar Sandoval             2022-03-17  8077  		ret = -EINVAL;
d6815592806f48 Omar Sandoval             2022-03-17  8078  		goto out;
d6815592806f48 Omar Sandoval             2022-03-17  8079  	}
e77fbf990316d4 David Sterba              2021-10-22  8080  
31db9f7c23fbf7 Alexander Block           2012-07-25  8081  	sctx->send_filp = fget(arg->send_fd);
0ac1d13a55eb37 Jann Horn                 2023-11-24  8082  	if (!sctx->send_filp || !(sctx->send_filp->f_mode & FMODE_WRITE)) {
ecc7ada77b5cd1 Tsutomu Itoh              2013-04-19  8083  		ret = -EBADF;
31db9f7c23fbf7 Alexander Block           2012-07-25  8084  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8085  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8086  
31db9f7c23fbf7 Alexander Block           2012-07-25  8087  	sctx->send_root = send_root;
31db9f7c23fbf7 Alexander Block           2012-07-25  8088  	sctx->clone_roots_cnt = arg->clone_sources_count;
31db9f7c23fbf7 Alexander Block           2012-07-25  8089  
a4b333f2277b13 Omar Sandoval             2022-04-04  8090  	if (sctx->proto >= 2) {
a4b333f2277b13 Omar Sandoval             2022-04-04  8091  		u32 send_buf_num_pages;
a4b333f2277b13 Omar Sandoval             2022-04-04  8092  
875c627c5f2045 Wang Yugui                2022-10-19  8093  		sctx->send_max_size = BTRFS_SEND_BUF_SIZE_V2;
a4b333f2277b13 Omar Sandoval             2022-04-04  8094  		sctx->send_buf = vmalloc(sctx->send_max_size);
a4b333f2277b13 Omar Sandoval             2022-04-04  8095  		if (!sctx->send_buf) {
a4b333f2277b13 Omar Sandoval             2022-04-04  8096  			ret = -ENOMEM;
a4b333f2277b13 Omar Sandoval             2022-04-04  8097  			goto out;
a4b333f2277b13 Omar Sandoval             2022-04-04  8098  		}
a4b333f2277b13 Omar Sandoval             2022-04-04  8099  		send_buf_num_pages = sctx->send_max_size >> PAGE_SHIFT;
69050f8d6d075d Kees Cook                 2026-02-20  8100  		sctx->send_buf_pages = kzalloc_objs(*sctx->send_buf_pages,
189f164e573e18 Kees Cook                 2026-02-21  8101  						    send_buf_num_pages);
a4b333f2277b13 Omar Sandoval             2022-04-04  8102  		if (!sctx->send_buf_pages) {
a4b333f2277b13 Omar Sandoval             2022-04-04  8103  			ret = -ENOMEM;
a4b333f2277b13 Omar Sandoval             2022-04-04  8104  			goto out;
a4b333f2277b13 Omar Sandoval             2022-04-04  8105  		}
a4b333f2277b13 Omar Sandoval             2022-04-04  8106  		for (i = 0; i < send_buf_num_pages; i++) {
a4b333f2277b13 Omar Sandoval             2022-04-04  8107  			sctx->send_buf_pages[i] =
a4b333f2277b13 Omar Sandoval             2022-04-04  8108  				vmalloc_to_page(sctx->send_buf + (i << PAGE_SHIFT));
a4b333f2277b13 Omar Sandoval             2022-04-04  8109  		}
a4b333f2277b13 Omar Sandoval             2022-04-04  8110  	} else {
b7c14f23fb604f Omar Sandoval             2022-03-17  8111  		sctx->send_max_size = BTRFS_SEND_BUF_SIZE_V1;
752ade68cbd81d Michal Hocko              2017-05-08  8112  		sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);
a4b333f2277b13 Omar Sandoval             2022-04-04  8113  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8114  	if (!sctx->send_buf) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8115  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  8116  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8117  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8118  
69050f8d6d075d Kees Cook                 2026-02-20  8119  	sctx->clone_roots = kvzalloc_objs(*sctx->clone_roots,
189f164e573e18 Kees Cook                 2026-02-21  8120  					  arg->clone_sources_count + 1);
31db9f7c23fbf7 Alexander Block           2012-07-25  8121  	if (!sctx->clone_roots) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8122  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  8123  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8124  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8125  
bae12df966f0e1 Denis Efremov             2020-09-21  8126  	alloc_size = array_size(sizeof(*arg->clone_sources),
bae12df966f0e1 Denis Efremov             2020-09-21  8127  				arg->clone_sources_count);
e55d1153dbf484 David Sterba              2016-04-11  8128  
31db9f7c23fbf7 Alexander Block           2012-07-25  8129  	if (arg->clone_sources_count) {
752ade68cbd81d Michal Hocko              2017-05-08  8130  		clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);
31db9f7c23fbf7 Alexander Block           2012-07-25  8131  		if (!clone_sources_tmp) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8132  			ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  8133  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8134  		}
31db9f7c23fbf7 Alexander Block           2012-07-25  8135  
31db9f7c23fbf7 Alexander Block           2012-07-25  8136  		ret = copy_from_user(clone_sources_tmp, arg->clone_sources,
e55d1153dbf484 David Sterba              2016-04-11  8137  				alloc_size);
31db9f7c23fbf7 Alexander Block           2012-07-25  8138  		if (ret) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8139  			ret = -EFAULT;
31db9f7c23fbf7 Alexander Block           2012-07-25  8140  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8141  		}
31db9f7c23fbf7 Alexander Block           2012-07-25  8142  
31db9f7c23fbf7 Alexander Block           2012-07-25  8143  		for (i = 0; i < arg->clone_sources_count; i++) {
56e9357a1e8167 David Sterba              2020-05-15  8144  			clone_root = btrfs_get_fs_root(fs_info,
56e9357a1e8167 David Sterba              2020-05-15  8145  						clone_sources_tmp[i], true);
31db9f7c23fbf7 Alexander Block           2012-07-25  8146  			if (IS_ERR(clone_root)) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8147  				ret = PTR_ERR(clone_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  8148  				goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8149  			}
2c68653787f91c David Sterba              2013-12-16  8150  			spin_lock(&clone_root->root_item_lock);
5cc2b17e80cf57 Filipe Manana             2015-03-02  8151  			if (!btrfs_root_readonly(clone_root) ||
5cc2b17e80cf57 Filipe Manana             2015-03-02  8152  			    btrfs_root_dead(clone_root)) {
2c68653787f91c David Sterba              2013-12-16  8153  				spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik               2020-01-24  8154  				btrfs_put_root(clone_root);
2c68653787f91c David Sterba              2013-12-16  8155  				ret = -EPERM;
2c68653787f91c David Sterba              2013-12-16  8156  				goto out;
2c68653787f91c David Sterba              2013-12-16  8157  			}
62d54f3a7fa27e Filipe Manana             2019-04-22  8158  			if (clone_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  8159  				dedupe_in_progress_warn(clone_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  8160  				spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik               2020-01-24  8161  				btrfs_put_root(clone_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  8162  				ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  8163  				goto out;
62d54f3a7fa27e Filipe Manana             2019-04-22  8164  			}
2f1f465ae6da24 Filipe Manana             2015-03-02  8165  			clone_root->send_in_progress++;
2c68653787f91c David Sterba              2013-12-16  8166  			spin_unlock(&clone_root->root_item_lock);
18f687d5384493 Wang Shilong              2014-01-07  8167  
31db9f7c23fbf7 Alexander Block           2012-07-25  8168  			sctx->clone_roots[i].root = clone_root;
2f1f465ae6da24 Filipe Manana             2015-03-02  8169  			clone_sources_to_rollback = i + 1;
31db9f7c23fbf7 Alexander Block           2012-07-25  8170  		}
2f91306a378099 David Sterba              2016-04-11  8171  		kvfree(clone_sources_tmp);
31db9f7c23fbf7 Alexander Block           2012-07-25  8172  		clone_sources_tmp = NULL;
31db9f7c23fbf7 Alexander Block           2012-07-25  8173  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8174  
31db9f7c23fbf7 Alexander Block           2012-07-25  8175  	if (arg->parent_root) {
56e9357a1e8167 David Sterba              2020-05-15  8176  		sctx->parent_root = btrfs_get_fs_root(fs_info, arg->parent_root,
56e9357a1e8167 David Sterba              2020-05-15  8177  						      true);
b1b195969fe6d9 Stefan Behrens            2013-05-13  8178  		if (IS_ERR(sctx->parent_root)) {
b1b195969fe6d9 Stefan Behrens            2013-05-13  8179  			ret = PTR_ERR(sctx->parent_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  8180  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8181  		}
18f687d5384493 Wang Shilong              2014-01-07  8182  
2c68653787f91c David Sterba              2013-12-16  8183  		spin_lock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  8184  		sctx->parent_root->send_in_progress++;
521e0546c970c3 David Sterba              2014-04-15  8185  		if (!btrfs_root_readonly(sctx->parent_root) ||
521e0546c970c3 David Sterba              2014-04-15  8186  				btrfs_root_dead(sctx->parent_root)) {
2c68653787f91c David Sterba              2013-12-16  8187  			spin_unlock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  8188  			ret = -EPERM;
2c68653787f91c David Sterba              2013-12-16  8189  			goto out;
2c68653787f91c David Sterba              2013-12-16  8190  		}
62d54f3a7fa27e Filipe Manana             2019-04-22  8191  		if (sctx->parent_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  8192  			dedupe_in_progress_warn(sctx->parent_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  8193  			spin_unlock(&sctx->parent_root->root_item_lock);
62d54f3a7fa27e Filipe Manana             2019-04-22  8194  			ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  8195  			goto out;
62d54f3a7fa27e Filipe Manana             2019-04-22  8196  		}
2c68653787f91c David Sterba              2013-12-16  8197  		spin_unlock(&sctx->parent_root->root_item_lock);
31db9f7c23fbf7 Alexander Block           2012-07-25  8198  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8199  
31db9f7c23fbf7 Alexander Block           2012-07-25  8200  	/*
31db9f7c23fbf7 Alexander Block           2012-07-25  8201  	 * Clones from send_root are allowed, but only if the clone source
31db9f7c23fbf7 Alexander Block           2012-07-25  8202  	 * is behind the current send position. This is checked while searching
31db9f7c23fbf7 Alexander Block           2012-07-25  8203  	 * for possible clone sources.
31db9f7c23fbf7 Alexander Block           2012-07-25  8204  	 */
6f9a3da5da9e7e Josef Bacik               2020-01-24  8205  	sctx->clone_roots[sctx->clone_roots_cnt++].root =
0024652895e347 Josef Bacik               2020-01-24  8206  		btrfs_grab_root(sctx->send_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  8207  
31db9f7c23fbf7 Alexander Block           2012-07-25  8208  	/* We do a bsearch later */
31db9f7c23fbf7 Alexander Block           2012-07-25  8209  	sort(sctx->clone_roots, sctx->clone_roots_cnt,
31db9f7c23fbf7 Alexander Block           2012-07-25  8210  			sizeof(*sctx->clone_roots), __clone_root_cmp_sort,
31db9f7c23fbf7 Alexander Block           2012-07-25  8211  			NULL);
896c14f97f700a Wang Shilong              2014-01-07  8212  	sort_clone_roots = 1;
31db9f7c23fbf7 Alexander Block           2012-07-25  8213  
9f89d5de8631c7 Filipe Manana             2019-04-15  8214  	ret = flush_delalloc_roots(sctx);
9f89d5de8631c7 Filipe Manana             2019-04-15  8215  	if (ret)
9f89d5de8631c7 Filipe Manana             2019-04-15  8216  		goto out;
9f89d5de8631c7 Filipe Manana             2019-04-15  8217  
e5fa8f865b3324 Filipe Manana             2014-10-21  8218  	ret = ensure_commit_roots_uptodate(sctx);
e5fa8f865b3324 Filipe Manana             2014-10-21  8219  	if (ret)
e5fa8f865b3324 Filipe Manana             2014-10-21  8220  		goto out;
e5fa8f865b3324 Filipe Manana             2014-10-21  8221  
31db9f7c23fbf7 Alexander Block           2012-07-25  8222  	ret = send_subvol(sctx);
31db9f7c23fbf7 Alexander Block           2012-07-25  8223  	if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  8224  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8225  
3e49363be6330f Filipe Manana             2023-01-11  8226  	btrfs_lru_cache_for_each_entry_safe(&sctx->dir_utimes_cache, entry, tmp) {
3e49363be6330f Filipe Manana             2023-01-11  8227  		ret = send_utimes(sctx, entry->key, entry->gen);
3e49363be6330f Filipe Manana             2023-01-11  8228  		if (ret < 0)
3e49363be6330f Filipe Manana             2023-01-11  8229  			goto out;
3e49363be6330f Filipe Manana             2023-01-11  8230  		btrfs_lru_cache_remove(&sctx->dir_utimes_cache, entry);
3e49363be6330f Filipe Manana             2023-01-11  8231  	}
3e49363be6330f Filipe Manana             2023-01-11  8232  
c2c71324ecb471 Stefan Behrens            2013-04-10  8233  	if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) {
31db9f7c23fbf7 Alexander Block           2012-07-25  8234  		ret = begin_cmd(sctx, BTRFS_SEND_C_END);
31db9f7c23fbf7 Alexander Block           2012-07-25  8235  		if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  8236  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  8237  		ret = send_cmd(sctx);
31db9f7c23fbf7 Alexander Block           2012-07-25  8238  		if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  8239  			goto out;
c2c71324ecb471 Stefan Behrens            2013-04-10  8240  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  8241  
31db9f7c23fbf7 Alexander Block           2012-07-25  8242  out:
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8243  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8244  	while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8245  		struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8246  		struct pending_dir_move *pm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8247  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8248  		n = rb_first(&sctx->pending_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8249  		pm = rb_entry(n, struct pending_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8250  		while (!list_empty(&pm->list)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8251  			struct pending_dir_move *pm2;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8252  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8253  			pm2 = list_first_entry(&pm->list,
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8254  					       struct pending_dir_move, list);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8255  			free_pending_move(sctx, pm2);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8256  		}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8257  		free_pending_move(sctx, pm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8258  	}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8259  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8260  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8261  	while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8262  		struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8263  		struct waiting_dir_move *dm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8264  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8265  		n = rb_first(&sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8266  		dm = rb_entry(n, struct waiting_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8267  		rb_erase(&dm->node, &sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8268  		kfree(dm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8269  	}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  8270  
9dc442143b9874 Filipe Manana             2014-02-19  8271  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs));
9dc442143b9874 Filipe Manana             2014-02-19 @8272  	while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) {
9dc442143b9874 Filipe Manana             2014-02-19  8273  		struct rb_node *n;
9dc442143b9874 Filipe Manana             2014-02-19  8274  		struct orphan_dir_info *odi;
9dc442143b9874 Filipe Manana             2014-02-19  8275  
9dc442143b9874 Filipe Manana             2014-02-19  8276  		n = rb_first(&sctx->orphan_dirs);
9dc442143b9874 Filipe Manana             2014-02-19  8277  		odi = rb_entry(n, struct orphan_dir_info, node);
9dc442143b9874 Filipe Manana             2014-02-19  8278  		free_orphan_dir_info(sctx, odi);
9dc442143b9874 Filipe Manana             2014-02-19  8279  	}
9dc442143b9874 Filipe Manana             2014-02-19  8280  
896c14f97f700a Wang Shilong              2014-01-07  8281  	if (sort_clone_roots) {
6f9a3da5da9e7e Josef Bacik               2020-01-24 @8282  		for (i = 0; i < sctx->clone_roots_cnt; i++) {

:::::: The code at line 8282 was first introduced by commit
:::::: 6f9a3da5da9e7e59f3a5a5909aab5f680fe919c9 btrfs: hold a ref on the root in btrfs_ioctl_send

:::::: TO: Josef Bacik <josef@toxicpanda.com>
:::::: CC: David Sterba <dsterba@suse.com>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-07-04 20:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-04 20:16 fs/btrfs/send.c:8282 btrfs_ioctl_send() error: we previously assumed 'sctx' could be null (see line 8272) kernel test robot

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.