Re: [PATCH 1/2] Btrfs: fix btrfs_is_free_space_inode to recognize btree inode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Liu,
can you pls explain this a bit more to me.
I see in my fs that there are (FREE_SPACE,0, offset) items in the root
tree. It seems that offset here is the objectid of the appropriate
BLOCK_GROUP_ITEM. Also, I see that each FREE_SPACE points at some
INODE_ITEM within the root tree, and this INODE_ITEM also has extents.
I presume that these extents contain the free space cache in some
format, is that correct?

However, I don't see any FREE_INO entries, what are they? Are they
perhaps used only when "inode_cache" mount option is used, so inode
numbers are not always incremented in btrfs_find_free_ino(), but
smaller unused numbers are reused?

Also, I don't see anywhere BTRFS_BTREE_INODE_OBJECTID in the tree root
tree. So what is this "btree inode" that you mention?

Thanks,
Alex.


On Tue, Jul 10, 2012 at 2:28 PM, Liu Bo <liubo2009@xxxxxxxxxxxxxx> wrote:
> For btree inode, its root is also 'tree root', so btree inode can be
> misunderstood as a free space inode.
>
> We should add one more check for btree inode.
>
> Signed-off-by: Liu Bo <liubo2009@xxxxxxxxxxxxxx>
> ---
>  fs/btrfs/btrfs_inode.h |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h
> index 12394a9..b168238 100644
> --- a/fs/btrfs/btrfs_inode.h
> +++ b/fs/btrfs/btrfs_inode.h
> @@ -194,8 +194,10 @@ static inline void btrfs_i_size_write(struct inode *inode, u64 size)
>  static inline bool btrfs_is_free_space_inode(struct btrfs_root *root,
>                                        struct inode *inode)
>  {
> -       if (root == root->fs_info->tree_root ||
> -           BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID)
> +       if (root == root->fs_info->tree_root &&
> +           btrfs_ino(inode) != BTRFS_BTREE_INODE_OBJECTID)
> +               return true;
> +       if (BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID)
>                 return true;
>         return false;
>  }
> --
> 1.6.5.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux