Lines Matching refs:ic

520 static inline void init_inc_context(struct inc_context *ic)
522 ic->bitmap_block = NULL;
523 ic->bitmap = NULL;
524 ic->overflow_leaf = NULL;
527 static inline void exit_inc_context(struct ll_disk *ll, struct inc_context *ic)
529 if (ic->bitmap_block)
530 dm_tm_unlock(ll->tm, ic->bitmap_block);
531 if (ic->overflow_leaf)
532 dm_tm_unlock(ll->tm, ic->overflow_leaf);
535 static inline void reset_inc_context(struct ll_disk *ll, struct inc_context *ic)
537 exit_inc_context(ll, ic);
538 init_inc_context(ic);
551 static int __sm_ll_inc_overflow(struct ll_disk *ll, dm_block_t b, struct inc_context *ic)
563 reset_inc_context(ll, ic);
566 b, &index, &ll->ref_count_root, &ic->overflow_leaf);
570 n = dm_block_data(ic->overflow_leaf);
584 static int sm_ll_inc_overflow(struct ll_disk *ll, dm_block_t b, struct inc_context *ic)
594 if (ic->overflow_leaf) {
595 n = dm_block_data(ic->overflow_leaf);
606 return __sm_ll_inc_overflow(ll, b, ic);
609 static inline int shadow_bitmap(struct ll_disk *ll, struct inc_context *ic)
613 r = dm_tm_shadow_block(ll->tm, le64_to_cpu(ic->ie_disk.blocknr),
614 &dm_sm_bitmap_validator, &ic->bitmap_block, &inc);
619 ic->ie_disk.blocknr = cpu_to_le64(dm_block_location(ic->bitmap_block));
620 ic->bitmap = dm_bitmap_data(ic->bitmap_block);
629 static inline int ensure_bitmap(struct ll_disk *ll, struct inc_context *ic)
631 if (!ic->bitmap_block) {
632 int r = dm_bm_write_lock(dm_tm_get_bm(ll->tm), le64_to_cpu(ic->ie_disk.blocknr),
633 &dm_sm_bitmap_validator, &ic->bitmap_block);
638 ic->bitmap = dm_bitmap_data(ic->bitmap_block);
650 struct inc_context *ic)
662 r = ensure_bitmap(ll, ic);
666 old = sm_lookup_bitmap(ic->bitmap, bit);
670 sm_set_bitmap(ic->bitmap, bit, 1);
673 le32_add_cpu(&ic->ie_disk.nr_free, -1);
674 if (le32_to_cpu(ic->ie_disk.none_free_before) == bit)
675 ic->ie_disk.none_free_before = cpu_to_le32(bit + 1);
680 sm_set_bitmap(ic->bitmap, bit, 2);
685 sm_set_bitmap(ic->bitmap, bit, 3);
686 reset_inc_context(ll, ic);
702 r = sm_ll_inc_overflow(ll, b, ic);
720 struct inc_context ic;
724 init_inc_context(&ic);
727 r = ll->load_ie(ll, index, &ic.ie_disk);
731 r = shadow_bitmap(ll, &ic);
736 r = sm_ll_inc_bitmap(ll, b, bit, bit_end, nr_allocations, new_b, &ic);
738 exit_inc_context(ll, &ic);
743 return ll->save_ie(ll, index, &ic.ie_disk);
763 struct inc_context *ic)
765 reset_inc_context(ll, ic);
771 struct inc_context *ic, uint32_t *old_rc)
779 reset_inc_context(ll, ic);
781 b, &index, &ll->ref_count_root, &ic->overflow_leaf);
785 n = dm_block_data(ic->overflow_leaf);
797 return __sm_ll_del_overflow(ll, b, ic);
805 struct inc_context *ic, uint32_t *old_rc)
810 if (ic->overflow_leaf) {
816 n = dm_block_data(ic->overflow_leaf);
828 return __sm_ll_del_overflow(ll, b, ic);
834 return __sm_ll_dec_overflow(ll, b, ic, old_rc);
842 struct inc_context *ic,
854 r = ensure_bitmap(ll, ic);
858 old = sm_lookup_bitmap(ic->bitmap, bit);
866 sm_set_bitmap(ic->bitmap, bit, 0);
869 le32_add_cpu(&ic->ie_disk.nr_free, 1);
870 ic->ie_disk.none_free_before =
871 cpu_to_le32(min(le32_to_cpu(ic->ie_disk.none_free_before), bit));
876 sm_set_bitmap(ic->bitmap, bit, 1);
880 r = sm_ll_dec_overflow(ll, b, ic, &old);
885 r = ensure_bitmap(ll, ic);
889 sm_set_bitmap(ic->bitmap, bit, 2);
904 struct inc_context ic;
907 init_inc_context(&ic);
910 r = ll->load_ie(ll, index, &ic.ie_disk);
914 r = shadow_bitmap(ll, &ic);
919 r = sm_ll_dec_bitmap(ll, b, bit, bit_end, &ic, nr_allocations, new_b);
920 exit_inc_context(ll, &ic);
925 return ll->save_ie(ll, index, &ic.ie_disk);