Skip to content

Commit

Permalink
Fix for btrfs_find_free_objectid
Browse files Browse the repository at this point in the history
btrfs_find_free_objectid may return a used objectid due to arithmetic
underflow. This bug may happen when parameter 'root' is tree root,  so
it may cause serious problems when creating snapshot or sub-volume.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Yan authored and Chris Mason committed Sep 25, 2008
1 parent e18e480 commit b178542
Showing 1 changed file with 1 addition and 3 deletions.
4 changes: 1 addition & 3 deletions fs/btrfs/inode-map.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
struct btrfs_path *path;
struct btrfs_key key;
int ret;
u64 hole_size = 0;
int slot = 0;
u64 last_ino = 0;
int start_found;
Expand Down Expand Up @@ -109,8 +108,7 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
if (start_found) {
if (last_ino < search_start)
last_ino = search_start;
hole_size = key.objectid - last_ino;
if (hole_size > 0) {
if (key.objectid > last_ino) {
*objectid = last_ino;
goto found;
}
Expand Down

0 comments on commit b178542

Please sign in to comment.