CC: [email protected]
CC: Omar Sandoval <[email protected]>
CC: [email protected]
TO: Omar Sandoval <[email protected]>
CC: Nikolay Borisov <[email protected]>

tree:   https://github.com/osandov/linux.git btrfs-send-encoded
head:   b460af84b8ddd4fd78e02fec6272b70326b87861
commit: 7fc49b82d8d6e143a20b6a2243a520ec34e7cdd6 [12/14] btrfs: send: allocate 
send buffer with alloc_page() and vmap() for v2
:::::: branch date: 3 weeks ago
:::::: commit date: 3 weeks ago
config: x86_64-randconfig-m001-20211025 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.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:7539 btrfs_ioctl_send() error: we previously assumed 
'sctx->send_buf_pages' could be null (see line 7312)

vim +7539 fs/btrfs/send.c

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