Lines Matching refs:resmap
41 static unsigned int ocfs2_resv_window_bits(struct ocfs2_reservation_map *resmap,
44 struct ocfs2_super *osb = resmap->m_osb;
68 static inline int ocfs2_resmap_disabled(struct ocfs2_reservation_map *resmap)
70 if (resmap->m_osb->osb_resv_level == 0)
75 static void ocfs2_dump_resv(struct ocfs2_reservation_map *resmap)
77 struct ocfs2_super *osb = resmap->m_osb;
82 mlog(ML_NOTICE, "Dumping resmap for device %s. Bitmap length: %u\n",
83 osb->dev_str, resmap->m_bitmap_len);
85 node = rb_first(&resmap->m_reservations);
101 list_for_each_entry(resv, &resmap->m_lru, r_lru) {
112 static int ocfs2_validate_resmap_bits(struct ocfs2_reservation_map *resmap,
116 char *disk_bitmap = resmap->m_disk_bitmap;
133 static void ocfs2_check_resmap(struct ocfs2_reservation_map *resmap)
140 node = rb_first(&resmap->m_reservations);
162 if (ocfs2_resv_end(resv) >= resmap->m_bitmap_len) {
168 if (ocfs2_validate_resmap_bits(resmap, i, resv))
179 ocfs2_dump_resv(resmap);
183 static inline void ocfs2_check_resmap(struct ocfs2_reservation_map *resmap)
204 struct ocfs2_reservation_map *resmap)
206 memset(resmap, 0, sizeof(*resmap));
208 resmap->m_osb = osb;
209 resmap->m_reservations = RB_ROOT;
211 INIT_LIST_HEAD(&resmap->m_lru);
216 static void ocfs2_resv_mark_lru(struct ocfs2_reservation_map *resmap,
224 list_add_tail(&resv->r_lru, &resmap->m_lru);
233 static void ocfs2_resv_remove(struct ocfs2_reservation_map *resmap,
238 rb_erase(&resv->r_node, &resmap->m_reservations);
243 static void __ocfs2_resv_discard(struct ocfs2_reservation_map *resmap,
255 ocfs2_resv_remove(resmap, resv);
259 void ocfs2_resv_discard(struct ocfs2_reservation_map *resmap,
264 __ocfs2_resv_discard(resmap, resv);
269 static void ocfs2_resmap_clear_all_resv(struct ocfs2_reservation_map *resmap)
276 while ((node = rb_last(&resmap->m_reservations)) != NULL) {
279 __ocfs2_resv_discard(resmap, resv);
283 void ocfs2_resmap_restart(struct ocfs2_reservation_map *resmap,
286 if (ocfs2_resmap_disabled(resmap))
291 ocfs2_resmap_clear_all_resv(resmap);
292 resmap->m_bitmap_len = clen;
293 resmap->m_disk_bitmap = disk_bitmap;
298 void ocfs2_resmap_uninit(struct ocfs2_reservation_map *resmap)
303 static void ocfs2_resv_insert(struct ocfs2_reservation_map *resmap,
306 struct rb_root *root = &resmap->m_reservations;
341 ocfs2_resv_mark_lru(resmap, new);
343 ocfs2_check_resmap(resmap);
348 * @resmap: reservation map to search
356 ocfs2_find_resv_lhs(struct ocfs2_reservation_map *resmap, unsigned int goal)
360 struct rb_node *node = resmap->m_reservations.rb_node;
367 node = rb_first(&resmap->m_reservations);
403 static int ocfs2_resmap_find_free_bits(struct ocfs2_reservation_map *resmap,
410 void *bitmap = resmap->m_disk_bitmap;
415 wanted, resmap->m_bitmap_len);
420 while ((offset = ocfs2_find_next_zero_bit(bitmap, resmap->m_bitmap_len,
459 static void __ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap,
463 struct rb_root *root = &resmap->m_reservations;
488 clen = ocfs2_resmap_find_free_bits(resmap, wanted, goal,
489 resmap->m_bitmap_len - goal,
504 ocfs2_resv_insert(resmap, resv);
508 prev_resv = ocfs2_find_resv_lhs(resmap, goal);
537 ocfs2_dump_resv(resmap);
541 clen = ocfs2_resmap_find_free_bits(resmap, wanted, goal,
578 gap_len = resmap->m_bitmap_len - gap_start;
579 gap_end = resmap->m_bitmap_len - 1;
591 clen = ocfs2_resmap_find_free_bits(resmap, wanted, gap_start,
615 ocfs2_resv_insert(resmap, resv);
619 static void ocfs2_cannibalize_resv(struct ocfs2_reservation_map *resmap,
628 min_bits = ocfs2_resv_window_bits(resmap, resv) >> 1;
639 lru_resv = list_first_entry(&resmap->m_lru,
659 __ocfs2_resv_discard(resmap, lru_resv);
677 ocfs2_resv_insert(resmap, resv);
680 static void ocfs2_resv_find_window(struct ocfs2_reservation_map *resmap,
695 if (goal >= resmap->m_bitmap_len)
699 __ocfs2_resv_find_window(resmap, resv, goal, wanted);
703 __ocfs2_resv_find_window(resmap, resv, 0, wanted);
710 ocfs2_cannibalize_resv(resmap, resv, wanted);
716 int ocfs2_resmap_resv_bits(struct ocfs2_reservation_map *resmap,
720 if (resv == NULL || ocfs2_resmap_disabled(resmap))
731 unsigned int wanted = ocfs2_resv_window_bits(resmap, resv);
743 ocfs2_resv_find_window(resmap, resv, wanted);
757 ocfs2_adjust_resv_from_alloc(struct ocfs2_reservation_map *resmap,
770 __ocfs2_resv_discard(resmap, resv);
785 void ocfs2_resmap_claimed_bits(struct ocfs2_reservation_map *resmap,
791 if (resmap == NULL || ocfs2_resmap_disabled(resmap))
810 ocfs2_adjust_resv_from_alloc(resmap, resv, cstart, cend);
819 ocfs2_resv_mark_lru(resmap, resv);
825 ocfs2_check_resmap(resmap);