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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to