mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-22 04:46:50 +00:00
btrfs-progs: Add helper function find_file_name/type for nlink and inode_item repair.
Add find_file_name() and find_file_type() function for later nlink and inode_item repair. Later nlink repair will use both function and and inode_item repair will use find_file_type(). They are done by searching the backref list, dir_item/index for type search and dir_item/index or inode_ref for name search. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
1c4d47c037
commit
15bc913158
41
cmds-check.c
41
cmds-check.c
@ -1874,6 +1874,47 @@ static int repair_inode_backrefs(struct btrfs_root *root,
|
||||
return ret ? ret : repaired;
|
||||
}
|
||||
|
||||
/*
|
||||
* To determine the file type for nlink/inode_item repair
|
||||
*
|
||||
* Return 0 if file type is found and BTRFS_FT_* is stored into type.
|
||||
* Return -ENOENT if file type is not found.
|
||||
*/
|
||||
static int find_file_type(struct inode_record *rec, u8 *type)
|
||||
{
|
||||
struct inode_backref *backref;
|
||||
|
||||
list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
if (backref->found_dir_index || backref->found_dir_item) {
|
||||
*type = backref->filetype;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/*
|
||||
* To determine the file name for nlink repair
|
||||
*
|
||||
* Return 0 if file name is found, set name and namelen.
|
||||
* Return -ENOENT if file name is not found.
|
||||
*/
|
||||
static int find_file_name(struct inode_record *rec,
|
||||
char *name, int *namelen)
|
||||
{
|
||||
struct inode_backref *backref;
|
||||
|
||||
list_for_each_entry(backref, &rec->backrefs, list) {
|
||||
if (backref->found_dir_index || backref->found_dir_item ||
|
||||
backref->found_inode_ref) {
|
||||
memcpy(name, backref->name, backref->namelen);
|
||||
*namelen = backref->namelen;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
static int try_repair_inode(struct btrfs_root *root, struct inode_record *rec)
|
||||
{
|
||||
struct btrfs_trans_handle *trans;
|
||||
|
Loading…
Reference in New Issue
Block a user