mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	btrfs: Open-code name_in_log_ref in replay_one_name
That function adds unnecessary indirection between backref_in_log and the caller. Furthermore it also "downgrades" backref_in_log's return value to a boolean, when in fact it could very well be an error. Rectify the situation by simply opencoding name_in_log_ref in replay_one_name and properly handling possible return codes from backref_in_log. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> [ update comment ] Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									d3316c8233
								
							
						
					
					
						commit
						725af92a62
					
				
					 1 changed files with 25 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -1867,33 +1867,6 @@ static noinline int insert_one_name(struct btrfs_trans_handle *trans,
 | 
			
		|||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return true if an inode reference exists in the log for the given name,
 | 
			
		||||
 * inode and parent inode.
 | 
			
		||||
 */
 | 
			
		||||
static bool name_in_log_ref(struct btrfs_root *log_root,
 | 
			
		||||
			    const char *name, const int name_len,
 | 
			
		||||
			    const u64 dirid, const u64 ino)
 | 
			
		||||
{
 | 
			
		||||
	struct btrfs_key search_key;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	search_key.objectid = ino;
 | 
			
		||||
	search_key.type = BTRFS_INODE_REF_KEY;
 | 
			
		||||
	search_key.offset = dirid;
 | 
			
		||||
	ret = backref_in_log(log_root, &search_key, dirid, name, name_len);
 | 
			
		||||
	if (ret == 1)
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	search_key.type = BTRFS_INODE_EXTREF_KEY;
 | 
			
		||||
	search_key.offset = btrfs_extref_hash(dirid, name, name_len);
 | 
			
		||||
	ret = backref_in_log(log_root, &search_key, dirid, name, name_len);
 | 
			
		||||
	if (ret == 1)
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * take a single entry in a log directory item and replay it into
 | 
			
		||||
 * the subvolume.
 | 
			
		||||
| 
						 | 
				
			
			@ -2010,8 +1983,31 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
 | 
			
		|||
	return ret;
 | 
			
		||||
 | 
			
		||||
insert:
 | 
			
		||||
	if (name_in_log_ref(root->log_root, name, name_len,
 | 
			
		||||
			    key->objectid, log_key.objectid)) {
 | 
			
		||||
	/*
 | 
			
		||||
	 * Check if the inode reference exists in the log for the given name,
 | 
			
		||||
	 * inode and parent inode
 | 
			
		||||
	 */
 | 
			
		||||
	found_key.objectid = log_key.objectid;
 | 
			
		||||
	found_key.type = BTRFS_INODE_REF_KEY;
 | 
			
		||||
	found_key.offset = key->objectid;
 | 
			
		||||
	ret = backref_in_log(root->log_root, &found_key, 0, name, name_len);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
	        goto out;
 | 
			
		||||
	} else if (ret) {
 | 
			
		||||
	        /* The dentry will be added later. */
 | 
			
		||||
	        ret = 0;
 | 
			
		||||
	        update_size = false;
 | 
			
		||||
	        goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	found_key.objectid = log_key.objectid;
 | 
			
		||||
	found_key.type = BTRFS_INODE_EXTREF_KEY;
 | 
			
		||||
	found_key.offset = key->objectid;
 | 
			
		||||
	ret = backref_in_log(root->log_root, &found_key, key->objectid, name,
 | 
			
		||||
			     name_len);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		goto out;
 | 
			
		||||
	} else if (ret) {
 | 
			
		||||
		/* The dentry will be added later. */
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		update_size = false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue