From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: fs/btrfs/send.c:8282 btrfs_ioctl_send() error: we previously assumed 'sctx' could be null (see line 8272)
Date: Sun, 05 Jul 2026 04:16:49 +0800 [thread overview]
Message-ID: <202607050402.pML6Hy8Q-lkp@intel.com> (raw)
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
reply other threads:[~2026-07-04 20:17 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202607050402.pML6Hy8Q-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox