• Home
  • Raw
  • Download

Lines Matching refs:rbm

63 	struct gfs2_rbm rbm;  member
75 static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
87 static inline void gfs2_setbit(const struct gfs2_rbm *rbm, bool do_clone, in gfs2_setbit() argument
91 struct gfs2_bitmap *bi = rbm_bi(rbm); in gfs2_setbit()
93 const unsigned int bit = (rbm->offset % GFS2_NBBY) * GFS2_BIT_SIZE; in gfs2_setbit()
95 byte1 = bi->bi_bh->b_data + bi->bi_offset + (rbm->offset / GFS2_NBBY); in gfs2_setbit()
104 rbm->offset, cur_state, new_state); in gfs2_setbit()
106 (unsigned long long)rbm->rgd->rd_addr, bi->bi_start); in gfs2_setbit()
110 gfs2_consist_rgrpd(rbm->rgd); in gfs2_setbit()
116 byte2 = bi->bi_clone + bi->bi_offset + (rbm->offset / GFS2_NBBY); in gfs2_setbit()
129 static inline u8 gfs2_testbit(const struct gfs2_rbm *rbm) in gfs2_testbit() argument
131 struct gfs2_bitmap *bi = rbm_bi(rbm); in gfs2_testbit()
136 byte = buffer + (rbm->offset / GFS2_NBBY); in gfs2_testbit()
137 bit = (rbm->offset % GFS2_NBBY) * GFS2_BIT_SIZE; in gfs2_testbit()
260 static int gfs2_rbm_from_block(struct gfs2_rbm *rbm, u64 block) in gfs2_rbm_from_block() argument
262 u64 rblock = block - rbm->rgd->rd_data0; in gfs2_rbm_from_block()
266 if (block >= rbm->rgd->rd_data0 + rbm->rgd->rd_data) in gfs2_rbm_from_block()
269 rbm->bii = 0; in gfs2_rbm_from_block()
270 rbm->offset = (u32)(rblock); in gfs2_rbm_from_block()
272 if (rbm->offset < rbm_bi(rbm)->bi_blocks) in gfs2_rbm_from_block()
276 rbm->offset += (sizeof(struct gfs2_rgrp) - in gfs2_rbm_from_block()
278 rbm->bii = rbm->offset / rbm->rgd->rd_sbd->sd_blocks_per_bitmap; in gfs2_rbm_from_block()
279 rbm->offset -= rbm->bii * rbm->rgd->rd_sbd->sd_blocks_per_bitmap; in gfs2_rbm_from_block()
295 static bool gfs2_rbm_incr(struct gfs2_rbm *rbm) in gfs2_rbm_incr() argument
297 if (rbm->offset + 1 < rbm_bi(rbm)->bi_blocks) { /* in the same bitmap */ in gfs2_rbm_incr()
298 rbm->offset++; in gfs2_rbm_incr()
301 if (rbm->bii == rbm->rgd->rd_length - 1) /* at the last bitmap */ in gfs2_rbm_incr()
304 rbm->offset = 0; in gfs2_rbm_incr()
305 rbm->bii++; in gfs2_rbm_incr()
318 static bool gfs2_unaligned_extlen(struct gfs2_rbm *rbm, u32 n_unaligned, u32 *len) in gfs2_unaligned_extlen() argument
324 res = gfs2_testbit(rbm); in gfs2_unaligned_extlen()
330 if (gfs2_rbm_incr(rbm)) in gfs2_unaligned_extlen()
354 struct gfs2_rbm rbm = *rrbm; in gfs2_free_extlen() local
355 u32 n_unaligned = rbm.offset & 3; in gfs2_free_extlen()
364 gfs2_unaligned_extlen(&rbm, 4 - n_unaligned, &len)) in gfs2_free_extlen()
370 bi = rbm_bi(&rbm); in gfs2_free_extlen()
376 BUG_ON(rbm.offset & 3); in gfs2_free_extlen()
377 start += (rbm.offset / GFS2_NBBY); in gfs2_free_extlen()
384 block = gfs2_rbm_to_block(&rbm); in gfs2_free_extlen()
385 if (gfs2_rbm_from_block(&rbm, block + chunk_size)) { in gfs2_free_extlen()
398 gfs2_unaligned_extlen(&rbm, n_unaligned, &len); in gfs2_free_extlen()
1490 struct gfs2_rbm rbm = { .rgd = rgd, }; in rg_mblk_search() local
1513 if (WARN_ON(gfs2_rbm_from_block(&rbm, goal))) in rg_mblk_search()
1516 ret = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &extlen, ip, true); in rg_mblk_search()
1518 rs->rs_rbm = rbm; in rg_mblk_search()
1592 static int gfs2_reservation_check_and_update(struct gfs2_rbm *rbm, in gfs2_reservation_check_and_update() argument
1597 u64 block = gfs2_rbm_to_block(rbm); in gfs2_reservation_check_and_update()
1607 extlen = gfs2_free_extlen(rbm, minext); in gfs2_reservation_check_and_update()
1616 nblock = gfs2_next_unreserved_block(rbm->rgd, block, extlen, ip); in gfs2_reservation_check_and_update()
1623 maxext->rbm = *rbm; in gfs2_reservation_check_and_update()
1628 ret = gfs2_rbm_from_block(rbm, nblock); in gfs2_reservation_check_and_update()
1653 static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext, in gfs2_rbm_find() argument
1659 int first_bii = rbm->bii; in gfs2_rbm_find()
1660 u32 first_offset = rbm->offset; in gfs2_rbm_find()
1664 int iters = rbm->rgd->rd_length; in gfs2_rbm_find()
1667 struct gfs2_extent maxext = { .rbm.rgd = rbm->rgd, }; in gfs2_rbm_find()
1673 if (rbm->offset != 0) in gfs2_rbm_find()
1677 bi = rbm_bi(rbm); in gfs2_rbm_find()
1687 initial_offset = rbm->offset; in gfs2_rbm_find()
1688 offset = gfs2_bitfit(buffer, bi->bi_len, rbm->offset, state); in gfs2_rbm_find()
1691 rbm->offset = offset; in gfs2_rbm_find()
1695 initial_bii = rbm->bii; in gfs2_rbm_find()
1696 ret = gfs2_reservation_check_and_update(rbm, ip, in gfs2_rbm_find()
1702 n += (rbm->bii - initial_bii); in gfs2_rbm_find()
1706 rbm->bii = 0; in gfs2_rbm_find()
1707 rbm->offset = 0; in gfs2_rbm_find()
1708 n += (rbm->bii - initial_bii); in gfs2_rbm_find()
1718 rbm->offset = 0; in gfs2_rbm_find()
1719 rbm->bii++; in gfs2_rbm_find()
1720 if (rbm->bii == rbm->rgd->rd_length) in gfs2_rbm_find()
1721 rbm->bii = 0; in gfs2_rbm_find()
1723 if ((rbm->bii == 0) && nowrap) in gfs2_rbm_find()
1738 (*minext < rbm->rgd->rd_extfail_pt)) in gfs2_rbm_find()
1739 rbm->rgd->rd_extfail_pt = *minext; in gfs2_rbm_find()
1744 *rbm = maxext.rbm; in gfs2_rbm_find()
1770 struct gfs2_rbm rbm = { .rgd = rgd, .bii = 0, .offset = 0 }; in try_rgrp_unlink() local
1774 error = gfs2_rbm_find(&rbm, GFS2_BLKST_UNLINKED, NULL, NULL, in try_rgrp_unlink()
1782 block = gfs2_rbm_to_block(&rbm); in try_rgrp_unlink()
1783 if (gfs2_rbm_from_block(&rbm, block + 1)) in try_rgrp_unlink()
2116 struct gfs2_rbm rbm = { .rgd = rgd, }; in gfs2_get_block_type() local
2119 ret = gfs2_rbm_from_block(&rbm, block); in gfs2_get_block_type()
2122 return gfs2_testbit(&rbm); in gfs2_get_block_type()
2135 static void gfs2_alloc_extent(const struct gfs2_rbm *rbm, bool dinode, in gfs2_alloc_extent() argument
2138 struct gfs2_rbm pos = { .rgd = rbm->rgd, }; in gfs2_alloc_extent()
2144 block = gfs2_rbm_to_block(rbm); in gfs2_alloc_extent()
2145 gfs2_trans_add_meta(rbm->rgd->rd_gl, rbm_bi(rbm)->bi_bh); in gfs2_alloc_extent()
2146 gfs2_setbit(rbm, true, dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED); in gfs2_alloc_extent()
2172 struct gfs2_rbm rbm; in rgblk_free() local
2175 rbm.rgd = gfs2_blk2rgrpd(sdp, bstart, 1); in rgblk_free()
2176 if (!rbm.rgd) { in rgblk_free()
2182 gfs2_rbm_from_block(&rbm, bstart); in rgblk_free()
2184 bi = rbm_bi(&rbm); in rgblk_free()
2193 gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); in rgblk_free()
2196 gfs2_setbit(&rbm, false, new_state); in rgblk_free()
2197 gfs2_rbm_incr(&rbm); in rgblk_free()
2200 return rbm.rgd; in rgblk_free()
2252 const struct gfs2_rbm *rbm, unsigned len) in gfs2_adjust_reservation() argument
2255 struct gfs2_rgrpd *rgd = rbm->rgd; in gfs2_adjust_reservation()
2262 if (gfs2_rbm_eq(&rs->rs_rbm, rbm)) { in gfs2_adjust_reservation()
2263 block = gfs2_rbm_to_block(rbm); in gfs2_adjust_reservation()
2292 static void gfs2_set_alloc_start(struct gfs2_rbm *rbm, in gfs2_set_alloc_start() argument
2298 *rbm = ip->i_res.rs_rbm; in gfs2_set_alloc_start()
2302 if (!dinode && rgrp_contains_block(rbm->rgd, ip->i_goal)) in gfs2_set_alloc_start()
2305 goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0; in gfs2_set_alloc_start()
2307 gfs2_rbm_from_block(rbm, goal); in gfs2_set_alloc_start()
2326 struct gfs2_rbm rbm = { .rgd = ip->i_rgd, }; in gfs2_alloc_blocks() local
2331 gfs2_set_alloc_start(&rbm, ip, dinode); in gfs2_alloc_blocks()
2332 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, NULL, ip, false); in gfs2_alloc_blocks()
2335 gfs2_set_alloc_start(&rbm, ip, dinode); in gfs2_alloc_blocks()
2336 error = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, NULL, NULL, false); in gfs2_alloc_blocks()
2343 test_bit(GBF_FULL, &rbm.rgd->rd_bits->bi_flags), in gfs2_alloc_blocks()
2344 rbm.rgd->rd_extfail_pt); in gfs2_alloc_blocks()
2348 gfs2_alloc_extent(&rbm, dinode, nblocks); in gfs2_alloc_blocks()
2349 block = gfs2_rbm_to_block(&rbm); in gfs2_alloc_blocks()
2350 rbm.rgd->rd_last_alloc = block - rbm.rgd->rd_data0; in gfs2_alloc_blocks()
2352 gfs2_adjust_reservation(ip, &rbm, *nblocks); in gfs2_alloc_blocks()
2369 if (rbm.rgd->rd_free < *nblocks) { in gfs2_alloc_blocks()
2374 rbm.rgd->rd_free -= *nblocks; in gfs2_alloc_blocks()
2376 rbm.rgd->rd_dinodes++; in gfs2_alloc_blocks()
2377 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2379 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2382 gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh); in gfs2_alloc_blocks()
2383 gfs2_rgrp_out(rbm.rgd, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2384 gfs2_rgrp_ondisk2lvb(rbm.rgd->rd_rgl, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2392 rbm.rgd->rd_free_clone -= *nblocks; in gfs2_alloc_blocks()
2393 trace_gfs2_block_alloc(ip, rbm.rgd, block, *nblocks, in gfs2_alloc_blocks()
2399 gfs2_rgrp_error(rbm.rgd); in gfs2_alloc_blocks()