CC: [email protected] CC: Omar Sandoval <[email protected]> CC: [email protected] TO: Omar Sandoval <[email protected]>
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 <[email protected]> Reported-by: Dan Carpenter <[email protected]> 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/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
