kernel-hacking-2024-linux-s.../fs/btrfs
Arne Jansen 73c5de0051 btrfs: quasi-round-robin for chunk allocation
In a multi device setup, the chunk allocator currently always allocates
chunks on the devices in the same order. This leads to a very uneven
distribution, especially with RAID1 or RAID10 and an uneven number of
devices.
This patch always sorts the devices before allocating, and allocates the
stripes on the devices with the most available space, as long as there
is enough space available. In a low space situation, it first tries to
maximize striping.
The patch also simplifies the allocator and reduces the checks for
corner cases.
The simplification is done by several means. First, it defines the
properties of each RAID type upfront. These properties are used afterwards
instead of differentiating cases in several places.
Second, the old allocator defined a minimum stripe size for each block
group type, tried to find a large enough chunk, and if this fails just
allocates a smaller one. This is now done in one step. The largest possible
chunk (up to max_chunk_size) is searched and allocated.
Because we now have only one pass, the allocation of the map (struct
map_lookup) is moved down to the point where the number of stripes is
already known. This way we avoid reallocation of the map.
We still avoid allocating stripes that are not a multiple of STRIPE_SIZE.
2011-05-13 15:36:14 +02:00
..
acl.c Btrfs: Check validity before setting an acl 2011-04-13 14:25:35 +08:00
async-thread.c
async-thread.h
btrfs_inode.h Btrfs: change reserved_extents to an atomic_t 2011-03-17 14:21:18 -04:00
compat.h
compression.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
compression.h
ctree.c Btrfs: check return value of read_tree_block() 2011-03-28 05:37:37 -04:00
ctree.h Btrfs: avoid taking the chunk_mutex in do_chunk_alloc 2011-04-16 07:10:56 -04:00
delayed-ref.c Btrfs: add initial tracepoint support for btrfs 2011-03-28 05:37:33 -04:00
delayed-ref.h
dir-item.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
disk-io.c btrfs: add missing spin_unlock to a rare exit path 2011-04-25 19:43:52 -04:00
disk-io.h Btrfs: forced readonly mounts on errors 2011-01-17 15:13:08 -05:00
export.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable 2011-02-07 14:06:18 -08:00
export.h
extent-tree.c Btrfs: check return value of kmalloc() 2011-04-25 19:43:52 -04:00
extent_io.c btrfs: fix wrong allocating flag when reading page 2011-04-25 19:43:51 -04:00
extent_io.h btrfs: using cached extent_state in set/unlock combinations 2011-04-11 20:45:36 -04:00
extent_map.c Btrfs: check return value of alloc_extent_map() 2011-02-14 16:21:37 -05:00
extent_map.h
file-item.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
file.c Btrfs: deal with the case that we run out of space in the cache 2011-04-08 13:00:27 -04:00
free-space-cache.c Btrfs: free bitmaps properly when evicting the cache 2011-04-25 19:43:52 -04:00
free-space-cache.h Btrfs: add btrfs_trim_fs() to handle FITRIM 2011-03-28 05:37:47 -04:00
hash.h
inode-item.c
inode-map.c Btrfs: cleanup some BUG_ON() 2011-03-28 05:37:35 -04:00
inode.c Btrfs: cleanup error handling in inode.c 2011-04-25 19:43:53 -04:00
ioctl.c fix user annotation in ioctl.c 2011-04-11 20:25:46 -04:00
ioctl.h Merge branch 'lzo-support' of git://repo.or.cz/linux-btrfs-devel into btrfs-38 2011-01-16 11:25:54 -05:00
Kconfig
locking.c
locking.h
lzo.c Btrfs: Avoid accessing unmapped kernel address 2011-02-16 15:37:58 -05:00
Makefile
ordered-data.c Btrfs: add initial tracepoint support for btrfs 2011-03-28 05:37:33 -04:00
ordered-data.h
orphan.c
print-tree.c btrfs: fix missing break in switch phrase 2011-01-28 16:40:37 -05:00
print-tree.h
ref-cache.c
ref-cache.h
relocation.c Btrfs: check return value of read_tree_block() 2011-03-28 05:37:37 -04:00
root-tree.c Btrfs: Fix uninitialized root flags for subvolumes 2011-04-05 01:20:24 -04:00
struct-funcs.c
super.c btrfs: move btrfs_cmp_device_free_bytes to super.c 2011-05-13 15:36:05 +02:00
sysfs.c
transaction.c Btrfs: avoid taking the trans_mutex in btrfs_end_transaction 2011-04-11 20:43:52 -04:00
transaction.h Btrfs: avoid taking the trans_mutex in btrfs_end_transaction 2011-04-11 20:43:52 -04:00
tree-defrag.c
tree-log.c Btrfs: fix missing mutex_unlock in btrfs_del_dir_entries_in_log() 2011-04-25 19:43:51 -04:00
tree-log.h
version.h
version.sh
volumes.c btrfs: quasi-round-robin for chunk allocation 2011-05-13 15:36:14 +02:00
volumes.h btrfs: quasi-round-robin for chunk allocation 2011-05-13 15:36:14 +02:00
xattr.c Btrfs: Check if btrfs_next_leaf() returns error in btrfs_listxattr() 2011-04-13 14:25:28 +08:00
xattr.h
zlib.c