35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40
41 typedef struct metaslab_ops {
42 uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
43 } metaslab_ops_t;
44
45
46 extern metaslab_ops_t *zfs_metaslab_ops;
47
48 int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t,
49 metaslab_t **);
50 void metaslab_fini(metaslab_t *);
51
52 int metaslab_load(metaslab_t *);
53 void metaslab_unload(metaslab_t *);
54
55 void metaslab_sync(metaslab_t *, uint64_t);
56 void metaslab_sync_done(metaslab_t *, uint64_t);
57 void metaslab_sync_reassess(metaslab_group_t *);
58 uint64_t metaslab_block_maxsize(metaslab_t *);
59
60 /*
61 * metaslab alloc flags
62 */
63 #define METASLAB_HINTBP_FAVOR 0x0
64 #define METASLAB_HINTBP_AVOID 0x1
65 #define METASLAB_GANG_HEADER 0x2
66 #define METASLAB_GANG_CHILD 0x4
67 #define METASLAB_ASYNC_ALLOC 0x8
68 #define METASLAB_DONT_THROTTLE 0x10
69 #define METASLAB_MUST_RESERVE 0x20
70 #define METASLAB_FASTWRITE 0x40
71
72 int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
73 blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
74 int);
98 zio_t *, int);
99 void metaslab_class_throttle_unreserve(metaslab_class_t *, int, int, zio_t *);
100
101 uint64_t metaslab_class_get_alloc(metaslab_class_t *);
102 uint64_t metaslab_class_get_space(metaslab_class_t *);
103 uint64_t metaslab_class_get_dspace(metaslab_class_t *);
104 uint64_t metaslab_class_get_deferred(metaslab_class_t *);
105
106 metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *, int);
107 void metaslab_group_destroy(metaslab_group_t *);
108 void metaslab_group_activate(metaslab_group_t *);
109 void metaslab_group_passivate(metaslab_group_t *);
110 boolean_t metaslab_group_initialized(metaslab_group_t *);
111 uint64_t metaslab_group_get_space(metaslab_group_t *);
112 void metaslab_group_histogram_verify(metaslab_group_t *);
113 uint64_t metaslab_group_fragmentation(metaslab_group_t *);
114 void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
115 void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int, int,
116 boolean_t);
117 void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *, int);
118
119 #ifdef __cplusplus
120 }
121 #endif
122
123 #endif /* _SYS_METASLAB_H */
|
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40
41 typedef struct metaslab_ops {
42 uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
43 } metaslab_ops_t;
44
45
46 extern metaslab_ops_t *zfs_metaslab_ops;
47
48 int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t,
49 metaslab_t **);
50 void metaslab_fini(metaslab_t *);
51
52 int metaslab_load(metaslab_t *);
53 void metaslab_unload(metaslab_t *);
54
55 uint64_t metaslab_allocated_space(metaslab_t *);
56
57 void metaslab_sync(metaslab_t *, uint64_t);
58 void metaslab_sync_done(metaslab_t *, uint64_t);
59 void metaslab_sync_reassess(metaslab_group_t *);
60 uint64_t metaslab_block_maxsize(metaslab_t *);
61
62 /*
63 * metaslab alloc flags
64 */
65 #define METASLAB_HINTBP_FAVOR 0x0
66 #define METASLAB_HINTBP_AVOID 0x1
67 #define METASLAB_GANG_HEADER 0x2
68 #define METASLAB_GANG_CHILD 0x4
69 #define METASLAB_ASYNC_ALLOC 0x8
70 #define METASLAB_DONT_THROTTLE 0x10
71 #define METASLAB_MUST_RESERVE 0x20
72 #define METASLAB_FASTWRITE 0x40
73
74 int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
75 blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
76 int);
100 zio_t *, int);
101 void metaslab_class_throttle_unreserve(metaslab_class_t *, int, int, zio_t *);
102
103 uint64_t metaslab_class_get_alloc(metaslab_class_t *);
104 uint64_t metaslab_class_get_space(metaslab_class_t *);
105 uint64_t metaslab_class_get_dspace(metaslab_class_t *);
106 uint64_t metaslab_class_get_deferred(metaslab_class_t *);
107
108 metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *, int);
109 void metaslab_group_destroy(metaslab_group_t *);
110 void metaslab_group_activate(metaslab_group_t *);
111 void metaslab_group_passivate(metaslab_group_t *);
112 boolean_t metaslab_group_initialized(metaslab_group_t *);
113 uint64_t metaslab_group_get_space(metaslab_group_t *);
114 void metaslab_group_histogram_verify(metaslab_group_t *);
115 uint64_t metaslab_group_fragmentation(metaslab_group_t *);
116 void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
117 void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int, int,
118 boolean_t);
119 void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *, int);
120 void metaslab_recalculate_weight_and_sort(metaslab_t *);
121
122 #ifdef __cplusplus
123 }
124 #endif
125
126 #endif /* _SYS_METASLAB_H */
|