From: Josef Bacik Date: Fri, 10 Oct 2014 20:57:14 +0000 (-0400) Subject: Btrfs-progs: add a dummy backref if our location is wrong X-Git-Tag: upstream/4.16.1~2647 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb561f5485ab5852214e115116507524e45daff8;p=platform%2Fupstream%2Fbtrfs-progs.git 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 --- diff --git a/cmds-check.c b/cmds-check.c index 2219e75..8150203 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;