CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: Omar Sandoval <osan...@osandov.com> CC: linux-ker...@vger.kernel.org TO: Omar Sandoval <osan...@fb.com> CC: Nikolay Borisov <nbori...@suse.com>
tree: https://github.com/osandov/linux.git btrfs-send-encoded head: 5b9ba5f160f0ee412cf4d94f8e15b54b1ba04758 commit: e11574dd48a2e1674f9d65592595283a9284115e [5/7] btrfs: send: allocate send buffer with alloc_page() and vmap() for v2 :::::: branch date: 15 hours ago :::::: commit date: 15 hours ago config: x86_64-randconfig-m001-20220314 (https://download.01.org/0day-ci/archive/20220316/202203161918.yllxvwcm-...@intel.com/config) compiler: gcc-9 (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> Reported-by: Dan Carpenter <dan.carpen...@oracle.com> smatch warnings: fs/btrfs/send.c:7705 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7492) vim +7705 fs/btrfs/send.c 62d54f3a7fa27e Filipe Manana 2019-04-22 7387 9ad1230533efb6 Sahil Kang 2022-01-15 7388 long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg) 31db9f7c23fbf7 Alexander Block 2012-07-25 7389 { 31db9f7c23fbf7 Alexander Block 2012-07-25 7390 int ret = 0; 9ad1230533efb6 Sahil Kang 2022-01-15 7391 struct btrfs_root *send_root = BTRFS_I(inode)->root; 0b246afa62b0cf Jeff Mahoney 2016-06-22 7392 struct btrfs_fs_info *fs_info = send_root->fs_info; 31db9f7c23fbf7 Alexander Block 2012-07-25 7393 struct btrfs_root *clone_root; 31db9f7c23fbf7 Alexander Block 2012-07-25 7394 struct send_ctx *sctx = NULL; 31db9f7c23fbf7 Alexander Block 2012-07-25 7395 u32 i; e11574dd48a2e1 Omar Sandoval 2020-05-01 7396 u32 send_buf_num_pages = 0; 31db9f7c23fbf7 Alexander Block 2012-07-25 7397 u64 *clone_sources_tmp = NULL; 2c68653787f91c David Sterba 2013-12-16 7398 int clone_sources_to_rollback = 0; bae12df966f0e1 Denis Efremov 2020-09-21 7399 size_t alloc_size; 896c14f97f700a Wang Shilong 2014-01-07 7400 int sort_clone_roots = 0; 31db9f7c23fbf7 Alexander Block 2012-07-25 7401 31db9f7c23fbf7 Alexander Block 2012-07-25 7402 if (!capable(CAP_SYS_ADMIN)) 31db9f7c23fbf7 Alexander Block 2012-07-25 7403 return -EPERM; 31db9f7c23fbf7 Alexander Block 2012-07-25 7404 2c68653787f91c David Sterba 2013-12-16 7405 /* 2c68653787f91c David Sterba 2013-12-16 7406 * The subvolume must remain read-only during send, protect against 521e0546c970c3 David Sterba 2014-04-15 7407 * making it RW. This also protects against deletion. 2c68653787f91c David Sterba 2013-12-16 7408 */ 2c68653787f91c David Sterba 2013-12-16 7409 spin_lock(&send_root->root_item_lock); 62d54f3a7fa27e Filipe Manana 2019-04-22 7410 if (btrfs_root_readonly(send_root) && send_root->dedupe_in_progress) { 62d54f3a7fa27e Filipe Manana 2019-04-22 7411 dedupe_in_progress_warn(send_root); 62d54f3a7fa27e Filipe Manana 2019-04-22 7412 spin_unlock(&send_root->root_item_lock); 62d54f3a7fa27e Filipe Manana 2019-04-22 7413 return -EAGAIN; 62d54f3a7fa27e Filipe Manana 2019-04-22 7414 } 2c68653787f91c David Sterba 2013-12-16 7415 send_root->send_in_progress++; 2c68653787f91c David Sterba 2013-12-16 7416 spin_unlock(&send_root->root_item_lock); 2c68653787f91c David Sterba 2013-12-16 7417 2c68653787f91c David Sterba 2013-12-16 7418 /* 2c68653787f91c David Sterba 2013-12-16 7419 * Userspace tools do the checks and warn the user if it's 2c68653787f91c David Sterba 2013-12-16 7420 * not RO. 2c68653787f91c David Sterba 2013-12-16 7421 */ 2c68653787f91c David Sterba 2013-12-16 7422 if (!btrfs_root_readonly(send_root)) { 2c68653787f91c David Sterba 2013-12-16 7423 ret = -EPERM; 2c68653787f91c David Sterba 2013-12-16 7424 goto out; 2c68653787f91c David Sterba 2013-12-16 7425 } 2c68653787f91c David Sterba 2013-12-16 7426 457ae7268b29c3 Dan Carpenter 2017-03-17 7427 /* 457ae7268b29c3 Dan Carpenter 2017-03-17 7428 * Check that we don't overflow at later allocations, we request 457ae7268b29c3 Dan Carpenter 2017-03-17 7429 * clone_sources_count + 1 items, and compare to unsigned long inside 457ae7268b29c3 Dan Carpenter 2017-03-17 7430 * access_ok. 457ae7268b29c3 Dan Carpenter 2017-03-17 7431 */ f5ecec3ce21f70 Dan Carpenter 2016-04-13 7432 if (arg->clone_sources_count > 457ae7268b29c3 Dan Carpenter 2017-03-17 7433 ULONG_MAX / sizeof(struct clone_root) - 1) { f5ecec3ce21f70 Dan Carpenter 2016-04-13 7434 ret = -EINVAL; f5ecec3ce21f70 Dan Carpenter 2016-04-13 7435 goto out; f5ecec3ce21f70 Dan Carpenter 2016-04-13 7436 } f5ecec3ce21f70 Dan Carpenter 2016-04-13 7437 c2c71324ecb471 Stefan Behrens 2013-04-10 7438 if (arg->flags & ~BTRFS_SEND_FLAG_MASK) { cb95e7bf7ba481 Mark Fasheh 2013-02-04 7439 ret = -EINVAL; cb95e7bf7ba481 Mark Fasheh 2013-02-04 7440 goto out; cb95e7bf7ba481 Mark Fasheh 2013-02-04 7441 } cb95e7bf7ba481 Mark Fasheh 2013-02-04 7442 e780b0d1c1523e David Sterba 2016-01-18 7443 sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL); 31db9f7c23fbf7 Alexander Block 2012-07-25 7444 if (!sctx) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7445 ret = -ENOMEM; 31db9f7c23fbf7 Alexander Block 2012-07-25 7446 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7447 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7448 31db9f7c23fbf7 Alexander Block 2012-07-25 7449 INIT_LIST_HEAD(&sctx->new_refs); 31db9f7c23fbf7 Alexander Block 2012-07-25 7450 INIT_LIST_HEAD(&sctx->deleted_refs); e780b0d1c1523e David Sterba 2016-01-18 7451 INIT_RADIX_TREE(&sctx->name_cache, GFP_KERNEL); 31db9f7c23fbf7 Alexander Block 2012-07-25 7452 INIT_LIST_HEAD(&sctx->name_cache_list); 31db9f7c23fbf7 Alexander Block 2012-07-25 7453 cb95e7bf7ba481 Mark Fasheh 2013-02-04 7454 sctx->flags = arg->flags; cb95e7bf7ba481 Mark Fasheh 2013-02-04 7455 e77fbf990316d4 David Sterba 2021-10-22 7456 if (arg->flags & BTRFS_SEND_FLAG_VERSION) { e77fbf990316d4 David Sterba 2021-10-22 7457 if (arg->version > BTRFS_SEND_STREAM_VERSION) { e77fbf990316d4 David Sterba 2021-10-22 7458 ret = -EPROTO; e77fbf990316d4 David Sterba 2021-10-22 7459 goto out; e77fbf990316d4 David Sterba 2021-10-22 7460 } e77fbf990316d4 David Sterba 2021-10-22 7461 /* Zero means "use the highest version" */ e77fbf990316d4 David Sterba 2021-10-22 7462 sctx->proto = arg->version ?: BTRFS_SEND_STREAM_VERSION; e77fbf990316d4 David Sterba 2021-10-22 7463 } else { e77fbf990316d4 David Sterba 2021-10-22 7464 sctx->proto = 1; e77fbf990316d4 David Sterba 2021-10-22 7465 } e77fbf990316d4 David Sterba 2021-10-22 7466 31db9f7c23fbf7 Alexander Block 2012-07-25 7467 sctx->send_filp = fget(arg->send_fd); ecc7ada77b5cd1 Tsutomu Itoh 2013-04-19 7468 if (!sctx->send_filp) { ecc7ada77b5cd1 Tsutomu Itoh 2013-04-19 7469 ret = -EBADF; 31db9f7c23fbf7 Alexander Block 2012-07-25 7470 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7471 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7472 31db9f7c23fbf7 Alexander Block 2012-07-25 7473 sctx->send_root = send_root; 521e0546c970c3 David Sterba 2014-04-15 7474 /* 521e0546c970c3 David Sterba 2014-04-15 7475 * Unlikely but possible, if the subvolume is marked for deletion but 521e0546c970c3 David Sterba 2014-04-15 7476 * is slow to remove the directory entry, send can still be started 521e0546c970c3 David Sterba 2014-04-15 7477 */ 521e0546c970c3 David Sterba 2014-04-15 7478 if (btrfs_root_dead(sctx->send_root)) { 521e0546c970c3 David Sterba 2014-04-15 7479 ret = -EPERM; 521e0546c970c3 David Sterba 2014-04-15 7480 goto out; 521e0546c970c3 David Sterba 2014-04-15 7481 } 521e0546c970c3 David Sterba 2014-04-15 7482 31db9f7c23fbf7 Alexander Block 2012-07-25 7483 sctx->clone_roots_cnt = arg->clone_sources_count; 31db9f7c23fbf7 Alexander Block 2012-07-25 7484 bed783710857f5 Omar Sandoval 2020-05-13 7485 if (sctx->proto >= 2) { bed783710857f5 Omar Sandoval 2020-05-13 7486 sctx->send_max_size = ALIGN(SZ_16K + BTRFS_MAX_COMPRESSED, bed783710857f5 Omar Sandoval 2020-05-13 7487 PAGE_SIZE); e11574dd48a2e1 Omar Sandoval 2020-05-01 7488 send_buf_num_pages = sctx->send_max_size >> PAGE_SHIFT; e11574dd48a2e1 Omar Sandoval 2020-05-01 7489 sctx->send_buf_pages = kcalloc(send_buf_num_pages, e11574dd48a2e1 Omar Sandoval 2020-05-01 7490 sizeof(*sctx->send_buf_pages), e11574dd48a2e1 Omar Sandoval 2020-05-01 7491 GFP_KERNEL); e11574dd48a2e1 Omar Sandoval 2020-05-01 7492 if (!sctx->send_buf_pages) { e11574dd48a2e1 Omar Sandoval 2020-05-01 7493 send_buf_num_pages = 0; e11574dd48a2e1 Omar Sandoval 2020-05-01 7494 ret = -ENOMEM; e11574dd48a2e1 Omar Sandoval 2020-05-01 7495 goto out; e11574dd48a2e1 Omar Sandoval 2020-05-01 7496 } e11574dd48a2e1 Omar Sandoval 2020-05-01 7497 for (i = 0; i < send_buf_num_pages; i++) { e11574dd48a2e1 Omar Sandoval 2020-05-01 7498 sctx->send_buf_pages[i] = alloc_page(GFP_KERNEL); e11574dd48a2e1 Omar Sandoval 2020-05-01 7499 if (!sctx->send_buf_pages[i]) { e11574dd48a2e1 Omar Sandoval 2020-05-01 7500 ret = -ENOMEM; e11574dd48a2e1 Omar Sandoval 2020-05-01 7501 goto out; e11574dd48a2e1 Omar Sandoval 2020-05-01 7502 } e11574dd48a2e1 Omar Sandoval 2020-05-01 7503 } e11574dd48a2e1 Omar Sandoval 2020-05-01 7504 sctx->send_buf = vmap(sctx->send_buf_pages, send_buf_num_pages, e11574dd48a2e1 Omar Sandoval 2020-05-01 7505 VM_MAP, PAGE_KERNEL); bed783710857f5 Omar Sandoval 2020-05-13 7506 } else { 6136b03819c025 Omar Sandoval 2020-05-12 7507 sctx->send_max_size = BTRFS_SEND_BUF_SIZE_V1; 752ade68cbd81d Michal Hocko 2017-05-08 7508 sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL); e11574dd48a2e1 Omar Sandoval 2020-05-01 7509 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7510 if (!sctx->send_buf) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7511 ret = -ENOMEM; 31db9f7c23fbf7 Alexander Block 2012-07-25 7512 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7513 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7514 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7515 sctx->pending_dir_moves = RB_ROOT; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7516 sctx->waiting_dir_moves = RB_ROOT; 9dc442143b9874 Filipe Manana 2014-02-19 7517 sctx->orphan_dirs = RB_ROOT; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7518 bae12df966f0e1 Denis Efremov 2020-09-21 7519 sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots), bae12df966f0e1 Denis Efremov 2020-09-21 7520 arg->clone_sources_count + 1, bae12df966f0e1 Denis Efremov 2020-09-21 7521 GFP_KERNEL); 31db9f7c23fbf7 Alexander Block 2012-07-25 7522 if (!sctx->clone_roots) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7523 ret = -ENOMEM; 31db9f7c23fbf7 Alexander Block 2012-07-25 7524 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7525 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7526 bae12df966f0e1 Denis Efremov 2020-09-21 7527 alloc_size = array_size(sizeof(*arg->clone_sources), bae12df966f0e1 Denis Efremov 2020-09-21 7528 arg->clone_sources_count); e55d1153dbf484 David Sterba 2016-04-11 7529 31db9f7c23fbf7 Alexander Block 2012-07-25 7530 if (arg->clone_sources_count) { 752ade68cbd81d Michal Hocko 2017-05-08 7531 clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL); 31db9f7c23fbf7 Alexander Block 2012-07-25 7532 if (!clone_sources_tmp) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7533 ret = -ENOMEM; 31db9f7c23fbf7 Alexander Block 2012-07-25 7534 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7535 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7536 31db9f7c23fbf7 Alexander Block 2012-07-25 7537 ret = copy_from_user(clone_sources_tmp, arg->clone_sources, e55d1153dbf484 David Sterba 2016-04-11 7538 alloc_size); 31db9f7c23fbf7 Alexander Block 2012-07-25 7539 if (ret) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7540 ret = -EFAULT; 31db9f7c23fbf7 Alexander Block 2012-07-25 7541 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7542 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7543 31db9f7c23fbf7 Alexander Block 2012-07-25 7544 for (i = 0; i < arg->clone_sources_count; i++) { 56e9357a1e8167 David Sterba 2020-05-15 7545 clone_root = btrfs_get_fs_root(fs_info, 56e9357a1e8167 David Sterba 2020-05-15 7546 clone_sources_tmp[i], true); 31db9f7c23fbf7 Alexander Block 2012-07-25 7547 if (IS_ERR(clone_root)) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7548 ret = PTR_ERR(clone_root); 31db9f7c23fbf7 Alexander Block 2012-07-25 7549 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7550 } 2c68653787f91c David Sterba 2013-12-16 7551 spin_lock(&clone_root->root_item_lock); 5cc2b17e80cf57 Filipe Manana 2015-03-02 7552 if (!btrfs_root_readonly(clone_root) || 5cc2b17e80cf57 Filipe Manana 2015-03-02 7553 btrfs_root_dead(clone_root)) { 2c68653787f91c David Sterba 2013-12-16 7554 spin_unlock(&clone_root->root_item_lock); 0024652895e347 Josef Bacik 2020-01-24 7555 btrfs_put_root(clone_root); 2c68653787f91c David Sterba 2013-12-16 7556 ret = -EPERM; 2c68653787f91c David Sterba 2013-12-16 7557 goto out; 2c68653787f91c David Sterba 2013-12-16 7558 } 62d54f3a7fa27e Filipe Manana 2019-04-22 7559 if (clone_root->dedupe_in_progress) { 62d54f3a7fa27e Filipe Manana 2019-04-22 7560 dedupe_in_progress_warn(clone_root); 62d54f3a7fa27e Filipe Manana 2019-04-22 7561 spin_unlock(&clone_root->root_item_lock); 0024652895e347 Josef Bacik 2020-01-24 7562 btrfs_put_root(clone_root); 62d54f3a7fa27e Filipe Manana 2019-04-22 7563 ret = -EAGAIN; 62d54f3a7fa27e Filipe Manana 2019-04-22 7564 goto out; 62d54f3a7fa27e Filipe Manana 2019-04-22 7565 } 2f1f465ae6da24 Filipe Manana 2015-03-02 7566 clone_root->send_in_progress++; 2c68653787f91c David Sterba 2013-12-16 7567 spin_unlock(&clone_root->root_item_lock); 18f687d5384493 Wang Shilong 2014-01-07 7568 31db9f7c23fbf7 Alexander Block 2012-07-25 7569 sctx->clone_roots[i].root = clone_root; 2f1f465ae6da24 Filipe Manana 2015-03-02 7570 clone_sources_to_rollback = i + 1; 31db9f7c23fbf7 Alexander Block 2012-07-25 7571 } 2f91306a378099 David Sterba 2016-04-11 7572 kvfree(clone_sources_tmp); 31db9f7c23fbf7 Alexander Block 2012-07-25 7573 clone_sources_tmp = NULL; 31db9f7c23fbf7 Alexander Block 2012-07-25 7574 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7575 31db9f7c23fbf7 Alexander Block 2012-07-25 7576 if (arg->parent_root) { 56e9357a1e8167 David Sterba 2020-05-15 7577 sctx->parent_root = btrfs_get_fs_root(fs_info, arg->parent_root, 56e9357a1e8167 David Sterba 2020-05-15 7578 true); b1b195969fe6d9 Stefan Behrens 2013-05-13 7579 if (IS_ERR(sctx->parent_root)) { b1b195969fe6d9 Stefan Behrens 2013-05-13 7580 ret = PTR_ERR(sctx->parent_root); 31db9f7c23fbf7 Alexander Block 2012-07-25 7581 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7582 } 18f687d5384493 Wang Shilong 2014-01-07 7583 2c68653787f91c David Sterba 2013-12-16 7584 spin_lock(&sctx->parent_root->root_item_lock); 2c68653787f91c David Sterba 2013-12-16 7585 sctx->parent_root->send_in_progress++; 521e0546c970c3 David Sterba 2014-04-15 7586 if (!btrfs_root_readonly(sctx->parent_root) || 521e0546c970c3 David Sterba 2014-04-15 7587 btrfs_root_dead(sctx->parent_root)) { 2c68653787f91c David Sterba 2013-12-16 7588 spin_unlock(&sctx->parent_root->root_item_lock); 2c68653787f91c David Sterba 2013-12-16 7589 ret = -EPERM; 2c68653787f91c David Sterba 2013-12-16 7590 goto out; 2c68653787f91c David Sterba 2013-12-16 7591 } 62d54f3a7fa27e Filipe Manana 2019-04-22 7592 if (sctx->parent_root->dedupe_in_progress) { 62d54f3a7fa27e Filipe Manana 2019-04-22 7593 dedupe_in_progress_warn(sctx->parent_root); 62d54f3a7fa27e Filipe Manana 2019-04-22 7594 spin_unlock(&sctx->parent_root->root_item_lock); 62d54f3a7fa27e Filipe Manana 2019-04-22 7595 ret = -EAGAIN; 62d54f3a7fa27e Filipe Manana 2019-04-22 7596 goto out; 62d54f3a7fa27e Filipe Manana 2019-04-22 7597 } 2c68653787f91c David Sterba 2013-12-16 7598 spin_unlock(&sctx->parent_root->root_item_lock); 31db9f7c23fbf7 Alexander Block 2012-07-25 7599 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7600 31db9f7c23fbf7 Alexander Block 2012-07-25 7601 /* 31db9f7c23fbf7 Alexander Block 2012-07-25 7602 * Clones from send_root are allowed, but only if the clone source 31db9f7c23fbf7 Alexander Block 2012-07-25 7603 * is behind the current send position. This is checked while searching 31db9f7c23fbf7 Alexander Block 2012-07-25 7604 * for possible clone sources. 31db9f7c23fbf7 Alexander Block 2012-07-25 7605 */ 6f9a3da5da9e7e Josef Bacik 2020-01-24 7606 sctx->clone_roots[sctx->clone_roots_cnt++].root = 0024652895e347 Josef Bacik 2020-01-24 7607 btrfs_grab_root(sctx->send_root); 31db9f7c23fbf7 Alexander Block 2012-07-25 7608 31db9f7c23fbf7 Alexander Block 2012-07-25 7609 /* We do a bsearch later */ 31db9f7c23fbf7 Alexander Block 2012-07-25 7610 sort(sctx->clone_roots, sctx->clone_roots_cnt, 31db9f7c23fbf7 Alexander Block 2012-07-25 7611 sizeof(*sctx->clone_roots), __clone_root_cmp_sort, 31db9f7c23fbf7 Alexander Block 2012-07-25 7612 NULL); 896c14f97f700a Wang Shilong 2014-01-07 7613 sort_clone_roots = 1; 31db9f7c23fbf7 Alexander Block 2012-07-25 7614 9f89d5de8631c7 Filipe Manana 2019-04-15 7615 ret = flush_delalloc_roots(sctx); 9f89d5de8631c7 Filipe Manana 2019-04-15 7616 if (ret) 9f89d5de8631c7 Filipe Manana 2019-04-15 7617 goto out; 9f89d5de8631c7 Filipe Manana 2019-04-15 7618 e5fa8f865b3324 Filipe Manana 2014-10-21 7619 ret = ensure_commit_roots_uptodate(sctx); e5fa8f865b3324 Filipe Manana 2014-10-21 7620 if (ret) e5fa8f865b3324 Filipe Manana 2014-10-21 7621 goto out; e5fa8f865b3324 Filipe Manana 2014-10-21 7622 31db9f7c23fbf7 Alexander Block 2012-07-25 7623 ret = send_subvol(sctx); 31db9f7c23fbf7 Alexander Block 2012-07-25 7624 if (ret < 0) 31db9f7c23fbf7 Alexander Block 2012-07-25 7625 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7626 c2c71324ecb471 Stefan Behrens 2013-04-10 7627 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7628 ret = begin_cmd(sctx, BTRFS_SEND_C_END); 31db9f7c23fbf7 Alexander Block 2012-07-25 7629 if (ret < 0) 31db9f7c23fbf7 Alexander Block 2012-07-25 7630 goto out; 31db9f7c23fbf7 Alexander Block 2012-07-25 7631 ret = send_cmd(sctx); 31db9f7c23fbf7 Alexander Block 2012-07-25 7632 if (ret < 0) 31db9f7c23fbf7 Alexander Block 2012-07-25 7633 goto out; c2c71324ecb471 Stefan Behrens 2013-04-10 7634 } 31db9f7c23fbf7 Alexander Block 2012-07-25 7635 31db9f7c23fbf7 Alexander Block 2012-07-25 7636 out: 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7637 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7638 while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) { 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7639 struct rb_node *n; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7640 struct pending_dir_move *pm; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7641 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7642 n = rb_first(&sctx->pending_dir_moves); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7643 pm = rb_entry(n, struct pending_dir_move, node); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7644 while (!list_empty(&pm->list)) { 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7645 struct pending_dir_move *pm2; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7646 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7647 pm2 = list_first_entry(&pm->list, 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7648 struct pending_dir_move, list); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7649 free_pending_move(sctx, pm2); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7650 } 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7651 free_pending_move(sctx, pm); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7652 } 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7653 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7654 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7655 while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) { 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7656 struct rb_node *n; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7657 struct waiting_dir_move *dm; 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7658 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7659 n = rb_first(&sctx->waiting_dir_moves); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7660 dm = rb_entry(n, struct waiting_dir_move, node); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7661 rb_erase(&dm->node, &sctx->waiting_dir_moves); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7662 kfree(dm); 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7663 } 9f03740a956d7a Filipe David Borba Manana 2014-01-22 7664 9dc442143b9874 Filipe Manana 2014-02-19 7665 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs)); 9dc442143b9874 Filipe Manana 2014-02-19 7666 while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) { 9dc442143b9874 Filipe Manana 2014-02-19 7667 struct rb_node *n; 9dc442143b9874 Filipe Manana 2014-02-19 7668 struct orphan_dir_info *odi; 9dc442143b9874 Filipe Manana 2014-02-19 7669 9dc442143b9874 Filipe Manana 2014-02-19 7670 n = rb_first(&sctx->orphan_dirs); 9dc442143b9874 Filipe Manana 2014-02-19 7671 odi = rb_entry(n, struct orphan_dir_info, node); 9dc442143b9874 Filipe Manana 2014-02-19 7672 free_orphan_dir_info(sctx, odi); 9dc442143b9874 Filipe Manana 2014-02-19 7673 } 9dc442143b9874 Filipe Manana 2014-02-19 7674 896c14f97f700a Wang Shilong 2014-01-07 7675 if (sort_clone_roots) { 6f9a3da5da9e7e Josef Bacik 2020-01-24 7676 for (i = 0; i < sctx->clone_roots_cnt; i++) { 896c14f97f700a Wang Shilong 2014-01-07 7677 btrfs_root_dec_send_in_progress( 896c14f97f700a Wang Shilong 2014-01-07 7678 sctx->clone_roots[i].root); 0024652895e347 Josef Bacik 2020-01-24 7679 btrfs_put_root(sctx->clone_roots[i].root); 6f9a3da5da9e7e Josef Bacik 2020-01-24 7680 } 896c14f97f700a Wang Shilong 2014-01-07 7681 } else { 6f9a3da5da9e7e Josef Bacik 2020-01-24 7682 for (i = 0; sctx && i < clone_sources_to_rollback; i++) { 896c14f97f700a Wang Shilong 2014-01-07 7683 btrfs_root_dec_send_in_progress( 896c14f97f700a Wang Shilong 2014-01-07 7684 sctx->clone_roots[i].root); 0024652895e347 Josef Bacik 2020-01-24 7685 btrfs_put_root(sctx->clone_roots[i].root); 6f9a3da5da9e7e Josef Bacik 2020-01-24 7686 } 896c14f97f700a Wang Shilong 2014-01-07 7687 896c14f97f700a Wang Shilong 2014-01-07 7688 btrfs_root_dec_send_in_progress(send_root); 896c14f97f700a Wang Shilong 2014-01-07 7689 } 6f9a3da5da9e7e Josef Bacik 2020-01-24 7690 if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) { 66ef7d65c3fc6e David Sterba 2013-12-17 7691 btrfs_root_dec_send_in_progress(sctx->parent_root); 0024652895e347 Josef Bacik 2020-01-24 7692 btrfs_put_root(sctx->parent_root); 6f9a3da5da9e7e Josef Bacik 2020-01-24 7693 } 2c68653787f91c David Sterba 2013-12-16 7694 2f91306a378099 David Sterba 2016-04-11 7695 kvfree(clone_sources_tmp); 31db9f7c23fbf7 Alexander Block 2012-07-25 7696 31db9f7c23fbf7 Alexander Block 2012-07-25 7697 if (sctx) { 31db9f7c23fbf7 Alexander Block 2012-07-25 7698 if (sctx->send_filp) 31db9f7c23fbf7 Alexander Block 2012-07-25 7699 fput(sctx->send_filp); 31db9f7c23fbf7 Alexander Block 2012-07-25 7700 c03d01f3404282 David Sterba 2016-04-11 7701 kvfree(sctx->clone_roots); e11574dd48a2e1 Omar Sandoval 2020-05-01 7702 if (sctx->proto >= 2) { e11574dd48a2e1 Omar Sandoval 2020-05-01 7703 vunmap(sctx->send_buf); e11574dd48a2e1 Omar Sandoval 2020-05-01 7704 for (i = 0; i < send_buf_num_pages; i++) { e11574dd48a2e1 Omar Sandoval 2020-05-01 @7705 if (sctx->send_buf_pages[i]) --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org