Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1785427 authored by Yan's avatar Yan Committed by Chris Mason
Browse files

Fix for btrfs_find_free_objectid



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: default avatarChris Mason <chris.mason@oracle.com>
parent e18e4809
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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;
				}