* 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.