Lines Matching refs:resmap

39 static unsigned int ocfs2_resv_window_bits(struct ocfs2_reservation_map *resmap,
42 struct ocfs2_super *osb = resmap->m_osb;
66 static inline int ocfs2_resmap_disabled(struct ocfs2_reservation_map *resmap)
68 if (resmap->m_osb->osb_resv_level == 0)
73 static void ocfs2_dump_resv(struct ocfs2_reservation_map *resmap)
75 struct ocfs2_super *osb = resmap->m_osb;
80 mlog(ML_NOTICE, "Dumping resmap for device %s. Bitmap length: %u\n",
81 osb->dev_str, resmap->m_bitmap_len);
83 node = rb_first(&resmap->m_reservations);
99 list_for_each_entry(resv, &resmap->m_lru, r_lru) {
110 static int ocfs2_validate_resmap_bits(struct ocfs2_reservation_map *resmap,
114 char *disk_bitmap = resmap->m_disk_bitmap;
131 static void ocfs2_check_resmap(struct ocfs2_reservation_map *resmap)
138 node = rb_first(&resmap->m_reservations);
160 if (ocfs2_resv_end(resv) >= resmap->m_bitmap_len) {
166 if (ocfs2_validate_resmap_bits(resmap, i, resv))
177 ocfs2_dump_resv(resmap);
181 static inline void ocfs2_check_resmap(struct ocfs2_reservation_map *resmap)
202 struct ocfs2_reservation_map *resmap)
204 memset(resmap, 0, sizeof(*resmap));
206 resmap->m_osb = osb;
207 resmap->m_reservations = RB_ROOT;
209 INIT_LIST_HEAD(&resmap->m_lru);
212 static void ocfs2_resv_mark_lru(struct ocfs2_reservation_map *resmap,
220 list_add_tail(&resv->r_lru, &resmap->m_lru);
229 static void ocfs2_resv_remove(struct ocfs2_reservation_map *resmap,
234 rb_erase(&resv->r_node, &resmap->m_reservations);
239 static void __ocfs2_resv_discard(struct ocfs2_reservation_map *resmap,
251 ocfs2_resv_remove(resmap, resv);
255 void ocfs2_resv_discard(struct ocfs2_reservation_map *resmap,
260 __ocfs2_resv_discard(resmap, resv);
265 static void ocfs2_resmap_clear_all_resv(struct ocfs2_reservation_map *resmap)
272 while ((node = rb_last(&resmap->m_reservations)) != NULL) {
275 __ocfs2_resv_discard(resmap, resv);
279 void ocfs2_resmap_restart(struct ocfs2_reservation_map *resmap,
282 if (ocfs2_resmap_disabled(resmap))
287 ocfs2_resmap_clear_all_resv(resmap);
288 resmap->m_bitmap_len = clen;
289 resmap->m_disk_bitmap = disk_bitmap;
294 void ocfs2_resmap_uninit(struct ocfs2_reservation_map *resmap)
299 static void ocfs2_resv_insert(struct ocfs2_reservation_map *resmap,
302 struct rb_root *root = &resmap->m_reservations;
337 ocfs2_resv_mark_lru(resmap, new);
339 ocfs2_check_resmap(resmap);
344 * @resmap: reservation map to search
352 ocfs2_find_resv_lhs(struct ocfs2_reservation_map *resmap, unsigned int goal)
356 struct rb_node *node = resmap->m_reservations.rb_node;
363 node = rb_first(&resmap->m_reservations);
399 static int ocfs2_resmap_find_free_bits(struct ocfs2_reservation_map *resmap,
406 void *bitmap = resmap->m_disk_bitmap;
411 wanted, resmap->m_bitmap_len);
416 while ((offset = ocfs2_find_next_zero_bit(bitmap, resmap->m_bitmap_len,
455 static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap,
459 struct rb_root *root = &resmap->m_reservations;
484 clen = ocfs2_resmap_find_free_bits(resmap, wanted, goal,
485 resmap->m_bitmap_len - goal,
500 ocfs2_resv_insert(resmap, resv);
504 prev_resv = ocfs2_find_resv_lhs(resmap, goal);
533 ocfs2_dump_resv(resmap);
537 clen = ocfs2_resmap_find_free_bits(resmap, wanted, goal,
574 gap_len = resmap->m_bitmap_len - gap_start;
575 gap_end = resmap->m_bitmap_len - 1;
587 clen = ocfs2_resmap_find_free_bits(resmap, wanted, gap_start,
611 ocfs2_resv_insert(resmap, resv);
615 static void ocfs2_cannibalize_resv(struct ocfs2_reservation_map *resmap,
624 min_bits = ocfs2_resv_window_bits(resmap, resv) >> 1;
635 lru_resv = list_first_entry(&resmap->m_lru,
655 __ocfs2_resv_discard(resmap, lru_resv);
673 ocfs2_resv_insert(resmap, resv);
676 static void ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap,
691 if (goal >= resmap->m_bitmap_len)
695 __ocfs2_resv_find_window(resmap, resv, goal, wanted);
699 __ocfs2_resv_find_window(resmap, resv, 0, wanted);
706 ocfs2_cannibalize_resv(resmap, resv, wanted);
712 int ocfs2_resmap_resv_bits(struct ocfs2_reservation_map *resmap,
716 if (resv == NULL || ocfs2_resmap_disabled(resmap))
727 unsigned int wanted = ocfs2_resv_window_bits(resmap, resv);
739 ocfs2_resv_find_window(resmap, resv, wanted);
753 ocfs2_adjust_resv_from_alloc(struct ocfs2_reservation_map *resmap,
766 __ocfs2_resv_discard(resmap, resv);
781 void ocfs2_resmap_claimed_bits(struct ocfs2_reservation_map *resmap,
787 if (resmap == NULL || ocfs2_resmap_disabled(resmap))
806 ocfs2_adjust_resv_from_alloc(resmap, resv, cstart, cend);
815 ocfs2_resv_mark_lru(resmap, resv);
821 ocfs2_check_resmap(resmap);