All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [osandov:btrfs-send-encoded 15/17] fs/btrfs/send.c:7806 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7593)
Date: Thu, 27 Jan 2022 08:29:31 +0800	[thread overview]
Message-ID: <202201270814.2gId9LNj-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 28567 bytes --]

CC: kbuild-all(a)lists.01.org
CC: Omar Sandoval <osandov@osandov.com>
CC: linux-kernel(a)vger.kernel.org
TO: Omar Sandoval <osandov@fb.com>
CC: Nikolay Borisov <nborisov@suse.com>

tree:   https://github.com/osandov/linux.git btrfs-send-encoded
head:   ec062ce505d22f204218f91a940b55fb38d66b07
commit: 57cd63d9f970d529c3cc9b80612cffd71b3186b9 [15/17] btrfs: send: allocate send buffer with alloc_page() and vmap() for v2
:::::: branch date: 27 hours ago
:::::: commit date: 27 hours ago
config: nios2-randconfig-m031-20220124 (https://download.01.org/0day-ci/archive/20220127/202201270814.2gId9LNj-lkp(a)intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
fs/btrfs/send.c:7806 btrfs_ioctl_send() error: we previously assumed 'sctx->send_buf_pages' could be null (see line 7593)

Old smatch warnings:
arch/nios2/include/asm/thread_info.h:71 current_thread_info() error: uninitialized symbol 'sp'.

vim +7806 fs/btrfs/send.c

62d54f3a7fa27e Filipe Manana             2019-04-22  7488  
786e6838d278ed Sahil Kang                2022-01-15  7489  long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg)
31db9f7c23fbf7 Alexander Block           2012-07-25  7490  {
31db9f7c23fbf7 Alexander Block           2012-07-25  7491  	int ret = 0;
786e6838d278ed Sahil Kang                2022-01-15  7492  	struct btrfs_root *send_root = BTRFS_I(inode)->root;
0b246afa62b0cf Jeff Mahoney              2016-06-22  7493  	struct btrfs_fs_info *fs_info = send_root->fs_info;
31db9f7c23fbf7 Alexander Block           2012-07-25  7494  	struct btrfs_root *clone_root;
31db9f7c23fbf7 Alexander Block           2012-07-25  7495  	struct send_ctx *sctx = NULL;
31db9f7c23fbf7 Alexander Block           2012-07-25  7496  	u32 i;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7497  	u32 send_buf_num_pages = 0;
31db9f7c23fbf7 Alexander Block           2012-07-25  7498  	u64 *clone_sources_tmp = NULL;
2c68653787f91c David Sterba              2013-12-16  7499  	int clone_sources_to_rollback = 0;
bae12df966f0e1 Denis Efremov             2020-09-21  7500  	size_t alloc_size;
896c14f97f700a Wang Shilong              2014-01-07  7501  	int sort_clone_roots = 0;
31db9f7c23fbf7 Alexander Block           2012-07-25  7502  
31db9f7c23fbf7 Alexander Block           2012-07-25  7503  	if (!capable(CAP_SYS_ADMIN))
31db9f7c23fbf7 Alexander Block           2012-07-25  7504  		return -EPERM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7505  
2c68653787f91c David Sterba              2013-12-16  7506  	/*
2c68653787f91c David Sterba              2013-12-16  7507  	 * The subvolume must remain read-only during send, protect against
521e0546c970c3 David Sterba              2014-04-15  7508  	 * making it RW. This also protects against deletion.
2c68653787f91c David Sterba              2013-12-16  7509  	 */
2c68653787f91c David Sterba              2013-12-16  7510  	spin_lock(&send_root->root_item_lock);
62d54f3a7fa27e Filipe Manana             2019-04-22  7511  	if (btrfs_root_readonly(send_root) && send_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  7512  		dedupe_in_progress_warn(send_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  7513  		spin_unlock(&send_root->root_item_lock);
62d54f3a7fa27e Filipe Manana             2019-04-22  7514  		return -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  7515  	}
2c68653787f91c David Sterba              2013-12-16  7516  	send_root->send_in_progress++;
2c68653787f91c David Sterba              2013-12-16  7517  	spin_unlock(&send_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  7518  
2c68653787f91c David Sterba              2013-12-16  7519  	/*
2c68653787f91c David Sterba              2013-12-16  7520  	 * Userspace tools do the checks and warn the user if it's
2c68653787f91c David Sterba              2013-12-16  7521  	 * not RO.
2c68653787f91c David Sterba              2013-12-16  7522  	 */
2c68653787f91c David Sterba              2013-12-16  7523  	if (!btrfs_root_readonly(send_root)) {
2c68653787f91c David Sterba              2013-12-16  7524  		ret = -EPERM;
2c68653787f91c David Sterba              2013-12-16  7525  		goto out;
2c68653787f91c David Sterba              2013-12-16  7526  	}
2c68653787f91c David Sterba              2013-12-16  7527  
457ae7268b29c3 Dan Carpenter             2017-03-17  7528  	/*
457ae7268b29c3 Dan Carpenter             2017-03-17  7529  	 * Check that we don't overflow at later allocations, we request
457ae7268b29c3 Dan Carpenter             2017-03-17  7530  	 * clone_sources_count + 1 items, and compare to unsigned long inside
457ae7268b29c3 Dan Carpenter             2017-03-17  7531  	 * access_ok.
457ae7268b29c3 Dan Carpenter             2017-03-17  7532  	 */
f5ecec3ce21f70 Dan Carpenter             2016-04-13  7533  	if (arg->clone_sources_count >
457ae7268b29c3 Dan Carpenter             2017-03-17  7534  	    ULONG_MAX / sizeof(struct clone_root) - 1) {
f5ecec3ce21f70 Dan Carpenter             2016-04-13  7535  		ret = -EINVAL;
f5ecec3ce21f70 Dan Carpenter             2016-04-13  7536  		goto out;
f5ecec3ce21f70 Dan Carpenter             2016-04-13  7537  	}
f5ecec3ce21f70 Dan Carpenter             2016-04-13  7538  
c2c71324ecb471 Stefan Behrens            2013-04-10  7539  	if (arg->flags & ~BTRFS_SEND_FLAG_MASK) {
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7540  		ret = -EINVAL;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7541  		goto out;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7542  	}
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7543  
e780b0d1c1523e David Sterba              2016-01-18  7544  	sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL);
31db9f7c23fbf7 Alexander Block           2012-07-25  7545  	if (!sctx) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7546  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7547  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7548  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7549  
31db9f7c23fbf7 Alexander Block           2012-07-25  7550  	INIT_LIST_HEAD(&sctx->new_refs);
31db9f7c23fbf7 Alexander Block           2012-07-25  7551  	INIT_LIST_HEAD(&sctx->deleted_refs);
e780b0d1c1523e David Sterba              2016-01-18  7552  	INIT_RADIX_TREE(&sctx->name_cache, GFP_KERNEL);
31db9f7c23fbf7 Alexander Block           2012-07-25  7553  	INIT_LIST_HEAD(&sctx->name_cache_list);
31db9f7c23fbf7 Alexander Block           2012-07-25  7554  
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7555  	sctx->flags = arg->flags;
cb95e7bf7ba481 Mark Fasheh               2013-02-04  7556  
e77fbf990316d4 David Sterba              2021-10-22  7557  	if (arg->flags & BTRFS_SEND_FLAG_VERSION) {
e77fbf990316d4 David Sterba              2021-10-22  7558  		if (arg->version > BTRFS_SEND_STREAM_VERSION) {
e77fbf990316d4 David Sterba              2021-10-22  7559  			ret = -EPROTO;
e77fbf990316d4 David Sterba              2021-10-22  7560  			goto out;
e77fbf990316d4 David Sterba              2021-10-22  7561  		}
e77fbf990316d4 David Sterba              2021-10-22  7562  		/* Zero means "use the highest version" */
e77fbf990316d4 David Sterba              2021-10-22  7563  		sctx->proto = arg->version ?: BTRFS_SEND_STREAM_VERSION;
e77fbf990316d4 David Sterba              2021-10-22  7564  	} else {
e77fbf990316d4 David Sterba              2021-10-22  7565  		sctx->proto = 1;
e77fbf990316d4 David Sterba              2021-10-22  7566  	}
e77fbf990316d4 David Sterba              2021-10-22  7567  
31db9f7c23fbf7 Alexander Block           2012-07-25  7568  	sctx->send_filp = fget(arg->send_fd);
ecc7ada77b5cd1 Tsutomu Itoh              2013-04-19  7569  	if (!sctx->send_filp) {
ecc7ada77b5cd1 Tsutomu Itoh              2013-04-19  7570  		ret = -EBADF;
31db9f7c23fbf7 Alexander Block           2012-07-25  7571  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7572  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7573  
31db9f7c23fbf7 Alexander Block           2012-07-25  7574  	sctx->send_root = send_root;
521e0546c970c3 David Sterba              2014-04-15  7575  	/*
521e0546c970c3 David Sterba              2014-04-15  7576  	 * Unlikely but possible, if the subvolume is marked for deletion but
521e0546c970c3 David Sterba              2014-04-15  7577  	 * is slow to remove the directory entry, send can still be started
521e0546c970c3 David Sterba              2014-04-15  7578  	 */
521e0546c970c3 David Sterba              2014-04-15  7579  	if (btrfs_root_dead(sctx->send_root)) {
521e0546c970c3 David Sterba              2014-04-15  7580  		ret = -EPERM;
521e0546c970c3 David Sterba              2014-04-15  7581  		goto out;
521e0546c970c3 David Sterba              2014-04-15  7582  	}
521e0546c970c3 David Sterba              2014-04-15  7583  
31db9f7c23fbf7 Alexander Block           2012-07-25  7584  	sctx->clone_roots_cnt = arg->clone_sources_count;
31db9f7c23fbf7 Alexander Block           2012-07-25  7585  
1d067d274b5d5c Omar Sandoval             2020-05-13  7586  	if (sctx->proto >= 2) {
1d067d274b5d5c Omar Sandoval             2020-05-13  7587  		sctx->send_max_size = ALIGN(SZ_16K + BTRFS_MAX_COMPRESSED,
1d067d274b5d5c Omar Sandoval             2020-05-13  7588  					    PAGE_SIZE);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7589  		send_buf_num_pages = sctx->send_max_size >> PAGE_SHIFT;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7590  		sctx->send_buf_pages = kcalloc(send_buf_num_pages,
57cd63d9f970d5 Omar Sandoval             2020-05-01  7591  					       sizeof(*sctx->send_buf_pages),
57cd63d9f970d5 Omar Sandoval             2020-05-01  7592  					       GFP_KERNEL);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7593  		if (!sctx->send_buf_pages) {
57cd63d9f970d5 Omar Sandoval             2020-05-01  7594  			send_buf_num_pages = 0;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7595  			ret = -ENOMEM;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7596  			goto out;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7597  		}
57cd63d9f970d5 Omar Sandoval             2020-05-01  7598  		for (i = 0; i < send_buf_num_pages; i++) {
57cd63d9f970d5 Omar Sandoval             2020-05-01  7599  			sctx->send_buf_pages[i] = alloc_page(GFP_KERNEL);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7600  			if (!sctx->send_buf_pages[i]) {
57cd63d9f970d5 Omar Sandoval             2020-05-01  7601  				ret = -ENOMEM;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7602  				goto out;
57cd63d9f970d5 Omar Sandoval             2020-05-01  7603  			}
57cd63d9f970d5 Omar Sandoval             2020-05-01  7604  		}
57cd63d9f970d5 Omar Sandoval             2020-05-01  7605  		sctx->send_buf = vmap(sctx->send_buf_pages, send_buf_num_pages,
57cd63d9f970d5 Omar Sandoval             2020-05-01  7606  				      VM_MAP, PAGE_KERNEL);
1d067d274b5d5c Omar Sandoval             2020-05-13  7607  	} else {
ddb13e7a6baea8 Omar Sandoval             2020-05-12  7608  		sctx->send_max_size = BTRFS_SEND_BUF_SIZE_V1;
752ade68cbd81d Michal Hocko              2017-05-08  7609  		sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7610  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7611  	if (!sctx->send_buf) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7612  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7613  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7614  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7615  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7616  	sctx->pending_dir_moves = RB_ROOT;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7617  	sctx->waiting_dir_moves = RB_ROOT;
9dc442143b9874 Filipe Manana             2014-02-19  7618  	sctx->orphan_dirs = RB_ROOT;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7619  
bae12df966f0e1 Denis Efremov             2020-09-21  7620  	sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots),
bae12df966f0e1 Denis Efremov             2020-09-21  7621  				     arg->clone_sources_count + 1,
bae12df966f0e1 Denis Efremov             2020-09-21  7622  				     GFP_KERNEL);
31db9f7c23fbf7 Alexander Block           2012-07-25  7623  	if (!sctx->clone_roots) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7624  		ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7625  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7626  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7627  
bae12df966f0e1 Denis Efremov             2020-09-21  7628  	alloc_size = array_size(sizeof(*arg->clone_sources),
bae12df966f0e1 Denis Efremov             2020-09-21  7629  				arg->clone_sources_count);
e55d1153dbf484 David Sterba              2016-04-11  7630  
31db9f7c23fbf7 Alexander Block           2012-07-25  7631  	if (arg->clone_sources_count) {
752ade68cbd81d Michal Hocko              2017-05-08  7632  		clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);
31db9f7c23fbf7 Alexander Block           2012-07-25  7633  		if (!clone_sources_tmp) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7634  			ret = -ENOMEM;
31db9f7c23fbf7 Alexander Block           2012-07-25  7635  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7636  		}
31db9f7c23fbf7 Alexander Block           2012-07-25  7637  
31db9f7c23fbf7 Alexander Block           2012-07-25  7638  		ret = copy_from_user(clone_sources_tmp, arg->clone_sources,
e55d1153dbf484 David Sterba              2016-04-11  7639  				alloc_size);
31db9f7c23fbf7 Alexander Block           2012-07-25  7640  		if (ret) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7641  			ret = -EFAULT;
31db9f7c23fbf7 Alexander Block           2012-07-25  7642  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7643  		}
31db9f7c23fbf7 Alexander Block           2012-07-25  7644  
31db9f7c23fbf7 Alexander Block           2012-07-25  7645  		for (i = 0; i < arg->clone_sources_count; i++) {
56e9357a1e8167 David Sterba              2020-05-15  7646  			clone_root = btrfs_get_fs_root(fs_info,
56e9357a1e8167 David Sterba              2020-05-15  7647  						clone_sources_tmp[i], true);
31db9f7c23fbf7 Alexander Block           2012-07-25  7648  			if (IS_ERR(clone_root)) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7649  				ret = PTR_ERR(clone_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  7650  				goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7651  			}
2c68653787f91c David Sterba              2013-12-16  7652  			spin_lock(&clone_root->root_item_lock);
5cc2b17e80cf57 Filipe Manana             2015-03-02  7653  			if (!btrfs_root_readonly(clone_root) ||
5cc2b17e80cf57 Filipe Manana             2015-03-02  7654  			    btrfs_root_dead(clone_root)) {
2c68653787f91c David Sterba              2013-12-16  7655  				spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik               2020-01-24  7656  				btrfs_put_root(clone_root);
2c68653787f91c David Sterba              2013-12-16  7657  				ret = -EPERM;
2c68653787f91c David Sterba              2013-12-16  7658  				goto out;
2c68653787f91c David Sterba              2013-12-16  7659  			}
62d54f3a7fa27e Filipe Manana             2019-04-22  7660  			if (clone_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  7661  				dedupe_in_progress_warn(clone_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  7662  				spin_unlock(&clone_root->root_item_lock);
0024652895e347 Josef Bacik               2020-01-24  7663  				btrfs_put_root(clone_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  7664  				ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  7665  				goto out;
62d54f3a7fa27e Filipe Manana             2019-04-22  7666  			}
2f1f465ae6da24 Filipe Manana             2015-03-02  7667  			clone_root->send_in_progress++;
2c68653787f91c David Sterba              2013-12-16  7668  			spin_unlock(&clone_root->root_item_lock);
18f687d5384493 Wang Shilong              2014-01-07  7669  
31db9f7c23fbf7 Alexander Block           2012-07-25  7670  			sctx->clone_roots[i].root = clone_root;
2f1f465ae6da24 Filipe Manana             2015-03-02  7671  			clone_sources_to_rollback = i + 1;
31db9f7c23fbf7 Alexander Block           2012-07-25  7672  		}
2f91306a378099 David Sterba              2016-04-11  7673  		kvfree(clone_sources_tmp);
31db9f7c23fbf7 Alexander Block           2012-07-25  7674  		clone_sources_tmp = NULL;
31db9f7c23fbf7 Alexander Block           2012-07-25  7675  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7676  
31db9f7c23fbf7 Alexander Block           2012-07-25  7677  	if (arg->parent_root) {
56e9357a1e8167 David Sterba              2020-05-15  7678  		sctx->parent_root = btrfs_get_fs_root(fs_info, arg->parent_root,
56e9357a1e8167 David Sterba              2020-05-15  7679  						      true);
b1b195969fe6d9 Stefan Behrens            2013-05-13  7680  		if (IS_ERR(sctx->parent_root)) {
b1b195969fe6d9 Stefan Behrens            2013-05-13  7681  			ret = PTR_ERR(sctx->parent_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  7682  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7683  		}
18f687d5384493 Wang Shilong              2014-01-07  7684  
2c68653787f91c David Sterba              2013-12-16  7685  		spin_lock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  7686  		sctx->parent_root->send_in_progress++;
521e0546c970c3 David Sterba              2014-04-15  7687  		if (!btrfs_root_readonly(sctx->parent_root) ||
521e0546c970c3 David Sterba              2014-04-15  7688  				btrfs_root_dead(sctx->parent_root)) {
2c68653787f91c David Sterba              2013-12-16  7689  			spin_unlock(&sctx->parent_root->root_item_lock);
2c68653787f91c David Sterba              2013-12-16  7690  			ret = -EPERM;
2c68653787f91c David Sterba              2013-12-16  7691  			goto out;
2c68653787f91c David Sterba              2013-12-16  7692  		}
62d54f3a7fa27e Filipe Manana             2019-04-22  7693  		if (sctx->parent_root->dedupe_in_progress) {
62d54f3a7fa27e Filipe Manana             2019-04-22  7694  			dedupe_in_progress_warn(sctx->parent_root);
62d54f3a7fa27e Filipe Manana             2019-04-22  7695  			spin_unlock(&sctx->parent_root->root_item_lock);
62d54f3a7fa27e Filipe Manana             2019-04-22  7696  			ret = -EAGAIN;
62d54f3a7fa27e Filipe Manana             2019-04-22  7697  			goto out;
62d54f3a7fa27e Filipe Manana             2019-04-22  7698  		}
2c68653787f91c David Sterba              2013-12-16  7699  		spin_unlock(&sctx->parent_root->root_item_lock);
31db9f7c23fbf7 Alexander Block           2012-07-25  7700  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7701  
31db9f7c23fbf7 Alexander Block           2012-07-25  7702  	/*
31db9f7c23fbf7 Alexander Block           2012-07-25  7703  	 * Clones from send_root are allowed, but only if the clone source
31db9f7c23fbf7 Alexander Block           2012-07-25  7704  	 * is behind the current send position. This is checked while searching
31db9f7c23fbf7 Alexander Block           2012-07-25  7705  	 * for possible clone sources.
31db9f7c23fbf7 Alexander Block           2012-07-25  7706  	 */
6f9a3da5da9e7e Josef Bacik               2020-01-24  7707  	sctx->clone_roots[sctx->clone_roots_cnt++].root =
0024652895e347 Josef Bacik               2020-01-24  7708  		btrfs_grab_root(sctx->send_root);
31db9f7c23fbf7 Alexander Block           2012-07-25  7709  
31db9f7c23fbf7 Alexander Block           2012-07-25  7710  	/* We do a bsearch later */
31db9f7c23fbf7 Alexander Block           2012-07-25  7711  	sort(sctx->clone_roots, sctx->clone_roots_cnt,
31db9f7c23fbf7 Alexander Block           2012-07-25  7712  			sizeof(*sctx->clone_roots), __clone_root_cmp_sort,
31db9f7c23fbf7 Alexander Block           2012-07-25  7713  			NULL);
896c14f97f700a Wang Shilong              2014-01-07  7714  	sort_clone_roots = 1;
31db9f7c23fbf7 Alexander Block           2012-07-25  7715  
9f89d5de8631c7 Filipe Manana             2019-04-15  7716  	ret = flush_delalloc_roots(sctx);
9f89d5de8631c7 Filipe Manana             2019-04-15  7717  	if (ret)
9f89d5de8631c7 Filipe Manana             2019-04-15  7718  		goto out;
9f89d5de8631c7 Filipe Manana             2019-04-15  7719  
e5fa8f865b3324 Filipe Manana             2014-10-21  7720  	ret = ensure_commit_roots_uptodate(sctx);
e5fa8f865b3324 Filipe Manana             2014-10-21  7721  	if (ret)
e5fa8f865b3324 Filipe Manana             2014-10-21  7722  		goto out;
e5fa8f865b3324 Filipe Manana             2014-10-21  7723  
31db9f7c23fbf7 Alexander Block           2012-07-25  7724  	ret = send_subvol(sctx);
31db9f7c23fbf7 Alexander Block           2012-07-25  7725  	if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  7726  		goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7727  
c2c71324ecb471 Stefan Behrens            2013-04-10  7728  	if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7729  		ret = begin_cmd(sctx, BTRFS_SEND_C_END);
31db9f7c23fbf7 Alexander Block           2012-07-25  7730  		if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  7731  			goto out;
31db9f7c23fbf7 Alexander Block           2012-07-25  7732  		ret = send_cmd(sctx);
31db9f7c23fbf7 Alexander Block           2012-07-25  7733  		if (ret < 0)
31db9f7c23fbf7 Alexander Block           2012-07-25  7734  			goto out;
c2c71324ecb471 Stefan Behrens            2013-04-10  7735  	}
31db9f7c23fbf7 Alexander Block           2012-07-25  7736  
31db9f7c23fbf7 Alexander Block           2012-07-25  7737  out:
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7738  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7739  	while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7740  		struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7741  		struct pending_dir_move *pm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7742  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7743  		n = rb_first(&sctx->pending_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7744  		pm = rb_entry(n, struct pending_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7745  		while (!list_empty(&pm->list)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7746  			struct pending_dir_move *pm2;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7747  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7748  			pm2 = list_first_entry(&pm->list,
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7749  					       struct pending_dir_move, list);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7750  			free_pending_move(sctx, pm2);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7751  		}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7752  		free_pending_move(sctx, pm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7753  	}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7754  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7755  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves));
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7756  	while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) {
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7757  		struct rb_node *n;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7758  		struct waiting_dir_move *dm;
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7759  
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7760  		n = rb_first(&sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7761  		dm = rb_entry(n, struct waiting_dir_move, node);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7762  		rb_erase(&dm->node, &sctx->waiting_dir_moves);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7763  		kfree(dm);
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7764  	}
9f03740a956d7a Filipe David Borba Manana 2014-01-22  7765  
9dc442143b9874 Filipe Manana             2014-02-19  7766  	WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs));
9dc442143b9874 Filipe Manana             2014-02-19  7767  	while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) {
9dc442143b9874 Filipe Manana             2014-02-19  7768  		struct rb_node *n;
9dc442143b9874 Filipe Manana             2014-02-19  7769  		struct orphan_dir_info *odi;
9dc442143b9874 Filipe Manana             2014-02-19  7770  
9dc442143b9874 Filipe Manana             2014-02-19  7771  		n = rb_first(&sctx->orphan_dirs);
9dc442143b9874 Filipe Manana             2014-02-19  7772  		odi = rb_entry(n, struct orphan_dir_info, node);
9dc442143b9874 Filipe Manana             2014-02-19  7773  		free_orphan_dir_info(sctx, odi);
9dc442143b9874 Filipe Manana             2014-02-19  7774  	}
9dc442143b9874 Filipe Manana             2014-02-19  7775  
896c14f97f700a Wang Shilong              2014-01-07  7776  	if (sort_clone_roots) {
6f9a3da5da9e7e Josef Bacik               2020-01-24  7777  		for (i = 0; i < sctx->clone_roots_cnt; i++) {
896c14f97f700a Wang Shilong              2014-01-07  7778  			btrfs_root_dec_send_in_progress(
896c14f97f700a Wang Shilong              2014-01-07  7779  					sctx->clone_roots[i].root);
0024652895e347 Josef Bacik               2020-01-24  7780  			btrfs_put_root(sctx->clone_roots[i].root);
6f9a3da5da9e7e Josef Bacik               2020-01-24  7781  		}
896c14f97f700a Wang Shilong              2014-01-07  7782  	} else {
6f9a3da5da9e7e Josef Bacik               2020-01-24  7783  		for (i = 0; sctx && i < clone_sources_to_rollback; i++) {
896c14f97f700a Wang Shilong              2014-01-07  7784  			btrfs_root_dec_send_in_progress(
896c14f97f700a Wang Shilong              2014-01-07  7785  					sctx->clone_roots[i].root);
0024652895e347 Josef Bacik               2020-01-24  7786  			btrfs_put_root(sctx->clone_roots[i].root);
6f9a3da5da9e7e Josef Bacik               2020-01-24  7787  		}
896c14f97f700a Wang Shilong              2014-01-07  7788  
896c14f97f700a Wang Shilong              2014-01-07  7789  		btrfs_root_dec_send_in_progress(send_root);
896c14f97f700a Wang Shilong              2014-01-07  7790  	}
6f9a3da5da9e7e Josef Bacik               2020-01-24  7791  	if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) {
66ef7d65c3fc6e David Sterba              2013-12-17  7792  		btrfs_root_dec_send_in_progress(sctx->parent_root);
0024652895e347 Josef Bacik               2020-01-24  7793  		btrfs_put_root(sctx->parent_root);
6f9a3da5da9e7e Josef Bacik               2020-01-24  7794  	}
2c68653787f91c David Sterba              2013-12-16  7795  
2f91306a378099 David Sterba              2016-04-11  7796  	kvfree(clone_sources_tmp);
31db9f7c23fbf7 Alexander Block           2012-07-25  7797  
31db9f7c23fbf7 Alexander Block           2012-07-25  7798  	if (sctx) {
31db9f7c23fbf7 Alexander Block           2012-07-25  7799  		if (sctx->send_filp)
31db9f7c23fbf7 Alexander Block           2012-07-25  7800  			fput(sctx->send_filp);
31db9f7c23fbf7 Alexander Block           2012-07-25  7801  
c03d01f3404282 David Sterba              2016-04-11  7802  		kvfree(sctx->clone_roots);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7803  		if (sctx->proto >= 2) {
57cd63d9f970d5 Omar Sandoval             2020-05-01  7804  			vunmap(sctx->send_buf);
57cd63d9f970d5 Omar Sandoval             2020-05-01  7805  			for (i = 0; i < send_buf_num_pages; i++) {
57cd63d9f970d5 Omar Sandoval             2020-05-01 @7806  				if (sctx->send_buf_pages[i])

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

                 reply	other threads:[~2022-01-27  0:29 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202201270814.2gId9LNj-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.