diff options
Diffstat (limited to 'fs/btrfs/volumes.h')
-rw-r--r-- | fs/btrfs/volumes.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index a668c0116982..a5cfedf393f9 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h | |||
@@ -20,8 +20,11 @@ | |||
20 | #define __BTRFS_VOLUMES_ | 20 | #define __BTRFS_VOLUMES_ |
21 | 21 | ||
22 | #include <linux/bio.h> | 22 | #include <linux/bio.h> |
23 | #include <linux/sort.h> | ||
23 | #include "async-thread.h" | 24 | #include "async-thread.h" |
24 | 25 | ||
26 | #define BTRFS_STRIPE_LEN (64 * 1024) | ||
27 | |||
25 | struct buffer_head; | 28 | struct buffer_head; |
26 | struct btrfs_pending_bios { | 29 | struct btrfs_pending_bios { |
27 | struct bio *head; | 30 | struct bio *head; |
@@ -137,6 +140,27 @@ struct btrfs_multi_bio { | |||
137 | struct btrfs_bio_stripe stripes[]; | 140 | struct btrfs_bio_stripe stripes[]; |
138 | }; | 141 | }; |
139 | 142 | ||
143 | struct btrfs_device_info { | ||
144 | struct btrfs_device *dev; | ||
145 | u64 dev_offset; | ||
146 | u64 max_avail; | ||
147 | }; | ||
148 | |||
149 | /* Used to sort the devices by max_avail(descending sort) */ | ||
150 | int btrfs_cmp_device_free_bytes(const void *dev_info1, const void *dev_info2); | ||
151 | |||
152 | /* | ||
153 | * sort the devices by max_avail, in which max free extent size of each device | ||
154 | * is stored.(Descending Sort) | ||
155 | */ | ||
156 | static inline void btrfs_descending_sort_devices( | ||
157 | struct btrfs_device_info *devices, | ||
158 | size_t nr_devices) | ||
159 | { | ||
160 | sort(devices, nr_devices, sizeof(struct btrfs_device_info), | ||
161 | btrfs_cmp_device_free_bytes, NULL); | ||
162 | } | ||
163 | |||
140 | #define btrfs_multi_bio_size(n) (sizeof(struct btrfs_multi_bio) + \ | 164 | #define btrfs_multi_bio_size(n) (sizeof(struct btrfs_multi_bio) + \ |
141 | (sizeof(struct btrfs_bio_stripe) * (n))) | 165 | (sizeof(struct btrfs_bio_stripe) * (n))) |
142 | 166 | ||