Lines Matching refs:rgd
107 (unsigned long long)rbm->rgd->rd_addr, bi->bi_start); in gfs2_setbit()
111 gfs2_consist_rgrpd(rbm->rgd); in gfs2_setbit()
263 u64 rblock = block - rbm->rgd->rd_data0; in gfs2_rbm_from_block()
267 if (block >= rbm->rgd->rd_data0 + rbm->rgd->rd_data) in gfs2_rbm_from_block()
279 rbm->bii = rbm->offset / rbm->rgd->rd_sbd->sd_blocks_per_bitmap; in gfs2_rbm_from_block()
280 rbm->offset -= rbm->bii * rbm->rgd->rd_sbd->sd_blocks_per_bitmap; in gfs2_rbm_from_block()
302 if (rbm->bii == rbm->rgd->rd_length - 1) /* at the last bitmap */ in gfs2_rbm_incr()
414 static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, const u8 *buffer, in gfs2_bitcount() argument
444 void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd) in gfs2_rgrp_verify() argument
446 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_verify()
448 u32 length = rgd->rd_length; in gfs2_rgrp_verify()
456 bi = rgd->rd_bits + buf; in gfs2_rgrp_verify()
458 count[x] += gfs2_bitcount(rgd, in gfs2_rgrp_verify()
464 if (count[0] != rgd->rd_free) { in gfs2_rgrp_verify()
465 if (gfs2_consist_rgrpd(rgd)) in gfs2_rgrp_verify()
467 count[0], rgd->rd_free); in gfs2_rgrp_verify()
471 tmp = rgd->rd_data - rgd->rd_free - rgd->rd_dinodes; in gfs2_rgrp_verify()
473 if (gfs2_consist_rgrpd(rgd)) in gfs2_rgrp_verify()
479 if (count[2] + count[3] != rgd->rd_dinodes) { in gfs2_rgrp_verify()
480 if (gfs2_consist_rgrpd(rgd)) in gfs2_rgrp_verify()
482 count[2] + count[3], rgd->rd_dinodes); in gfs2_rgrp_verify()
487 static inline int rgrp_contains_block(struct gfs2_rgrpd *rgd, u64 block) in rgrp_contains_block() argument
489 u64 first = rgd->rd_data0; in rgrp_contains_block()
490 u64 last = first + rgd->rd_data; in rgrp_contains_block()
544 struct gfs2_rgrpd *rgd; in gfs2_rgrpd_get_first() local
548 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); in gfs2_rgrpd_get_first()
551 return rgd; in gfs2_rgrpd_get_first()
561 struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd) in gfs2_rgrpd_get_next() argument
563 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrpd_get_next()
567 n = rb_next(&rgd->rd_node); in gfs2_rgrpd_get_next()
571 if (unlikely(&rgd->rd_node == n)) { in gfs2_rgrpd_get_next()
575 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); in gfs2_rgrpd_get_next()
577 return rgd; in gfs2_rgrpd_get_next()
587 void gfs2_free_clones(struct gfs2_rgrpd *rgd) in gfs2_free_clones() argument
591 for (x = 0; x < rgd->rd_length; x++) { in gfs2_free_clones()
592 struct gfs2_bitmap *bi = rgd->rd_bits + x; in gfs2_free_clones()
637 struct gfs2_rgrpd *rgd; in __rs_deltree() local
642 rgd = rs->rs_rbm.rgd; in __rs_deltree()
644 rb_erase(&rs->rs_node, &rgd->rd_rstree); in __rs_deltree()
651 BUG_ON(rs->rs_rbm.rgd->rd_reserved < rs->rs_free); in __rs_deltree()
652 rs->rs_rbm.rgd->rd_reserved -= rs->rs_free; in __rs_deltree()
657 rgd->rd_extfail_pt += rs->rs_free; in __rs_deltree()
670 struct gfs2_rgrpd *rgd; in gfs2_rs_deltree() local
672 rgd = rs->rs_rbm.rgd; in gfs2_rs_deltree()
673 if (rgd) { in gfs2_rs_deltree()
674 spin_lock(&rgd->rd_rsspin); in gfs2_rs_deltree()
676 spin_unlock(&rgd->rd_rsspin); in gfs2_rs_deltree()
706 static void return_all_reservations(struct gfs2_rgrpd *rgd) in return_all_reservations() argument
711 spin_lock(&rgd->rd_rsspin); in return_all_reservations()
712 while ((n = rb_first(&rgd->rd_rstree))) { in return_all_reservations()
716 spin_unlock(&rgd->rd_rsspin); in return_all_reservations()
722 struct gfs2_rgrpd *rgd; in gfs2_clear_rgrpd() local
726 rgd = rb_entry(n, struct gfs2_rgrpd, rd_node); in gfs2_clear_rgrpd()
727 gl = rgd->rd_gl; in gfs2_clear_rgrpd()
739 gfs2_free_clones(rgd); in gfs2_clear_rgrpd()
740 kfree(rgd->rd_bits); in gfs2_clear_rgrpd()
741 return_all_reservations(rgd); in gfs2_clear_rgrpd()
742 kmem_cache_free(gfs2_rgrpd_cachep, rgd); in gfs2_clear_rgrpd()
746 static void gfs2_rindex_print(const struct gfs2_rgrpd *rgd) in gfs2_rindex_print() argument
748 pr_info("ri_addr = %llu\n", (unsigned long long)rgd->rd_addr); in gfs2_rindex_print()
749 pr_info("ri_length = %u\n", rgd->rd_length); in gfs2_rindex_print()
750 pr_info("ri_data0 = %llu\n", (unsigned long long)rgd->rd_data0); in gfs2_rindex_print()
751 pr_info("ri_data = %u\n", rgd->rd_data); in gfs2_rindex_print()
752 pr_info("ri_bitbytes = %u\n", rgd->rd_bitbytes); in gfs2_rindex_print()
764 static int compute_bitstructs(struct gfs2_rgrpd *rgd) in compute_bitstructs() argument
766 struct gfs2_sbd *sdp = rgd->rd_sbd; in compute_bitstructs()
768 u32 length = rgd->rd_length; /* # blocks in hdr & bitmap */ in compute_bitstructs()
775 rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS); in compute_bitstructs()
776 if (!rgd->rd_bits) in compute_bitstructs()
779 bytes_left = rgd->rd_bitbytes; in compute_bitstructs()
782 bi = rgd->rd_bits + x; in compute_bitstructs()
803 bi->bi_start = rgd->rd_bitbytes - bytes_left; in compute_bitstructs()
811 bi->bi_start = rgd->rd_bitbytes - bytes_left; in compute_bitstructs()
820 gfs2_consist_rgrpd(rgd); in compute_bitstructs()
823 bi = rgd->rd_bits + (length - 1); in compute_bitstructs()
824 if ((bi->bi_start + bi->bi_len) * GFS2_NBBY != rgd->rd_data) { in compute_bitstructs()
825 if (gfs2_consist_rgrpd(rgd)) { in compute_bitstructs()
826 gfs2_rindex_print(rgd); in compute_bitstructs()
863 static int rgd_insert(struct gfs2_rgrpd *rgd) in rgd_insert() argument
865 struct gfs2_sbd *sdp = rgd->rd_sbd; in rgd_insert()
874 if (rgd->rd_addr < cur->rd_addr) in rgd_insert()
876 else if (rgd->rd_addr > cur->rd_addr) in rgd_insert()
882 rb_link_node(&rgd->rd_node, parent, newn); in rgd_insert()
883 rb_insert_color(&rgd->rd_node, &sdp->sd_rindex_tree); in rgd_insert()
902 struct gfs2_rgrpd *rgd; in read_rindex_entry() local
913 rgd = kmem_cache_zalloc(gfs2_rgrpd_cachep, GFP_NOFS); in read_rindex_entry()
915 if (!rgd) in read_rindex_entry()
918 rgd->rd_sbd = sdp; in read_rindex_entry()
919 rgd->rd_addr = be64_to_cpu(buf.ri_addr); in read_rindex_entry()
920 rgd->rd_length = be32_to_cpu(buf.ri_length); in read_rindex_entry()
921 rgd->rd_data0 = be64_to_cpu(buf.ri_data0); in read_rindex_entry()
922 rgd->rd_data = be32_to_cpu(buf.ri_data); in read_rindex_entry()
923 rgd->rd_bitbytes = be32_to_cpu(buf.ri_bitbytes); in read_rindex_entry()
924 spin_lock_init(&rgd->rd_rsspin); in read_rindex_entry()
926 error = compute_bitstructs(rgd); in read_rindex_entry()
930 error = gfs2_glock_get(sdp, rgd->rd_addr, in read_rindex_entry()
931 &gfs2_rgrp_glops, CREATE, &rgd->rd_gl); in read_rindex_entry()
935 rgd->rd_gl->gl_object = rgd; in read_rindex_entry()
936 rgd->rd_gl->gl_vm.start = (rgd->rd_addr * bsize) & PAGE_CACHE_MASK; in read_rindex_entry()
937 rgd->rd_gl->gl_vm.end = PAGE_CACHE_ALIGN((rgd->rd_addr + in read_rindex_entry()
938 rgd->rd_length) * bsize) - 1; in read_rindex_entry()
939 rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr; in read_rindex_entry()
940 rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED); in read_rindex_entry()
941 if (rgd->rd_data > sdp->sd_max_rg_data) in read_rindex_entry()
942 sdp->sd_max_rg_data = rgd->rd_data; in read_rindex_entry()
944 error = rgd_insert(rgd); in read_rindex_entry()
950 gfs2_glock_put(rgd->rd_gl); in read_rindex_entry()
953 kfree(rgd->rd_bits); in read_rindex_entry()
954 kmem_cache_free(gfs2_rgrpd_cachep, rgd); in read_rindex_entry()
968 struct gfs2_rgrpd *rgd, *first; in set_rgrp_preferences() local
973 rgd = gfs2_rgrpd_get_first(sdp); in set_rgrp_preferences()
975 rgd = gfs2_rgrpd_get_next(rgd); in set_rgrp_preferences()
976 first = rgd; in set_rgrp_preferences()
979 rgd->rd_flags |= GFS2_RDF_PREFERRED; in set_rgrp_preferences()
981 rgd = gfs2_rgrpd_get_next(rgd); in set_rgrp_preferences()
982 if (!rgd || rgd == first) in set_rgrp_preferences()
985 } while (rgd && rgd != first); in set_rgrp_preferences()
1055 static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) in gfs2_rgrp_in() argument
1062 rgd->rd_flags &= GFS2_RDF_MASK; in gfs2_rgrp_in()
1063 rgd->rd_flags |= rg_flags; in gfs2_rgrp_in()
1064 rgd->rd_free = be32_to_cpu(str->rg_free); in gfs2_rgrp_in()
1065 rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes); in gfs2_rgrp_in()
1066 rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration); in gfs2_rgrp_in()
1069 static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) in gfs2_rgrp_out() argument
1073 str->rg_flags = cpu_to_be32(rgd->rd_flags & ~GFS2_RDF_MASK); in gfs2_rgrp_out()
1074 str->rg_free = cpu_to_be32(rgd->rd_free); in gfs2_rgrp_out()
1075 str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes); in gfs2_rgrp_out()
1077 str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration); in gfs2_rgrp_out()
1081 static int gfs2_rgrp_lvb_valid(struct gfs2_rgrpd *rgd) in gfs2_rgrp_lvb_valid() argument
1083 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; in gfs2_rgrp_lvb_valid()
1084 struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data; in gfs2_rgrp_lvb_valid()
1105 static void update_rgrp_lvb_unlinked(struct gfs2_rgrpd *rgd, u32 change) in update_rgrp_lvb_unlinked() argument
1107 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; in update_rgrp_lvb_unlinked()
1112 static u32 count_unlinked(struct gfs2_rgrpd *rgd) in count_unlinked() argument
1115 const u32 length = rgd->rd_length; in count_unlinked()
1119 for (i = 0, bi = rgd->rd_bits; i < length; i++, bi++) { in count_unlinked()
1147 static int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd) in gfs2_rgrp_bh_get() argument
1149 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_bh_get()
1150 struct gfs2_glock *gl = rgd->rd_gl; in gfs2_rgrp_bh_get()
1151 unsigned int length = rgd->rd_length; in gfs2_rgrp_bh_get()
1156 if (rgd->rd_bits[0].bi_bh != NULL) in gfs2_rgrp_bh_get()
1160 bi = rgd->rd_bits + x; in gfs2_rgrp_bh_get()
1161 error = gfs2_meta_read(gl, rgd->rd_addr + x, 0, &bi->bi_bh); in gfs2_rgrp_bh_get()
1167 bi = rgd->rd_bits + y; in gfs2_rgrp_bh_get()
1178 if (!(rgd->rd_flags & GFS2_RDF_UPTODATE)) { in gfs2_rgrp_bh_get()
1180 clear_bit(GBF_FULL, &rgd->rd_bits[x].bi_flags); in gfs2_rgrp_bh_get()
1181 gfs2_rgrp_in(rgd, (rgd->rd_bits[0].bi_bh)->b_data); in gfs2_rgrp_bh_get()
1182 rgd->rd_flags |= (GFS2_RDF_UPTODATE | GFS2_RDF_CHECK); in gfs2_rgrp_bh_get()
1183 rgd->rd_free_clone = rgd->rd_free; in gfs2_rgrp_bh_get()
1185 rgd->rd_extfail_pt = rgd->rd_free; in gfs2_rgrp_bh_get()
1187 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) { in gfs2_rgrp_bh_get()
1188 rgd->rd_rgl->rl_unlinked = cpu_to_be32(count_unlinked(rgd)); in gfs2_rgrp_bh_get()
1189 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, in gfs2_rgrp_bh_get()
1190 rgd->rd_bits[0].bi_bh->b_data); in gfs2_rgrp_bh_get()
1193 if (!gfs2_rgrp_lvb_valid(rgd)){ in gfs2_rgrp_bh_get()
1194 gfs2_consist_rgrpd(rgd); in gfs2_rgrp_bh_get()
1198 if (rgd->rd_rgl->rl_unlinked == 0) in gfs2_rgrp_bh_get()
1199 rgd->rd_flags &= ~GFS2_RDF_CHECK; in gfs2_rgrp_bh_get()
1205 bi = rgd->rd_bits + x; in gfs2_rgrp_bh_get()
1214 static int update_rgrp_lvb(struct gfs2_rgrpd *rgd) in update_rgrp_lvb() argument
1218 if (rgd->rd_flags & GFS2_RDF_UPTODATE) in update_rgrp_lvb()
1221 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) in update_rgrp_lvb()
1222 return gfs2_rgrp_bh_get(rgd); in update_rgrp_lvb()
1224 rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags); in update_rgrp_lvb()
1226 rgd->rd_flags &= GFS2_RDF_MASK; in update_rgrp_lvb()
1227 rgd->rd_flags |= (rl_flags | GFS2_RDF_UPTODATE | GFS2_RDF_CHECK); in update_rgrp_lvb()
1228 if (rgd->rd_rgl->rl_unlinked == 0) in update_rgrp_lvb()
1229 rgd->rd_flags &= ~GFS2_RDF_CHECK; in update_rgrp_lvb()
1230 rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free); in update_rgrp_lvb()
1231 rgd->rd_free_clone = rgd->rd_free; in update_rgrp_lvb()
1232 rgd->rd_dinodes = be32_to_cpu(rgd->rd_rgl->rl_dinodes); in update_rgrp_lvb()
1233 rgd->rd_igeneration = be64_to_cpu(rgd->rd_rgl->rl_igeneration); in update_rgrp_lvb()
1239 struct gfs2_rgrpd *rgd = gh->gh_gl->gl_object; in gfs2_rgrp_go_lock() local
1240 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_go_lock()
1244 return gfs2_rgrp_bh_get(rgd); in gfs2_rgrp_go_lock()
1253 void gfs2_rgrp_brelse(struct gfs2_rgrpd *rgd) in gfs2_rgrp_brelse() argument
1255 int x, length = rgd->rd_length; in gfs2_rgrp_brelse()
1258 struct gfs2_bitmap *bi = rgd->rd_bits + x; in gfs2_rgrp_brelse()
1275 struct gfs2_rgrpd *rgd = gh->gh_gl->gl_object; in gfs2_rgrp_go_unlock() local
1279 if (rgd && demote_requested) in gfs2_rgrp_go_unlock()
1280 gfs2_rgrp_brelse(rgd); in gfs2_rgrp_go_unlock()
1364 struct gfs2_rgrpd *rgd; in gfs2_fitrim() local
1396 rgd = gfs2_blk2rgrpd(sdp, start, 0); in gfs2_fitrim()
1405 ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh); in gfs2_fitrim()
1409 if (!(rgd->rd_flags & GFS2_RGF_TRIMMED)) { in gfs2_fitrim()
1411 for (x = 0; x < rgd->rd_length; x++) { in gfs2_fitrim()
1412 struct gfs2_bitmap *bi = rgd->rd_bits + x; in gfs2_fitrim()
1414 rgd->rd_data0, NULL, bi, minlen, in gfs2_fitrim()
1426 bh = rgd->rd_bits[0].bi_bh; in gfs2_fitrim()
1427 rgd->rd_flags |= GFS2_RGF_TRIMMED; in gfs2_fitrim()
1428 gfs2_trans_add_meta(rgd->rd_gl, bh); in gfs2_fitrim()
1429 gfs2_rgrp_out(rgd, bh->b_data); in gfs2_fitrim()
1430 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, bh->b_data); in gfs2_fitrim()
1436 if (rgd == rgd_end) in gfs2_fitrim()
1439 rgd = gfs2_rgrpd_get_next(rgd); in gfs2_fitrim()
1460 struct gfs2_rgrpd *rgd = rs->rs_rbm.rgd; in rs_insert() local
1465 spin_lock(&rgd->rd_rsspin); in rs_insert()
1466 newn = &rgd->rd_rstree.rb_node; in rs_insert()
1478 spin_unlock(&rgd->rd_rsspin); in rs_insert()
1485 rb_insert_color(&rs->rs_node, &rgd->rd_rstree); in rs_insert()
1488 rgd->rd_reserved += rs->rs_free; /* blocks reserved */ in rs_insert()
1489 spin_unlock(&rgd->rd_rsspin); in rs_insert()
1501 static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, in rg_mblk_search() argument
1504 struct gfs2_rbm rbm = { .rgd = rgd, }; in rg_mblk_search()
1508 u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved; in rg_mblk_search()
1518 if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen)) in rg_mblk_search()
1522 if (rgrp_contains_block(rgd, ip->i_goal)) in rg_mblk_search()
1525 goal = rgd->rd_last_alloc + rgd->rd_data0; in rg_mblk_search()
1537 if (goal == rgd->rd_last_alloc + rgd->rd_data0) in rg_mblk_search()
1538 rgd->rd_last_alloc = 0; in rg_mblk_search()
1555 static u64 gfs2_next_unreserved_block(struct gfs2_rgrpd *rgd, u64 block, in gfs2_next_unreserved_block() argument
1563 spin_lock(&rgd->rd_rsspin); in gfs2_next_unreserved_block()
1564 n = rgd->rd_rstree.rb_node; in gfs2_next_unreserved_block()
1586 spin_unlock(&rgd->rd_rsspin); in gfs2_next_unreserved_block()
1630 nblock = gfs2_next_unreserved_block(rbm->rgd, block, extlen, ip); in gfs2_reservation_check_and_update()
1680 int iters = rbm->rgd->rd_length; in gfs2_rbm_find()
1683 struct gfs2_extent maxext = { .rbm.rgd = rbm->rgd, }; in gfs2_rbm_find()
1736 if (rbm->bii == rbm->rgd->rd_length) in gfs2_rbm_find()
1754 (*minext < rbm->rgd->rd_extfail_pt)) in gfs2_rbm_find()
1755 rbm->rgd->rd_extfail_pt = *minext; in gfs2_rbm_find()
1778 static void try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked, u64 skip) in try_rgrp_unlink() argument
1781 struct gfs2_sbd *sdp = rgd->rd_sbd; in try_rgrp_unlink()
1786 struct gfs2_rbm rbm = { .rgd = rgd, .bii = 0, .offset = 0 }; in try_rgrp_unlink()
1830 rgd->rd_flags &= ~GFS2_RDF_CHECK; in try_rgrp_unlink()
1861 static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops) in gfs2_rgrp_congested() argument
1863 const struct gfs2_glock *gl = rgd->rd_gl; in gfs2_rgrp_congested()
1920 rs->rs_rbm.rgd->rd_gl->gl_dstamp)); in gfs2_rgrp_used_recently()
1936 struct gfs2_rgrpd *rgd = *pos; in gfs2_select_rgrp() local
1937 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_select_rgrp()
1939 rgd = gfs2_rgrpd_get_next(rgd); in gfs2_select_rgrp()
1940 if (rgd == NULL) in gfs2_select_rgrp()
1941 rgd = gfs2_rgrpd_get_first(sdp); in gfs2_select_rgrp()
1942 *pos = rgd; in gfs2_select_rgrp()
1943 if (rgd != begin) /* If we didn't wrap */ in gfs2_select_rgrp()
1954 static inline int fast_to_acquire(struct gfs2_rgrpd *rgd) in fast_to_acquire() argument
1956 struct gfs2_glock *gl = rgd->rd_gl; in fast_to_acquire()
1962 if (rgd->rd_flags & GFS2_RDF_PREFERRED) in fast_to_acquire()
1998 begin = rs->rs_rbm.rgd; in gfs2_inplace_reserve()
2000 rs->rs_rbm.rgd = begin = ip->i_rgd; in gfs2_inplace_reserve()
2003 rs->rs_rbm.rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1); in gfs2_inplace_reserve()
2007 if (rs->rs_rbm.rgd == NULL) in gfs2_inplace_reserve()
2013 if (!gfs2_glock_is_locked_by_me(rs->rs_rbm.rgd->rd_gl)) { in gfs2_inplace_reserve()
2019 !fast_to_acquire(rs->rs_rbm.rgd)) in gfs2_inplace_reserve()
2023 gfs2_rgrp_congested(rs->rs_rbm.rgd, loops)) in gfs2_inplace_reserve()
2026 error = gfs2_glock_nq_init(rs->rs_rbm.rgd->rd_gl, in gfs2_inplace_reserve()
2032 gfs2_rgrp_congested(rs->rs_rbm.rgd, loops)) in gfs2_inplace_reserve()
2035 error = update_rgrp_lvb(rs->rs_rbm.rgd); in gfs2_inplace_reserve()
2044 if ((rs->rs_rbm.rgd->rd_flags & (GFS2_RGF_NOALLOC | in gfs2_inplace_reserve()
2046 (loops == 0 && ap->target > rs->rs_rbm.rgd->rd_extfail_pt)) in gfs2_inplace_reserve()
2050 gfs2_rgrp_bh_get(rs->rs_rbm.rgd); in gfs2_inplace_reserve()
2054 rg_mblk_search(rs->rs_rbm.rgd, ip, ap); in gfs2_inplace_reserve()
2061 if (rs->rs_rbm.rgd->rd_free_clone >= ap->target || in gfs2_inplace_reserve()
2063 rs->rs_rbm.rgd->rd_free_clone >= ap->min_target)) { in gfs2_inplace_reserve()
2064 ip->i_rgd = rs->rs_rbm.rgd; in gfs2_inplace_reserve()
2070 if (rs->rs_rbm.rgd->rd_flags & GFS2_RDF_CHECK) in gfs2_inplace_reserve()
2071 try_rgrp_unlink(rs->rs_rbm.rgd, &last_unlinked, in gfs2_inplace_reserve()
2083 if (gfs2_select_rgrp(&rs->rs_rbm.rgd, begin)) in gfs2_inplace_reserve()
2130 static unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block) in gfs2_get_block_type() argument
2132 struct gfs2_rbm rbm = { .rgd = rgd, }; in gfs2_get_block_type()
2154 struct gfs2_rbm pos = { .rgd = rbm->rgd, }; in gfs2_alloc_extent()
2161 gfs2_trans_add_meta(rbm->rgd->rd_gl, rbm_bi(rbm)->bi_bh); in gfs2_alloc_extent()
2168 gfs2_trans_add_meta(pos.rgd->rd_gl, rbm_bi(&pos)->bi_bh); in gfs2_alloc_extent()
2191 rbm.rgd = gfs2_blk2rgrpd(sdp, bstart, 1); in rgblk_free()
2192 if (!rbm.rgd) { in rgblk_free()
2209 gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); in rgblk_free()
2216 return rbm.rgd; in rgblk_free()
2228 struct gfs2_rgrpd *rgd = gl->gl_object; in gfs2_rgrp_dump() local
2232 if (rgd == NULL) in gfs2_rgrp_dump()
2235 (unsigned long long)rgd->rd_addr, rgd->rd_flags, in gfs2_rgrp_dump()
2236 rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes, in gfs2_rgrp_dump()
2237 rgd->rd_reserved, rgd->rd_extfail_pt); in gfs2_rgrp_dump()
2238 spin_lock(&rgd->rd_rsspin); in gfs2_rgrp_dump()
2239 for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) { in gfs2_rgrp_dump()
2243 spin_unlock(&rgd->rd_rsspin); in gfs2_rgrp_dump()
2246 static void gfs2_rgrp_error(struct gfs2_rgrpd *rgd) in gfs2_rgrp_error() argument
2248 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_error()
2250 (unsigned long long)rgd->rd_addr); in gfs2_rgrp_error()
2252 gfs2_rgrp_dump(NULL, rgd->rd_gl); in gfs2_rgrp_error()
2253 rgd->rd_flags |= GFS2_RDF_ERROR; in gfs2_rgrp_error()
2271 struct gfs2_rgrpd *rgd = rbm->rgd; in gfs2_adjust_reservation() local
2276 spin_lock(&rgd->rd_rsspin); in gfs2_adjust_reservation()
2283 rgd->rd_reserved -= rlen; in gfs2_adjust_reservation()
2294 spin_unlock(&rgd->rd_rsspin); in gfs2_adjust_reservation()
2318 if (!dinode && rgrp_contains_block(rbm->rgd, ip->i_goal)) in gfs2_set_alloc_start()
2321 goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0; in gfs2_set_alloc_start()
2342 struct gfs2_rbm rbm = { .rgd = ip->i_rgd, }; in gfs2_alloc_blocks()
2360 test_bit(GBF_FULL, &rbm.rgd->rd_bits->bi_flags), in gfs2_alloc_blocks()
2361 rbm.rgd->rd_extfail_pt); in gfs2_alloc_blocks()
2367 rbm.rgd->rd_last_alloc = block - rbm.rgd->rd_data0; in gfs2_alloc_blocks()
2386 if (rbm.rgd->rd_free < *nblocks) { in gfs2_alloc_blocks()
2391 rbm.rgd->rd_free -= *nblocks; in gfs2_alloc_blocks()
2393 rbm.rgd->rd_dinodes++; in gfs2_alloc_blocks()
2394 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2396 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2399 gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh); in gfs2_alloc_blocks()
2400 gfs2_rgrp_out(rbm.rgd, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2401 gfs2_rgrp_ondisk2lvb(rbm.rgd->rd_rgl, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2409 rbm.rgd->rd_free_clone -= *nblocks; in gfs2_alloc_blocks()
2410 trace_gfs2_block_alloc(ip, rbm.rgd, block, *nblocks, in gfs2_alloc_blocks()
2416 gfs2_rgrp_error(rbm.rgd); in gfs2_alloc_blocks()
2432 struct gfs2_rgrpd *rgd; in __gfs2_free_blocks() local
2434 rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE); in __gfs2_free_blocks()
2435 if (!rgd) in __gfs2_free_blocks()
2437 trace_gfs2_block_alloc(ip, rgd, bstart, blen, GFS2_BLKST_FREE); in __gfs2_free_blocks()
2438 rgd->rd_free += blen; in __gfs2_free_blocks()
2439 rgd->rd_flags &= ~GFS2_RGF_TRIMMED; in __gfs2_free_blocks()
2440 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in __gfs2_free_blocks()
2441 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in __gfs2_free_blocks()
2442 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in __gfs2_free_blocks()
2470 struct gfs2_rgrpd *rgd; in gfs2_unlink_di() local
2473 rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_UNLINKED); in gfs2_unlink_di()
2474 if (!rgd) in gfs2_unlink_di()
2476 trace_gfs2_block_alloc(ip, rgd, blkno, 1, GFS2_BLKST_UNLINKED); in gfs2_unlink_di()
2477 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in gfs2_unlink_di()
2478 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in gfs2_unlink_di()
2479 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in gfs2_unlink_di()
2480 update_rgrp_lvb_unlinked(rgd, 1); in gfs2_unlink_di()
2483 static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno) in gfs2_free_uninit_di() argument
2485 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_free_uninit_di()
2491 gfs2_assert_withdraw(sdp, rgd == tmp_rgd); in gfs2_free_uninit_di()
2493 if (!rgd->rd_dinodes) in gfs2_free_uninit_di()
2494 gfs2_consist_rgrpd(rgd); in gfs2_free_uninit_di()
2495 rgd->rd_dinodes--; in gfs2_free_uninit_di()
2496 rgd->rd_free++; in gfs2_free_uninit_di()
2498 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in gfs2_free_uninit_di()
2499 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in gfs2_free_uninit_di()
2500 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in gfs2_free_uninit_di()
2501 update_rgrp_lvb_unlinked(rgd, -1); in gfs2_free_uninit_di()
2507 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip) in gfs2_free_di() argument
2509 gfs2_free_uninit_di(rgd, ip->i_no_addr); in gfs2_free_di()
2510 trace_gfs2_block_alloc(ip, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE); in gfs2_free_di()
2528 struct gfs2_rgrpd *rgd; in gfs2_check_blk_type() local
2532 rgd = gfs2_blk2rgrpd(sdp, no_addr, 1); in gfs2_check_blk_type()
2533 if (!rgd) in gfs2_check_blk_type()
2536 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_SHARED, 0, &rgd_gh); in gfs2_check_blk_type()
2540 if (gfs2_get_block_type(rgd, no_addr) != type) in gfs2_check_blk_type()
2564 struct gfs2_rgrpd *rgd; in gfs2_rlist_add() local
2573 rgd = ip->i_rgd; in gfs2_rlist_add()
2575 rgd = gfs2_blk2rgrpd(sdp, block, 1); in gfs2_rlist_add()
2576 if (!rgd) { in gfs2_rlist_add()
2580 ip->i_rgd = rgd; in gfs2_rlist_add()
2583 if (rlist->rl_rgd[x] == rgd) in gfs2_rlist_add()
2602 rlist->rl_rgd[rlist->rl_rgrps++] = rgd; in gfs2_rlist_add()