Btrfs: check size of inode backref before adding hardlink
authorYan, Zheng <zheng.yan@oracle.com>
Thu, 24 Sep 2009 13:17:31 +0000 (09:17 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 24 Sep 2009 13:17:31 +0000 (09:17 -0400)
commita57195214358b75807a74bad96a8601a36262af7
treee288410ecfab5f15097bb66f06a5dd6bf99bca08
parent11ef160fda9c150cd75db77194bcc66839709662
Btrfs: check size of inode backref before adding hardlink

For every hardlink in btrfs, there is a corresponding inode back
reference. All inode back references for hardlinks in a given
directory are stored in single b-tree item. The size of b-tree item
is limited by the size of b-tree leaf, so we can only create limited
number of hardlinks to a given file in a directory.

The original code lacks of the check, it oops if the number of
hardlinks goes over the limit. This patch fixes the issue by adding
check to btrfs_link and btrfs_rename.

Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/ctree.c
fs/btrfs/inode-item.c
fs/btrfs/inode.c