forked from mirrors/linux
		
	Btrfs: code cleanups for send/receive
Doing some code cleanups as suggested by Arne. Changes do not change any logic. Signed-off-by: Alexander Block <ablock84@googlemail.com>
This commit is contained in:
		
							parent
							
								
									766702ef49
								
							
						
					
					
						commit
						e938c8ad54
					
				
					 1 changed files with 35 additions and 48 deletions
				
			
		| 
						 | 
					@ -1115,10 +1115,12 @@ static int __iterate_backrefs(u64 ino, u64 offset, u64 root, void *ctx_)
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (ino >= bctx->cur_objectid)
 | 
							if (ino >= bctx->cur_objectid)
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		/*if (ino > ctx->cur_objectid)
 | 
					#if 0
 | 
				
			||||||
 | 
							if (ino > bctx->cur_objectid)
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		if (offset + ctx->extent_len > ctx->cur_offset)
 | 
							if (offset + bctx->extent_len > bctx->cur_offset)
 | 
				
			||||||
			return 0;*/
 | 
								return 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bctx->found++;
 | 
						bctx->found++;
 | 
				
			||||||
| 
						 | 
					@ -1327,8 +1329,6 @@ static int read_symlink(struct send_ctx *sctx,
 | 
				
			||||||
	len = btrfs_file_extent_inline_len(path->nodes[0], ei);
 | 
						len = btrfs_file_extent_inline_len(path->nodes[0], ei);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = fs_path_add_from_extent_buffer(dest, path->nodes[0], off, len);
 | 
						ret = fs_path_add_from_extent_buffer(dest, path->nodes[0], off, len);
 | 
				
			||||||
	if (ret < 0)
 | 
					 | 
				
			||||||
		goto out;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	btrfs_free_path(path);
 | 
						btrfs_free_path(path);
 | 
				
			||||||
| 
						 | 
					@ -1440,9 +1440,9 @@ static int get_cur_inode_state(struct send_ctx *sctx, u64 ino, u64 gen)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!left_ret && !right_ret) {
 | 
						if (!left_ret && !right_ret) {
 | 
				
			||||||
		if (left_gen == gen && right_gen == gen)
 | 
							if (left_gen == gen && right_gen == gen) {
 | 
				
			||||||
			ret = inode_state_no_change;
 | 
								ret = inode_state_no_change;
 | 
				
			||||||
		else if (left_gen == gen) {
 | 
							} else if (left_gen == gen) {
 | 
				
			||||||
			if (ino < sctx->send_progress)
 | 
								if (ino < sctx->send_progress)
 | 
				
			||||||
				ret = inode_state_did_create;
 | 
									ret = inode_state_did_create;
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
| 
						 | 
					@ -1615,11 +1615,7 @@ static int is_first_ref(struct send_ctx *sctx,
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = memcmp(tmp_name->start, name, name_len);
 | 
						ret = !memcmp(tmp_name->start, name, name_len);
 | 
				
			||||||
	if (ret)
 | 
					 | 
				
			||||||
		ret = 0;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		ret = 1;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	fs_path_free(sctx, tmp_name);
 | 
						fs_path_free(sctx, tmp_name);
 | 
				
			||||||
| 
						 | 
					@ -1761,8 +1757,6 @@ static int did_overwrite_first_ref(struct send_ctx *sctx, u64 ino, u64 gen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = did_overwrite_ref(sctx, dir, dir_gen, ino, gen,
 | 
						ret = did_overwrite_ref(sctx, dir, dir_gen, ino, gen,
 | 
				
			||||||
			name->start, fs_path_len(name));
 | 
								name->start, fs_path_len(name));
 | 
				
			||||||
	if (ret < 0)
 | 
					 | 
				
			||||||
		goto out;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	fs_path_free(sctx, name);
 | 
						fs_path_free(sctx, name);
 | 
				
			||||||
| 
						 | 
					@ -1866,9 +1860,10 @@ static void name_cache_clean_unused(struct send_ctx *sctx)
 | 
				
			||||||
static void name_cache_free(struct send_ctx *sctx)
 | 
					static void name_cache_free(struct send_ctx *sctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct name_cache_entry *nce;
 | 
						struct name_cache_entry *nce;
 | 
				
			||||||
	struct name_cache_entry *tmp;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry_safe(nce, tmp, &sctx->name_cache_list, list) {
 | 
						while (!list_empty(&sctx->name_cache_list)) {
 | 
				
			||||||
 | 
							nce = list_entry(sctx->name_cache_list.next,
 | 
				
			||||||
 | 
									struct name_cache_entry, list);
 | 
				
			||||||
		name_cache_delete(sctx, nce);
 | 
							name_cache_delete(sctx, nce);
 | 
				
			||||||
		kfree(nce);
 | 
							kfree(nce);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -2188,9 +2183,6 @@ static int send_subvol_begin(struct send_ctx *sctx)
 | 
				
			||||||
	read_extent_buffer(leaf, name, (unsigned long)(ref + 1), namelen);
 | 
						read_extent_buffer(leaf, name, (unsigned long)(ref + 1), namelen);
 | 
				
			||||||
	btrfs_release_path(path);
 | 
						btrfs_release_path(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret < 0)
 | 
					 | 
				
			||||||
		goto out;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (parent_root) {
 | 
						if (parent_root) {
 | 
				
			||||||
		ret = begin_cmd(sctx, BTRFS_SEND_C_SNAPSHOT);
 | 
							ret = begin_cmd(sctx, BTRFS_SEND_C_SNAPSHOT);
 | 
				
			||||||
		if (ret < 0)
 | 
							if (ret < 0)
 | 
				
			||||||
| 
						 | 
					@ -2393,19 +2385,19 @@ verbose_printk("btrfs: send_create_inode %llu\n", ino);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (S_ISREG(mode))
 | 
						if (S_ISREG(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_MKFILE;
 | 
							cmd = BTRFS_SEND_C_MKFILE;
 | 
				
			||||||
	else if (S_ISDIR(mode))
 | 
						} else if (S_ISDIR(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_MKDIR;
 | 
							cmd = BTRFS_SEND_C_MKDIR;
 | 
				
			||||||
	else if (S_ISLNK(mode))
 | 
						} else if (S_ISLNK(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_SYMLINK;
 | 
							cmd = BTRFS_SEND_C_SYMLINK;
 | 
				
			||||||
	else if (S_ISCHR(mode) || S_ISBLK(mode))
 | 
						} else if (S_ISCHR(mode) || S_ISBLK(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_MKNOD;
 | 
							cmd = BTRFS_SEND_C_MKNOD;
 | 
				
			||||||
	else if (S_ISFIFO(mode))
 | 
						} else if (S_ISFIFO(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_MKFIFO;
 | 
							cmd = BTRFS_SEND_C_MKFIFO;
 | 
				
			||||||
	else if (S_ISSOCK(mode))
 | 
						} else if (S_ISSOCK(mode)) {
 | 
				
			||||||
		cmd = BTRFS_SEND_C_MKSOCK;
 | 
							cmd = BTRFS_SEND_C_MKSOCK;
 | 
				
			||||||
	else {
 | 
						} else {
 | 
				
			||||||
		printk(KERN_WARNING "btrfs: unexpected inode type %o",
 | 
							printk(KERN_WARNING "btrfs: unexpected inode type %o",
 | 
				
			||||||
				(int)(mode & S_IFMT));
 | 
									(int)(mode & S_IFMT));
 | 
				
			||||||
		ret = -ENOTSUPP;
 | 
							ret = -ENOTSUPP;
 | 
				
			||||||
| 
						 | 
					@ -2583,13 +2575,13 @@ static int record_ref(struct list_head *head, u64 dir,
 | 
				
			||||||
static void __free_recorded_refs(struct send_ctx *sctx, struct list_head *head)
 | 
					static void __free_recorded_refs(struct send_ctx *sctx, struct list_head *head)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct recorded_ref *cur;
 | 
						struct recorded_ref *cur;
 | 
				
			||||||
	struct recorded_ref *tmp;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry_safe(cur, tmp, head, list) {
 | 
						while (!list_empty(head)) {
 | 
				
			||||||
 | 
							cur = list_entry(head->next, struct recorded_ref, list);
 | 
				
			||||||
		fs_path_free(sctx, cur->full_path);
 | 
							fs_path_free(sctx, cur->full_path);
 | 
				
			||||||
 | 
							list_del(&cur->list);
 | 
				
			||||||
		kfree(cur);
 | 
							kfree(cur);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	INIT_LIST_HEAD(head);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void free_recorded_refs(struct send_ctx *sctx)
 | 
					static void free_recorded_refs(struct send_ctx *sctx)
 | 
				
			||||||
| 
						 | 
					@ -3205,24 +3197,18 @@ static int process_all_refs(struct send_ctx *sctx,
 | 
				
			||||||
	key.offset = 0;
 | 
						key.offset = 0;
 | 
				
			||||||
	while (1) {
 | 
						while (1) {
 | 
				
			||||||
		ret = btrfs_search_slot_for_read(root, &key, path, 1, 0);
 | 
							ret = btrfs_search_slot_for_read(root, &key, path, 1, 0);
 | 
				
			||||||
		if (ret < 0) {
 | 
							if (ret < 0)
 | 
				
			||||||
			btrfs_release_path(path);
 | 
					 | 
				
			||||||
			goto out;
 | 
								goto out;
 | 
				
			||||||
		}
 | 
							if (ret)
 | 
				
			||||||
		if (ret) {
 | 
					 | 
				
			||||||
			btrfs_release_path(path);
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		eb = path->nodes[0];
 | 
							eb = path->nodes[0];
 | 
				
			||||||
		slot = path->slots[0];
 | 
							slot = path->slots[0];
 | 
				
			||||||
		btrfs_item_key_to_cpu(eb, &found_key, slot);
 | 
							btrfs_item_key_to_cpu(eb, &found_key, slot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (found_key.objectid != key.objectid ||
 | 
							if (found_key.objectid != key.objectid ||
 | 
				
			||||||
		    found_key.type != key.type) {
 | 
							    found_key.type != key.type)
 | 
				
			||||||
			btrfs_release_path(path);
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ret = iterate_inode_ref(sctx, sctx->parent_root, path,
 | 
							ret = iterate_inode_ref(sctx, sctx->parent_root, path,
 | 
				
			||||||
				&found_key, 0, cb, sctx);
 | 
									&found_key, 0, cb, sctx);
 | 
				
			||||||
| 
						 | 
					@ -3232,6 +3218,7 @@ static int process_all_refs(struct send_ctx *sctx,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		key.offset = found_key.offset + 1;
 | 
							key.offset = found_key.offset + 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						btrfs_release_path(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = process_recorded_refs(sctx);
 | 
						ret = process_recorded_refs(sctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3554,7 +3541,7 @@ static int send_write(struct send_ctx *sctx, u64 offset, u32 len)
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
	struct fs_path *p;
 | 
						struct fs_path *p;
 | 
				
			||||||
	loff_t pos = offset;
 | 
						loff_t pos = offset;
 | 
				
			||||||
	int readed = 0;
 | 
						int num_read = 0;
 | 
				
			||||||
	mm_segment_t old_fs;
 | 
						mm_segment_t old_fs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p = fs_path_alloc(sctx);
 | 
						p = fs_path_alloc(sctx);
 | 
				
			||||||
| 
						 | 
					@ -3579,8 +3566,8 @@ verbose_printk("btrfs: send_write offset=%llu, len=%d\n", offset, len);
 | 
				
			||||||
	ret = vfs_read(sctx->cur_inode_filp, sctx->read_buf, len, &pos);
 | 
						ret = vfs_read(sctx->cur_inode_filp, sctx->read_buf, len, &pos);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	readed = ret;
 | 
						num_read = ret;
 | 
				
			||||||
	if (!readed)
 | 
						if (!num_read)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE);
 | 
						ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE);
 | 
				
			||||||
| 
						 | 
					@ -3593,7 +3580,7 @@ verbose_printk("btrfs: send_write offset=%llu, len=%d\n", offset, len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p);
 | 
						TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p);
 | 
				
			||||||
	TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset);
 | 
						TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset);
 | 
				
			||||||
	TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, readed);
 | 
						TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, num_read);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = send_cmd(sctx);
 | 
						ret = send_cmd(sctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3603,7 +3590,7 @@ verbose_printk("btrfs: send_write offset=%llu, len=%d\n", offset, len);
 | 
				
			||||||
	set_fs(old_fs);
 | 
						set_fs(old_fs);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	return readed;
 | 
						return num_read;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -3614,7 +3601,6 @@ static int send_clone(struct send_ctx *sctx,
 | 
				
			||||||
		      struct clone_root *clone_root)
 | 
							      struct clone_root *clone_root)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
	struct btrfs_root *clone_root2 = clone_root->root;
 | 
					 | 
				
			||||||
	struct fs_path *p;
 | 
						struct fs_path *p;
 | 
				
			||||||
	u64 gen;
 | 
						u64 gen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3639,22 +3625,23 @@ verbose_printk("btrfs: send_clone offset=%llu, len=%d, clone_root=%llu, "
 | 
				
			||||||
	TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_LEN, len);
 | 
						TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_LEN, len);
 | 
				
			||||||
	TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p);
 | 
						TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (clone_root2 == sctx->send_root) {
 | 
						if (clone_root->root == sctx->send_root) {
 | 
				
			||||||
		ret = get_inode_info(sctx->send_root, clone_root->ino, NULL,
 | 
							ret = get_inode_info(sctx->send_root, clone_root->ino, NULL,
 | 
				
			||||||
				&gen, NULL, NULL, NULL, NULL);
 | 
									&gen, NULL, NULL, NULL, NULL);
 | 
				
			||||||
		if (ret < 0)
 | 
							if (ret < 0)
 | 
				
			||||||
			goto out;
 | 
								goto out;
 | 
				
			||||||
		ret = get_cur_path(sctx, clone_root->ino, gen, p);
 | 
							ret = get_cur_path(sctx, clone_root->ino, gen, p);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		ret = get_inode_path(sctx, clone_root2, clone_root->ino, p);
 | 
							ret = get_inode_path(sctx, clone_root->root,
 | 
				
			||||||
 | 
									clone_root->ino, p);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID,
 | 
						TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID,
 | 
				
			||||||
			clone_root2->root_item.uuid);
 | 
								clone_root->root->root_item.uuid);
 | 
				
			||||||
	TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID,
 | 
						TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID,
 | 
				
			||||||
			clone_root2->root_item.ctransid);
 | 
								clone_root->root->root_item.ctransid);
 | 
				
			||||||
	TLV_PUT_PATH(sctx, BTRFS_SEND_A_CLONE_PATH, p);
 | 
						TLV_PUT_PATH(sctx, BTRFS_SEND_A_CLONE_PATH, p);
 | 
				
			||||||
	TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_OFFSET,
 | 
						TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_OFFSET,
 | 
				
			||||||
			clone_root->offset);
 | 
								clone_root->offset);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue