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 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
 | 
					 * take a single entry in a log directory item and replay it into
 | 
				
			||||||
 * the subvolume.
 | 
					 * the subvolume.
 | 
				
			||||||
| 
						 | 
					@ -2010,8 +1983,31 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
insert:
 | 
					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. */
 | 
							/* The dentry will be added later. */
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
		update_size = false;
 | 
							update_size = false;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue