From bb561f5485ab5852214e115116507524e45daff8 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 10 Oct 2014 16:57:14 -0400 Subject: [PATCH] Btrfs-progs: add a dummy backref if our location is wrong If our location is bogus in our dir item we were just skipping the thing. However in this case we want to just delete the dir index, so create a dummy inode rec using BTRFS_MULTIPLE_OBJECTIDS and just add every backref we find to the list so we know to straight up delete all of these items. Thanks, Signed-off-by: Josef Bacik Signed-off-by: David Sterba --- cmds-check.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmds-check.c b/cmds-check.c index 2219e758..8150203f 100644 --- a/cmds-check.c +++ b/cmds-check.c @@ -563,6 +563,8 @@ static struct inode_backref *get_inode_backref(struct inode_record *rec, struct inode_backref *backref; list_for_each_entry(backref, &rec->backrefs, list) { + if (rec->ino == BTRFS_MULTIPLE_OBJECTIDS) + break; if (backref->dir != dir || backref->namelen != namelen) continue; if (memcmp(name, backref->name, namelen)) @@ -1004,7 +1006,11 @@ static int process_dir_item(struct btrfs_root *root, namebuf, len, filetype, key->type, error); } else { - fprintf(stderr, "warning line %d\n", __LINE__); + fprintf(stderr, "invalid location in dir item %u\n", + location.type); + add_inode_backref(inode_cache, BTRFS_MULTIPLE_OBJECTIDS, + key->objectid, key->offset, namebuf, + len, filetype, key->type, error); } len = sizeof(*di) + name_len + data_len;