|
@@ -5445,6 +5445,14 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
|
|
goto out_err;
|
|
|
|
|
|
btrfs_dir_item_key_to_cpu(path->nodes[0], di, location);
|
|
|
+ if (location->type != BTRFS_INODE_ITEM_KEY &&
|
|
|
+ location->type != BTRFS_ROOT_ITEM_KEY) {
|
|
|
+ btrfs_warn(root->fs_info,
|
|
|
+"%s gets something invalid in DIR_ITEM (name %s, directory ino %llu, location(%llu %u %llu))",
|
|
|
+ __func__, name, btrfs_ino(BTRFS_I(dir)),
|
|
|
+ location->objectid, location->type, location->offset);
|
|
|
+ goto out_err;
|
|
|
+ }
|
|
|
out:
|
|
|
btrfs_free_path(path);
|
|
|
return ret;
|
|
@@ -5761,8 +5769,6 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
|
|
|
return inode;
|
|
|
}
|
|
|
|
|
|
- BUG_ON(location.type != BTRFS_ROOT_ITEM_KEY);
|
|
|
-
|
|
|
index = srcu_read_lock(&fs_info->subvol_srcu);
|
|
|
ret = fixup_tree_root_location(fs_info, dir, dentry,
|
|
|
&location, &sub_root);
|