* [osandov:btrfs-send-encoded-v10 12/14] fs/btrfs/send.c:7546 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7319)
@ 2021-08-19 17:54 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-08-19 17:54 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 28753 bytes --]
CC: kbuild-all(a)lists.01.org
CC: Omar Sandoval <osandov@osandov.com>
CC: linux-kernel(a)vger.kernel.org
TO: Omar Sandoval <osandov@fb.com>
tree: https://github.com/osandov/linux.git btrfs-send-encoded-v10
head: a87f8dd5b9e777c136ab986baa9b751f9c1909a6
commit: 5ea052d103ec66ef1f782839c5e21d4f6574fcc1 [12/14] btrfs: send: allocate send buffer with alloc_page() and vmap() for v2
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: nds32-randconfig-m031-20210818 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
fs/btrfs/send.c:7546 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7319)
vim +7546 fs/btrfs/send.c
62d54f3a7fa27e Filipe Manana 2019-04-22 7225
2351f431f72722 Josef Bacik 2017-09-27 7226 long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg)
31db9f7c23fbf7 Alexander Block 2012-07-25 7227 {
31db9f7c23fbf7 Alexander Block 2012-07-25 7228 int ret = 0;
0b246afa62b0cf Jeff Mahoney 2016-06-22 7229 struct btrfs_root *send_root = BTRFS_I(file_inode(mnt_file))->root;
0b246afa62b0cf Jeff Mahoney 2016-06-22 7230 struct btrfs_fs_info *fs_info = send_root->fs_info;
31db9f7c23fbf7 Alexander Block 2012-07-25 7231 struct btrfs_root *clone_root;
31db9f7c23fbf7 Alexander Block 2012-07-25 7232 struct send_ctx *sctx = NULL;
31db9f7c23fbf7 Alexander Block 2012-07-25 7233 u32 i;
5ea052d103ec66 Omar Sandoval 2020-05-01 7234 u32 send_buf_num_pages = 0;
31db9f7c23fbf7 Alexander Block 2012-07-25 7235 u64 *clone_sources_tmp = NULL;
2c68653787f91c David Sterba 2013-12-16 7236 int clone_sources_to_rollback = 0;
bae12df966f0e1 Denis Efremov 2020-09-21 7237 size_t alloc_size;
896c14f97f700a Wang Shilong 2014-01-07 7238 int sort_clone_roots = 0;
31db9f7c23fbf7 Alexander Block 2012-07-25 7239
31db9f7c23fbf7 Alexander Block 2012-07-25 7240 if (!capable(CAP_SYS_ADMIN))
31db9f7c23fbf7 Alexander Block 2012-07-25 7241 return -EPERM;
31db9f7c23fbf7 Alexander Block 2012-07-25 7242
2c68653787f91c David Sterba 2013-12-16 7243 /*
2c68653787f91c David Sterba 2013-12-16 7244 * The subvolume must remain read-only during send, protect against
521e0546c970c3 David Sterba 2014-04-15 7245 * making it RW. This also protects against deletion.
2c68653787f91c David Sterba 2013-12-16 7246 */
2c68653787f91c David Sterba 2013-12-16 7247 spin_lock(&send_root->root_item_lock);
62d54f3a7fa27e Filipe Manana 2019-04-22 7248 if (btrfs_root_readonly(send_root) && send_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana 2019-04-22 7249 dedupe_in_progress_warn(send_root);
62d54f3a7fa27e Filipe Manana 2019-04-22 7250 spin_unlock(&send_root->root_item_lock);
62d54f3a7fa27e Filipe Manana 2019-04-22 7251 return -EAGAIN;
62d54f3a7fa27e Filipe Manana 2019-04-22 7252 }
2c68653787f91c David Sterba 2013-12-16 7253 send_root->send_in_progress++;
2c68653787f91c David Sterba 2013-12-16 7254 spin_unlock(&send_root->root_item_lock);
2c68653787f91c David Sterba 2013-12-16 7255
2c68653787f91c David Sterba 2013-12-16 7256 /*
2c68653787f91c David Sterba 2013-12-16 7257 * Userspace tools do the checks and warn the user if it's
2c68653787f91c David Sterba 2013-12-16 7258 * not RO.
2c68653787f91c David Sterba 2013-12-16 7259 */
2c68653787f91c David Sterba 2013-12-16 7260 if (!btrfs_root_readonly(send_root)) {
2c68653787f91c David Sterba 2013-12-16 7261 ret = -EPERM;
2c68653787f91c David Sterba 2013-12-16 7262 goto out;
2c68653787f91c David Sterba 2013-12-16 7263 }
2c68653787f91c David Sterba 2013-12-16 7264
457ae7268b29c3 Dan Carpenter 2017-03-17 7265 /*
457ae7268b29c3 Dan Carpenter 2017-03-17 7266 * Check that we don't overflow at later allocations, we request
457ae7268b29c3 Dan Carpenter 2017-03-17 7267 * clone_sources_count + 1 items, and compare to unsigned long inside
457ae7268b29c3 Dan Carpenter 2017-03-17 7268 * access_ok.
457ae7268b29c3 Dan Carpenter 2017-03-17 7269 */
f5ecec3ce21f70 Dan Carpenter 2016-04-13 7270 if (arg->clone_sources_count >
457ae7268b29c3 Dan Carpenter 2017-03-17 7271 ULONG_MAX / sizeof(struct clone_root) - 1) {
f5ecec3ce21f70 Dan Carpenter 2016-04-13 7272 ret = -EINVAL;
f5ecec3ce21f70 Dan Carpenter 2016-04-13 7273 goto out;
f5ecec3ce21f70 Dan Carpenter 2016-04-13 7274 }
f5ecec3ce21f70 Dan Carpenter 2016-04-13 7275
c2c71324ecb471 Stefan Behrens 2013-04-10 7276 if (arg->flags & ~BTRFS_SEND_FLAG_MASK) {
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7277 ret = -EINVAL;
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7278 goto out;
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7279 }
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7280
e780b0d1c1523e David Sterba 2016-01-18 7281 sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL);
31db9f7c23fbf7 Alexander Block 2012-07-25 7282 if (!sctx) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7283 ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block 2012-07-25 7284 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7285 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7286
31db9f7c23fbf7 Alexander Block 2012-07-25 7287 INIT_LIST_HEAD(&sctx->new_refs);
31db9f7c23fbf7 Alexander Block 2012-07-25 7288 INIT_LIST_HEAD(&sctx->deleted_refs);
e780b0d1c1523e David Sterba 2016-01-18 7289 INIT_RADIX_TREE(&sctx->name_cache, GFP_KERNEL);
31db9f7c23fbf7 Alexander Block 2012-07-25 7290 INIT_LIST_HEAD(&sctx->name_cache_list);
31db9f7c23fbf7 Alexander Block 2012-07-25 7291
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7292 sctx->flags = arg->flags;
cb95e7bf7ba481 Mark Fasheh 2013-02-04 7293
31db9f7c23fbf7 Alexander Block 2012-07-25 7294 sctx->send_filp = fget(arg->send_fd);
ecc7ada77b5cd1 Tsutomu Itoh 2013-04-19 7295 if (!sctx->send_filp) {
ecc7ada77b5cd1 Tsutomu Itoh 2013-04-19 7296 ret = -EBADF;
31db9f7c23fbf7 Alexander Block 2012-07-25 7297 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7298 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7299
31db9f7c23fbf7 Alexander Block 2012-07-25 7300 sctx->send_root = send_root;
521e0546c970c3 David Sterba 2014-04-15 7301 /*
521e0546c970c3 David Sterba 2014-04-15 7302 * Unlikely but possible, if the subvolume is marked for deletion but
521e0546c970c3 David Sterba 2014-04-15 7303 * is slow to remove the directory entry, send can still be started
521e0546c970c3 David Sterba 2014-04-15 7304 */
521e0546c970c3 David Sterba 2014-04-15 7305 if (btrfs_root_dead(sctx->send_root)) {
521e0546c970c3 David Sterba 2014-04-15 7306 ret = -EPERM;
521e0546c970c3 David Sterba 2014-04-15 7307 goto out;
521e0546c970c3 David Sterba 2014-04-15 7308 }
521e0546c970c3 David Sterba 2014-04-15 7309
31db9f7c23fbf7 Alexander Block 2012-07-25 7310 sctx->clone_roots_cnt = arg->clone_sources_count;
31db9f7c23fbf7 Alexander Block 2012-07-25 7311
7d186d9f0bbc03 Omar Sandoval 2020-05-13 7312 if (sctx->flags & BTRFS_SEND_FLAG_STREAM_V2) {
7d186d9f0bbc03 Omar Sandoval 2020-05-13 7313 sctx->send_max_size = ALIGN(SZ_16K + BTRFS_MAX_COMPRESSED,
7d186d9f0bbc03 Omar Sandoval 2020-05-13 7314 PAGE_SIZE);
5ea052d103ec66 Omar Sandoval 2020-05-01 7315 send_buf_num_pages = sctx->send_max_size >> PAGE_SHIFT;
5ea052d103ec66 Omar Sandoval 2020-05-01 7316 sctx->send_buf_pages = kcalloc(send_buf_num_pages,
5ea052d103ec66 Omar Sandoval 2020-05-01 7317 sizeof(*sctx->send_buf_pages),
5ea052d103ec66 Omar Sandoval 2020-05-01 7318 GFP_KERNEL);
5ea052d103ec66 Omar Sandoval 2020-05-01 7319 if (!sctx->send_buf_pages) {
5ea052d103ec66 Omar Sandoval 2020-05-01 7320 send_buf_num_pages = 0;
5ea052d103ec66 Omar Sandoval 2020-05-01 7321 ret = -ENOMEM;
5ea052d103ec66 Omar Sandoval 2020-05-01 7322 goto out;
5ea052d103ec66 Omar Sandoval 2020-05-01 7323 }
5ea052d103ec66 Omar Sandoval 2020-05-01 7324 for (i = 0; i < send_buf_num_pages; i++) {
5ea052d103ec66 Omar Sandoval 2020-05-01 7325 sctx->send_buf_pages[i] = alloc_page(GFP_KERNEL);
5ea052d103ec66 Omar Sandoval 2020-05-01 7326 if (!sctx->send_buf_pages[i]) {
5ea052d103ec66 Omar Sandoval 2020-05-01 7327 ret = -ENOMEM;
5ea052d103ec66 Omar Sandoval 2020-05-01 7328 goto out;
5ea052d103ec66 Omar Sandoval 2020-05-01 7329 }
5ea052d103ec66 Omar Sandoval 2020-05-01 7330 }
5ea052d103ec66 Omar Sandoval 2020-05-01 7331 sctx->send_buf = vmap(sctx->send_buf_pages, send_buf_num_pages,
5ea052d103ec66 Omar Sandoval 2020-05-01 7332 VM_MAP, PAGE_KERNEL);
7d186d9f0bbc03 Omar Sandoval 2020-05-13 7333 } else {
d60216724a767a Omar Sandoval 2020-05-12 7334 sctx->send_max_size = BTRFS_SEND_BUF_SIZE_V1;
752ade68cbd81d Michal Hocko 2017-05-08 7335 sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);
5ea052d103ec66 Omar Sandoval 2020-05-01 7336 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7337 if (!sctx->send_buf) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7338 ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block 2012-07-25 7339 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7340 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7341
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7342 sctx->pending_dir_moves = RB_ROOT;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7343 sctx->waiting_dir_moves = RB_ROOT;
9dc442143b9874 Filipe Manana 2014-02-19 7344 sctx->orphan_dirs = RB_ROOT;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7345
bae12df966f0e1 Denis Efremov 2020-09-21 7346 sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots),
bae12df966f0e1 Denis Efremov 2020-09-21 7347 arg->clone_sources_count + 1,
bae12df966f0e1 Denis Efremov 2020-09-21 7348 GFP_KERNEL);
31db9f7c23fbf7 Alexander Block 2012-07-25 7349 if (!sctx->clone_roots) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7350 ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block 2012-07-25 7351 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7352 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7353
bae12df966f0e1 Denis Efremov 2020-09-21 7354 alloc_size = array_size(sizeof(*arg->clone_sources),
bae12df966f0e1 Denis Efremov 2020-09-21 7355 arg->clone_sources_count);
e55d1153dbf484 David Sterba 2016-04-11 7356
31db9f7c23fbf7 Alexander Block 2012-07-25 7357 if (arg->clone_sources_count) {
752ade68cbd81d Michal Hocko 2017-05-08 7358 clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);
31db9f7c23fbf7 Alexander Block 2012-07-25 7359 if (!clone_sources_tmp) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7360 ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block 2012-07-25 7361 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7362 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7363
31db9f7c23fbf7 Alexander Block 2012-07-25 7364 ret = copy_from_user(clone_sources_tmp, arg->clone_sources,
e55d1153dbf484 David Sterba 2016-04-11 7365 alloc_size);
31db9f7c23fbf7 Alexander Block 2012-07-25 7366 if (ret) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7367 ret = -EFAULT;
31db9f7c23fbf7 Alexander Block 2012-07-25 7368 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7369 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7370
31db9f7c23fbf7 Alexander Block 2012-07-25 7371 for (i = 0; i < arg->clone_sources_count; i++) {
56e9357a1e8167 David Sterba 2020-05-15 7372 clone_root = btrfs_get_fs_root(fs_info,
56e9357a1e8167 David Sterba 2020-05-15 7373 clone_sources_tmp[i], true);
31db9f7c23fbf7 Alexander Block 2012-07-25 7374 if (IS_ERR(clone_root)) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7375 ret = PTR_ERR(clone_root);
31db9f7c23fbf7 Alexander Block 2012-07-25 7376 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7377 }
2c68653787f91c David Sterba 2013-12-16 7378 spin_lock(&clone_root->root_item_lock);
5cc2b17e80cf57 Filipe Manana 2015-03-02 7379 if (!btrfs_root_readonly(clone_root) ||
5cc2b17e80cf57 Filipe Manana 2015-03-02 7380 btrfs_root_dead(clone_root)) {
2c68653787f91c David Sterba 2013-12-16 7381 spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik 2020-01-24 7382 btrfs_put_root(clone_root);
2c68653787f91c David Sterba 2013-12-16 7383 ret = -EPERM;
2c68653787f91c David Sterba 2013-12-16 7384 goto out;
2c68653787f91c David Sterba 2013-12-16 7385 }
62d54f3a7fa27e Filipe Manana 2019-04-22 7386 if (clone_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana 2019-04-22 7387 dedupe_in_progress_warn(clone_root);
62d54f3a7fa27e Filipe Manana 2019-04-22 7388 spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik 2020-01-24 7389 btrfs_put_root(clone_root);
62d54f3a7fa27e Filipe Manana 2019-04-22 7390 ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana 2019-04-22 7391 goto out;
62d54f3a7fa27e Filipe Manana 2019-04-22 7392 }
2f1f465ae6da24 Filipe Manana 2015-03-02 7393 clone_root->send_in_progress++;
2c68653787f91c David Sterba 2013-12-16 7394 spin_unlock(&clone_root->root_item_lock);
18f687d5384493 Wang Shilong 2014-01-07 7395
31db9f7c23fbf7 Alexander Block 2012-07-25 7396 sctx->clone_roots[i].root = clone_root;
2f1f465ae6da24 Filipe Manana 2015-03-02 7397 clone_sources_to_rollback = i + 1;
31db9f7c23fbf7 Alexander Block 2012-07-25 7398 }
2f91306a378099 David Sterba 2016-04-11 7399 kvfree(clone_sources_tmp);
31db9f7c23fbf7 Alexander Block 2012-07-25 7400 clone_sources_tmp = NULL;
31db9f7c23fbf7 Alexander Block 2012-07-25 7401 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7402
31db9f7c23fbf7 Alexander Block 2012-07-25 7403 if (arg->parent_root) {
56e9357a1e8167 David Sterba 2020-05-15 7404 sctx->parent_root = btrfs_get_fs_root(fs_info, arg->parent_root,
56e9357a1e8167 David Sterba 2020-05-15 7405 true);
b1b195969fe6d9 Stefan Behrens 2013-05-13 7406 if (IS_ERR(sctx->parent_root)) {
b1b195969fe6d9 Stefan Behrens 2013-05-13 7407 ret = PTR_ERR(sctx->parent_root);
31db9f7c23fbf7 Alexander Block 2012-07-25 7408 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7409 }
18f687d5384493 Wang Shilong 2014-01-07 7410
2c68653787f91c David Sterba 2013-12-16 7411 spin_lock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba 2013-12-16 7412 sctx->parent_root->send_in_progress++;
521e0546c970c3 David Sterba 2014-04-15 7413 if (!btrfs_root_readonly(sctx->parent_root) ||
521e0546c970c3 David Sterba 2014-04-15 7414 btrfs_root_dead(sctx->parent_root)) {
2c68653787f91c David Sterba 2013-12-16 7415 spin_unlock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba 2013-12-16 7416 ret = -EPERM;
2c68653787f91c David Sterba 2013-12-16 7417 goto out;
2c68653787f91c David Sterba 2013-12-16 7418 }
62d54f3a7fa27e Filipe Manana 2019-04-22 7419 if (sctx->parent_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana 2019-04-22 7420 dedupe_in_progress_warn(sctx->parent_root);
62d54f3a7fa27e Filipe Manana 2019-04-22 7421 spin_unlock(&sctx->parent_root->root_item_lock);
62d54f3a7fa27e Filipe Manana 2019-04-22 7422 ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana 2019-04-22 7423 goto out;
62d54f3a7fa27e Filipe Manana 2019-04-22 7424 }
2c68653787f91c David Sterba 2013-12-16 7425 spin_unlock(&sctx->parent_root->root_item_lock);
31db9f7c23fbf7 Alexander Block 2012-07-25 7426 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7427
31db9f7c23fbf7 Alexander Block 2012-07-25 7428 /*
31db9f7c23fbf7 Alexander Block 2012-07-25 7429 * Clones from send_root are allowed, but only if the clone source
31db9f7c23fbf7 Alexander Block 2012-07-25 7430 * is behind the current send position. This is checked while searching
31db9f7c23fbf7 Alexander Block 2012-07-25 7431 * for possible clone sources.
31db9f7c23fbf7 Alexander Block 2012-07-25 7432 */
6f9a3da5da9e7e Josef Bacik 2020-01-24 7433 sctx->clone_roots[sctx->clone_roots_cnt++].root =
0024652895e347 Josef Bacik 2020-01-24 7434 btrfs_grab_root(sctx->send_root);
31db9f7c23fbf7 Alexander Block 2012-07-25 7435
31db9f7c23fbf7 Alexander Block 2012-07-25 7436 /* We do a bsearch later */
31db9f7c23fbf7 Alexander Block 2012-07-25 7437 sort(sctx->clone_roots, sctx->clone_roots_cnt,
31db9f7c23fbf7 Alexander Block 2012-07-25 7438 sizeof(*sctx->clone_roots), __clone_root_cmp_sort,
31db9f7c23fbf7 Alexander Block 2012-07-25 7439 NULL);
896c14f97f700a Wang Shilong 2014-01-07 7440 sort_clone_roots = 1;
31db9f7c23fbf7 Alexander Block 2012-07-25 7441
9f89d5de8631c7 Filipe Manana 2019-04-15 7442 ret = flush_delalloc_roots(sctx);
9f89d5de8631c7 Filipe Manana 2019-04-15 7443 if (ret)
9f89d5de8631c7 Filipe Manana 2019-04-15 7444 goto out;
9f89d5de8631c7 Filipe Manana 2019-04-15 7445
e5fa8f865b3324 Filipe Manana 2014-10-21 7446 ret = ensure_commit_roots_uptodate(sctx);
e5fa8f865b3324 Filipe Manana 2014-10-21 7447 if (ret)
e5fa8f865b3324 Filipe Manana 2014-10-21 7448 goto out;
e5fa8f865b3324 Filipe Manana 2014-10-21 7449
1cea5cf0e66429 Filipe Manana 2021-06-21 7450 spin_lock(&fs_info->send_reloc_lock);
1cea5cf0e66429 Filipe Manana 2021-06-21 7451 if (test_bit(BTRFS_FS_RELOC_RUNNING, &fs_info->flags)) {
1cea5cf0e66429 Filipe Manana 2021-06-21 7452 spin_unlock(&fs_info->send_reloc_lock);
9e967495e0e0ae Filipe Manana 2019-04-22 7453 btrfs_warn_rl(fs_info,
1cea5cf0e66429 Filipe Manana 2021-06-21 7454 "cannot run send because a relocation operation is in progress");
9e967495e0e0ae Filipe Manana 2019-04-22 7455 ret = -EAGAIN;
9e967495e0e0ae Filipe Manana 2019-04-22 7456 goto out;
9e967495e0e0ae Filipe Manana 2019-04-22 7457 }
9e967495e0e0ae Filipe Manana 2019-04-22 7458 fs_info->send_in_progress++;
1cea5cf0e66429 Filipe Manana 2021-06-21 7459 spin_unlock(&fs_info->send_reloc_lock);
9e967495e0e0ae Filipe Manana 2019-04-22 7460
31db9f7c23fbf7 Alexander Block 2012-07-25 7461 ret = send_subvol(sctx);
1cea5cf0e66429 Filipe Manana 2021-06-21 7462 spin_lock(&fs_info->send_reloc_lock);
9e967495e0e0ae Filipe Manana 2019-04-22 7463 fs_info->send_in_progress--;
1cea5cf0e66429 Filipe Manana 2021-06-21 7464 spin_unlock(&fs_info->send_reloc_lock);
31db9f7c23fbf7 Alexander Block 2012-07-25 7465 if (ret < 0)
31db9f7c23fbf7 Alexander Block 2012-07-25 7466 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7467
c2c71324ecb471 Stefan Behrens 2013-04-10 7468 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7469 ret = begin_cmd(sctx, BTRFS_SEND_C_END);
31db9f7c23fbf7 Alexander Block 2012-07-25 7470 if (ret < 0)
31db9f7c23fbf7 Alexander Block 2012-07-25 7471 goto out;
31db9f7c23fbf7 Alexander Block 2012-07-25 7472 ret = send_cmd(sctx);
31db9f7c23fbf7 Alexander Block 2012-07-25 7473 if (ret < 0)
31db9f7c23fbf7 Alexander Block 2012-07-25 7474 goto out;
c2c71324ecb471 Stefan Behrens 2013-04-10 7475 }
31db9f7c23fbf7 Alexander Block 2012-07-25 7476
31db9f7c23fbf7 Alexander Block 2012-07-25 7477 out:
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7478 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7479 while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7480 struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7481 struct pending_dir_move *pm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7482
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7483 n = rb_first(&sctx->pending_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7484 pm = rb_entry(n, struct pending_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7485 while (!list_empty(&pm->list)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7486 struct pending_dir_move *pm2;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7487
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7488 pm2 = list_first_entry(&pm->list,
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7489 struct pending_dir_move, list);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7490 free_pending_move(sctx, pm2);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7491 }
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7492 free_pending_move(sctx, pm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7493 }
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7494
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7495 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7496 while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7497 struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7498 struct waiting_dir_move *dm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7499
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7500 n = rb_first(&sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7501 dm = rb_entry(n, struct waiting_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7502 rb_erase(&dm->node, &sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7503 kfree(dm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7504 }
9f03740a956d7a Filipe David Borba Manana 2014-01-22 7505
9dc442143b9874 Filipe Manana 2014-02-19 7506 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs));
9dc442143b9874 Filipe Manana 2014-02-19 7507 while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) {
9dc442143b9874 Filipe Manana 2014-02-19 7508 struct rb_node *n;
9dc442143b9874 Filipe Manana 2014-02-19 7509 struct orphan_dir_info *odi;
9dc442143b9874 Filipe Manana 2014-02-19 7510
9dc442143b9874 Filipe Manana 2014-02-19 7511 n = rb_first(&sctx->orphan_dirs);
9dc442143b9874 Filipe Manana 2014-02-19 7512 odi = rb_entry(n, struct orphan_dir_info, node);
9dc442143b9874 Filipe Manana 2014-02-19 7513 free_orphan_dir_info(sctx, odi);
9dc442143b9874 Filipe Manana 2014-02-19 7514 }
9dc442143b9874 Filipe Manana 2014-02-19 7515
896c14f97f700a Wang Shilong 2014-01-07 7516 if (sort_clone_roots) {
6f9a3da5da9e7e Josef Bacik 2020-01-24 7517 for (i = 0; i < sctx->clone_roots_cnt; i++) {
896c14f97f700a Wang Shilong 2014-01-07 7518 btrfs_root_dec_send_in_progress(
896c14f97f700a Wang Shilong 2014-01-07 7519 sctx->clone_roots[i].root);
0024652895e347 Josef Bacik 2020-01-24 7520 btrfs_put_root(sctx->clone_roots[i].root);
6f9a3da5da9e7e Josef Bacik 2020-01-24 7521 }
896c14f97f700a Wang Shilong 2014-01-07 7522 } else {
6f9a3da5da9e7e Josef Bacik 2020-01-24 7523 for (i = 0; sctx && i < clone_sources_to_rollback; i++) {
896c14f97f700a Wang Shilong 2014-01-07 7524 btrfs_root_dec_send_in_progress(
896c14f97f700a Wang Shilong 2014-01-07 7525 sctx->clone_roots[i].root);
0024652895e347 Josef Bacik 2020-01-24 7526 btrfs_put_root(sctx->clone_roots[i].root);
6f9a3da5da9e7e Josef Bacik 2020-01-24 7527 }
896c14f97f700a Wang Shilong 2014-01-07 7528
896c14f97f700a Wang Shilong 2014-01-07 7529 btrfs_root_dec_send_in_progress(send_root);
896c14f97f700a Wang Shilong 2014-01-07 7530 }
6f9a3da5da9e7e Josef Bacik 2020-01-24 7531 if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) {
66ef7d65c3fc6e David Sterba 2013-12-17 7532 btrfs_root_dec_send_in_progress(sctx->parent_root);
0024652895e347 Josef Bacik 2020-01-24 7533 btrfs_put_root(sctx->parent_root);
6f9a3da5da9e7e Josef Bacik 2020-01-24 7534 }
2c68653787f91c David Sterba 2013-12-16 7535
2f91306a378099 David Sterba 2016-04-11 7536 kvfree(clone_sources_tmp);
31db9f7c23fbf7 Alexander Block 2012-07-25 7537
31db9f7c23fbf7 Alexander Block 2012-07-25 7538 if (sctx) {
31db9f7c23fbf7 Alexander Block 2012-07-25 7539 if (sctx->send_filp)
31db9f7c23fbf7 Alexander Block 2012-07-25 7540 fput(sctx->send_filp);
31db9f7c23fbf7 Alexander Block 2012-07-25 7541
c03d01f3404282 David Sterba 2016-04-11 7542 kvfree(sctx->clone_roots);
5ea052d103ec66 Omar Sandoval 2020-05-01 7543 if (sctx->flags & BTRFS_SEND_FLAG_STREAM_V2) {
5ea052d103ec66 Omar Sandoval 2020-05-01 7544 vunmap(sctx->send_buf);
5ea052d103ec66 Omar Sandoval 2020-05-01 7545 for (i = 0; i < send_buf_num_pages; i++) {
5ea052d103ec66 Omar Sandoval 2020-05-01 @7546 if (sctx->send_buf_pages[i])
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 38140 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-08-19 17:54 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-19 17:54 [osandov:btrfs-send-encoded-v10 12/14] fs/btrfs/send.c:7546 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7319) 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.