btrfs: heed alloc_start
authorArne Jansen <sensille@gmx.net>
Tue, 12 Apr 2011 09:01:20 +0000 (11:01 +0200)
committerArne Jansen <sensille@gmx.net>
Fri, 13 May 2011 13:36:12 +0000 (15:36 +0200)
currently alloc_start is disregarded if the requested
chunk size is bigger than (device size - alloc_start),
but smaller than the device size.
The only situation where I see this could have made sense
was when a chunk equal the size of the device has been
requested. This was possible as the allocator failed to
take alloc_start into account when calculating the request
chunk size. As this gets fixed by this patch, the workaround
is not necessary anymore.

fs/btrfs/volumes.c

index a9f1fc23278bc7fc35d5553e735851ba587f6ece..45c592a7335e7086fdbb4bbe439493abe65e7438 100644 (file)
@@ -849,10 +849,7 @@ int find_free_dev_extent(struct btrfs_trans_handle *trans,
        /* we don't want to overwrite the superblock on the drive,
         * so we make sure to start at an offset of at least 1MB
         */
-       search_start = 1024 * 1024;
-
-       if (root->fs_info->alloc_start + num_bytes <= search_end)
-               search_start = max(root->fs_info->alloc_start, search_start);
+       search_start = max(root->fs_info->alloc_start, 1024ull * 1024);
 
        max_hole_start = search_start;
        max_hole_size = 0;