Lines Matching refs:bali

61 	struct ba_lun_info *bali = NULL;
78 bali = kzalloc(sizeof(struct ba_lun_info), GFP_KERNEL);
79 if (unlikely(!bali)) {
85 bali->total_aus = lun_size_au;
86 bali->lun_bmap_size = lun_size_au / BITS_PER_LONG;
89 bali->lun_bmap_size++;
92 bali->lun_alloc_map = kzalloc((bali->lun_bmap_size * sizeof(u64)),
94 if (unlikely(!bali->lun_alloc_map)) {
97 kfree(bali);
102 bali->free_aun_cnt = lun_size_au;
104 for (i = 0; i < bali->lun_bmap_size; i++)
105 bali->lun_alloc_map[i] = 0xFFFFFFFFFFFFFFFFULL;
108 last_word_underflow = (bali->lun_bmap_size * BITS_PER_LONG);
109 last_word_underflow -= bali->free_aun_cnt;
111 lam = &bali->lun_alloc_map[bali->lun_bmap_size - 1];
119 bali->free_high_idx = bali->lun_bmap_size;
122 bali->aun_clone_map = kzalloc((bali->total_aus * sizeof(u8)),
124 if (unlikely(!bali->aun_clone_map)) {
127 kfree(bali->lun_alloc_map);
128 kfree(bali);
133 ba_lun->ba_lun_handle = bali;
137 __func__, ba_lun->lun_id, bali->lun_bmap_size,
138 bali->free_aun_cnt);
146 * @bali: LUN information structure owning the block allocator to search.
153 struct ba_lun_info *bali, int *bit_word)
160 if (bali->lun_alloc_map[i] != 0) {
161 lam = (ulong *)&bali->lun_alloc_map[i];
167 __func__, bit_pos, bali->lun_alloc_map[i], i);
170 bali->free_aun_cnt--;
188 struct ba_lun_info *bali = NULL;
190 bali = ba_lun->ba_lun_handle;
194 __func__, ba_lun->lun_id, bali->free_aun_cnt);
196 if (bali->free_aun_cnt == 0) {
203 bit_pos = find_free_range(bali->free_curr_idx,
204 bali->free_high_idx, bali, &bit_word);
206 bit_pos = find_free_range(bali->free_low_idx,
207 bali->free_curr_idx,
208 bali, &bit_word);
218 bali->free_curr_idx = bit_word + 1;
220 bali->free_curr_idx = bit_word;
225 bali->free_aun_cnt);
237 static int validate_alloc(struct ba_lun_info *bali, u64 aun)
244 if (test_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx]))
260 struct ba_lun_info *bali = NULL;
262 bali = ba_lun->ba_lun_handle;
264 if (validate_alloc(bali, to_free)) {
272 bali->free_aun_cnt);
274 if (bali->aun_clone_map[to_free] > 0) {
277 bali->aun_clone_map[to_free]);
278 bali->aun_clone_map[to_free]--;
285 set_bit(bit_pos, (ulong *)&bali->lun_alloc_map[idx]);
286 bali->free_aun_cnt++;
288 if (idx < bali->free_low_idx)
289 bali->free_low_idx = idx;
290 else if (idx > bali->free_high_idx)
291 bali->free_high_idx = idx;
295 ba_lun->lun_id, bali->free_aun_cnt);
309 struct ba_lun_info *bali = ba_lun->ba_lun_handle;
311 if (validate_alloc(bali, to_clone)) {
320 if (bali->aun_clone_map[to_clone] == MAX_AUN_CLONE_CNT) {
326 bali->aun_clone_map[to_clone]++;
339 struct ba_lun_info *bali = ba_lun->ba_lun_handle;
341 return bali->free_aun_cnt;
352 struct ba_lun_info *bali = ba_lun->ba_lun_handle;
354 if (bali) {
355 kfree(bali->aun_clone_map);
356 kfree(bali->lun_alloc_map);
357 kfree(bali);