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; in read_rindex_entry()
937 rgd->rd_gl->gl_vm.end = rgd->rd_gl->gl_vm.start + (rgd->rd_length * bsize) - 1; in read_rindex_entry()
938 rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr; in read_rindex_entry()
939 rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED); in read_rindex_entry()
940 if (rgd->rd_data > sdp->sd_max_rg_data) in read_rindex_entry()
941 sdp->sd_max_rg_data = rgd->rd_data; in read_rindex_entry()
943 error = rgd_insert(rgd); in read_rindex_entry()
949 gfs2_glock_put(rgd->rd_gl); in read_rindex_entry()
952 kfree(rgd->rd_bits); in read_rindex_entry()
953 kmem_cache_free(gfs2_rgrpd_cachep, rgd); in read_rindex_entry()
967 struct gfs2_rgrpd *rgd, *first; in set_rgrp_preferences() local
972 rgd = gfs2_rgrpd_get_first(sdp); in set_rgrp_preferences()
974 rgd = gfs2_rgrpd_get_next(rgd); in set_rgrp_preferences()
975 first = rgd; in set_rgrp_preferences()
978 rgd->rd_flags |= GFS2_RDF_PREFERRED; in set_rgrp_preferences()
980 rgd = gfs2_rgrpd_get_next(rgd); in set_rgrp_preferences()
981 if (rgd == first) in set_rgrp_preferences()
984 } while (rgd != first); in set_rgrp_preferences()
1054 static void gfs2_rgrp_in(struct gfs2_rgrpd *rgd, const void *buf) in gfs2_rgrp_in() argument
1061 rgd->rd_flags &= GFS2_RDF_MASK; in gfs2_rgrp_in()
1062 rgd->rd_flags |= rg_flags; in gfs2_rgrp_in()
1063 rgd->rd_free = be32_to_cpu(str->rg_free); in gfs2_rgrp_in()
1064 rgd->rd_dinodes = be32_to_cpu(str->rg_dinodes); in gfs2_rgrp_in()
1065 rgd->rd_igeneration = be64_to_cpu(str->rg_igeneration); in gfs2_rgrp_in()
1068 static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) in gfs2_rgrp_out() argument
1072 str->rg_flags = cpu_to_be32(rgd->rd_flags & ~GFS2_RDF_MASK); in gfs2_rgrp_out()
1073 str->rg_free = cpu_to_be32(rgd->rd_free); in gfs2_rgrp_out()
1074 str->rg_dinodes = cpu_to_be32(rgd->rd_dinodes); in gfs2_rgrp_out()
1076 str->rg_igeneration = cpu_to_be64(rgd->rd_igeneration); in gfs2_rgrp_out()
1080 static int gfs2_rgrp_lvb_valid(struct gfs2_rgrpd *rgd) in gfs2_rgrp_lvb_valid() argument
1082 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; in gfs2_rgrp_lvb_valid()
1083 struct gfs2_rgrp *str = (struct gfs2_rgrp *)rgd->rd_bits[0].bi_bh->b_data; in gfs2_rgrp_lvb_valid()
1104 static void update_rgrp_lvb_unlinked(struct gfs2_rgrpd *rgd, u32 change) in update_rgrp_lvb_unlinked() argument
1106 struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl; in update_rgrp_lvb_unlinked()
1111 static u32 count_unlinked(struct gfs2_rgrpd *rgd) in count_unlinked() argument
1114 const u32 length = rgd->rd_length; in count_unlinked()
1118 for (i = 0, bi = rgd->rd_bits; i < length; i++, bi++) { in count_unlinked()
1146 static int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd) in gfs2_rgrp_bh_get() argument
1148 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_bh_get()
1149 struct gfs2_glock *gl = rgd->rd_gl; in gfs2_rgrp_bh_get()
1150 unsigned int length = rgd->rd_length; in gfs2_rgrp_bh_get()
1155 if (rgd->rd_bits[0].bi_bh != NULL) in gfs2_rgrp_bh_get()
1159 bi = rgd->rd_bits + x; in gfs2_rgrp_bh_get()
1160 error = gfs2_meta_read(gl, rgd->rd_addr + x, 0, &bi->bi_bh); in gfs2_rgrp_bh_get()
1166 bi = rgd->rd_bits + y; in gfs2_rgrp_bh_get()
1177 if (!(rgd->rd_flags & GFS2_RDF_UPTODATE)) { in gfs2_rgrp_bh_get()
1179 clear_bit(GBF_FULL, &rgd->rd_bits[x].bi_flags); in gfs2_rgrp_bh_get()
1180 gfs2_rgrp_in(rgd, (rgd->rd_bits[0].bi_bh)->b_data); in gfs2_rgrp_bh_get()
1181 rgd->rd_flags |= (GFS2_RDF_UPTODATE | GFS2_RDF_CHECK); in gfs2_rgrp_bh_get()
1182 rgd->rd_free_clone = rgd->rd_free; in gfs2_rgrp_bh_get()
1184 rgd->rd_extfail_pt = rgd->rd_free; in gfs2_rgrp_bh_get()
1186 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) { in gfs2_rgrp_bh_get()
1187 rgd->rd_rgl->rl_unlinked = cpu_to_be32(count_unlinked(rgd)); in gfs2_rgrp_bh_get()
1188 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, in gfs2_rgrp_bh_get()
1189 rgd->rd_bits[0].bi_bh->b_data); in gfs2_rgrp_bh_get()
1192 if (!gfs2_rgrp_lvb_valid(rgd)){ in gfs2_rgrp_bh_get()
1193 gfs2_consist_rgrpd(rgd); in gfs2_rgrp_bh_get()
1197 if (rgd->rd_rgl->rl_unlinked == 0) in gfs2_rgrp_bh_get()
1198 rgd->rd_flags &= ~GFS2_RDF_CHECK; in gfs2_rgrp_bh_get()
1204 bi = rgd->rd_bits + x; in gfs2_rgrp_bh_get()
1213 static int update_rgrp_lvb(struct gfs2_rgrpd *rgd) in update_rgrp_lvb() argument
1217 if (rgd->rd_flags & GFS2_RDF_UPTODATE) in update_rgrp_lvb()
1220 if (cpu_to_be32(GFS2_MAGIC) != rgd->rd_rgl->rl_magic) in update_rgrp_lvb()
1221 return gfs2_rgrp_bh_get(rgd); in update_rgrp_lvb()
1223 rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags); in update_rgrp_lvb()
1225 rgd->rd_flags &= GFS2_RDF_MASK; in update_rgrp_lvb()
1226 rgd->rd_flags |= (rl_flags | GFS2_RDF_UPTODATE | GFS2_RDF_CHECK); in update_rgrp_lvb()
1227 if (rgd->rd_rgl->rl_unlinked == 0) in update_rgrp_lvb()
1228 rgd->rd_flags &= ~GFS2_RDF_CHECK; in update_rgrp_lvb()
1229 rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free); in update_rgrp_lvb()
1230 rgd->rd_free_clone = rgd->rd_free; in update_rgrp_lvb()
1231 rgd->rd_dinodes = be32_to_cpu(rgd->rd_rgl->rl_dinodes); in update_rgrp_lvb()
1232 rgd->rd_igeneration = be64_to_cpu(rgd->rd_rgl->rl_igeneration); in update_rgrp_lvb()
1238 struct gfs2_rgrpd *rgd = gh->gh_gl->gl_object; in gfs2_rgrp_go_lock() local
1239 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_go_lock()
1243 return gfs2_rgrp_bh_get(rgd); in gfs2_rgrp_go_lock()
1254 struct gfs2_rgrpd *rgd = gh->gh_gl->gl_object; in gfs2_rgrp_go_unlock() local
1255 int x, length = rgd->rd_length; in gfs2_rgrp_go_unlock()
1258 struct gfs2_bitmap *bi = rgd->rd_bits + x; in gfs2_rgrp_go_unlock()
1348 struct gfs2_rgrpd *rgd; in gfs2_fitrim() local
1380 rgd = gfs2_blk2rgrpd(sdp, start, 0); in gfs2_fitrim()
1389 ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh); in gfs2_fitrim()
1393 if (!(rgd->rd_flags & GFS2_RGF_TRIMMED)) { in gfs2_fitrim()
1395 for (x = 0; x < rgd->rd_length; x++) { in gfs2_fitrim()
1396 struct gfs2_bitmap *bi = rgd->rd_bits + x; in gfs2_fitrim()
1398 rgd->rd_data0, NULL, bi, minlen, in gfs2_fitrim()
1410 bh = rgd->rd_bits[0].bi_bh; in gfs2_fitrim()
1411 rgd->rd_flags |= GFS2_RGF_TRIMMED; in gfs2_fitrim()
1412 gfs2_trans_add_meta(rgd->rd_gl, bh); in gfs2_fitrim()
1413 gfs2_rgrp_out(rgd, bh->b_data); in gfs2_fitrim()
1414 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, bh->b_data); in gfs2_fitrim()
1420 if (rgd == rgd_end) in gfs2_fitrim()
1423 rgd = gfs2_rgrpd_get_next(rgd); in gfs2_fitrim()
1444 struct gfs2_rgrpd *rgd = rs->rs_rbm.rgd; in rs_insert() local
1449 spin_lock(&rgd->rd_rsspin); in rs_insert()
1450 newn = &rgd->rd_rstree.rb_node; in rs_insert()
1462 spin_unlock(&rgd->rd_rsspin); in rs_insert()
1469 rb_insert_color(&rs->rs_node, &rgd->rd_rstree); in rs_insert()
1472 rgd->rd_reserved += rs->rs_free; /* blocks reserved */ in rs_insert()
1473 spin_unlock(&rgd->rd_rsspin); in rs_insert()
1485 static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, in rg_mblk_search() argument
1488 struct gfs2_rbm rbm = { .rgd = rgd, }; in rg_mblk_search()
1492 u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved; in rg_mblk_search()
1502 if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen)) in rg_mblk_search()
1506 if (rgrp_contains_block(rgd, ip->i_goal)) in rg_mblk_search()
1509 goal = rgd->rd_last_alloc + rgd->rd_data0; in rg_mblk_search()
1521 if (goal == rgd->rd_last_alloc + rgd->rd_data0) in rg_mblk_search()
1522 rgd->rd_last_alloc = 0; in rg_mblk_search()
1539 static u64 gfs2_next_unreserved_block(struct gfs2_rgrpd *rgd, u64 block, in gfs2_next_unreserved_block() argument
1547 spin_lock(&rgd->rd_rsspin); in gfs2_next_unreserved_block()
1548 n = rgd->rd_rstree.rb_node; in gfs2_next_unreserved_block()
1570 spin_unlock(&rgd->rd_rsspin); in gfs2_next_unreserved_block()
1614 nblock = gfs2_next_unreserved_block(rbm->rgd, block, extlen, ip); in gfs2_reservation_check_and_update()
1664 int iters = rbm->rgd->rd_length; in gfs2_rbm_find()
1667 struct gfs2_extent maxext = { .rbm.rgd = rbm->rgd, }; in gfs2_rbm_find()
1722 if (rbm->bii == rbm->rgd->rd_length) in gfs2_rbm_find()
1740 (*minext < rbm->rgd->rd_extfail_pt)) in gfs2_rbm_find()
1741 rbm->rgd->rd_extfail_pt = *minext; in gfs2_rbm_find()
1764 static void try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked, u64 skip) in try_rgrp_unlink() argument
1767 struct gfs2_sbd *sdp = rgd->rd_sbd; in try_rgrp_unlink()
1772 struct gfs2_rbm rbm = { .rgd = rgd, .bii = 0, .offset = 0 }; in try_rgrp_unlink()
1816 rgd->rd_flags &= ~GFS2_RDF_CHECK; in try_rgrp_unlink()
1847 static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops) in gfs2_rgrp_congested() argument
1849 const struct gfs2_glock *gl = rgd->rd_gl; in gfs2_rgrp_congested()
1897 rs->rs_rbm.rgd->rd_gl->gl_dstamp)); in gfs2_rgrp_used_recently()
1913 struct gfs2_rgrpd *rgd = *pos; in gfs2_select_rgrp() local
1914 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_select_rgrp()
1916 rgd = gfs2_rgrpd_get_next(rgd); in gfs2_select_rgrp()
1917 if (rgd == NULL) in gfs2_select_rgrp()
1918 rgd = gfs2_rgrpd_get_first(sdp); in gfs2_select_rgrp()
1919 *pos = rgd; in gfs2_select_rgrp()
1920 if (rgd != begin) /* If we didn't wrap */ in gfs2_select_rgrp()
1931 static inline int fast_to_acquire(struct gfs2_rgrpd *rgd) in fast_to_acquire() argument
1933 struct gfs2_glock *gl = rgd->rd_gl; in fast_to_acquire()
1939 if (rgd->rd_flags & GFS2_RDF_PREFERRED) in fast_to_acquire()
1975 begin = rs->rs_rbm.rgd; in gfs2_inplace_reserve()
1977 rs->rs_rbm.rgd = begin = ip->i_rgd; in gfs2_inplace_reserve()
1980 rs->rs_rbm.rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1); in gfs2_inplace_reserve()
1984 if (rs->rs_rbm.rgd == NULL) in gfs2_inplace_reserve()
1990 if (!gfs2_glock_is_locked_by_me(rs->rs_rbm.rgd->rd_gl)) { in gfs2_inplace_reserve()
1996 !fast_to_acquire(rs->rs_rbm.rgd)) in gfs2_inplace_reserve()
2000 gfs2_rgrp_congested(rs->rs_rbm.rgd, loops)) in gfs2_inplace_reserve()
2003 error = gfs2_glock_nq_init(rs->rs_rbm.rgd->rd_gl, in gfs2_inplace_reserve()
2009 gfs2_rgrp_congested(rs->rs_rbm.rgd, loops)) in gfs2_inplace_reserve()
2012 error = update_rgrp_lvb(rs->rs_rbm.rgd); in gfs2_inplace_reserve()
2021 if ((rs->rs_rbm.rgd->rd_flags & (GFS2_RGF_NOALLOC | in gfs2_inplace_reserve()
2023 (loops == 0 && ap->target > rs->rs_rbm.rgd->rd_extfail_pt)) in gfs2_inplace_reserve()
2027 gfs2_rgrp_bh_get(rs->rs_rbm.rgd); in gfs2_inplace_reserve()
2031 rg_mblk_search(rs->rs_rbm.rgd, ip, ap); in gfs2_inplace_reserve()
2038 if (rs->rs_rbm.rgd->rd_free_clone >= ap->target || in gfs2_inplace_reserve()
2040 rs->rs_rbm.rgd->rd_free_clone >= ap->min_target)) { in gfs2_inplace_reserve()
2041 ip->i_rgd = rs->rs_rbm.rgd; in gfs2_inplace_reserve()
2047 if (rs->rs_rbm.rgd->rd_flags & GFS2_RDF_CHECK) in gfs2_inplace_reserve()
2048 try_rgrp_unlink(rs->rs_rbm.rgd, &last_unlinked, in gfs2_inplace_reserve()
2060 if (gfs2_select_rgrp(&rs->rs_rbm.rgd, begin)) in gfs2_inplace_reserve()
2107 static unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block) in gfs2_get_block_type() argument
2109 struct gfs2_rbm rbm = { .rgd = rgd, }; in gfs2_get_block_type()
2131 struct gfs2_rbm pos = { .rgd = rbm->rgd, }; in gfs2_alloc_extent()
2138 gfs2_trans_add_meta(rbm->rgd->rd_gl, rbm_bi(rbm)->bi_bh); in gfs2_alloc_extent()
2145 gfs2_trans_add_meta(pos.rgd->rd_gl, rbm_bi(&pos)->bi_bh); in gfs2_alloc_extent()
2168 rbm.rgd = gfs2_blk2rgrpd(sdp, bstart, 1); in rgblk_free()
2169 if (!rbm.rgd) { in rgblk_free()
2186 gfs2_trans_add_meta(rbm.rgd->rd_gl, bi->bi_bh); in rgblk_free()
2193 return rbm.rgd; in rgblk_free()
2205 struct gfs2_rgrpd *rgd = gl->gl_object; in gfs2_rgrp_dump() local
2209 if (rgd == NULL) in gfs2_rgrp_dump()
2212 (unsigned long long)rgd->rd_addr, rgd->rd_flags, in gfs2_rgrp_dump()
2213 rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes, in gfs2_rgrp_dump()
2214 rgd->rd_reserved, rgd->rd_extfail_pt); in gfs2_rgrp_dump()
2215 spin_lock(&rgd->rd_rsspin); in gfs2_rgrp_dump()
2216 for (n = rb_first(&rgd->rd_rstree); n; n = rb_next(&trs->rs_node)) { in gfs2_rgrp_dump()
2220 spin_unlock(&rgd->rd_rsspin); in gfs2_rgrp_dump()
2223 static void gfs2_rgrp_error(struct gfs2_rgrpd *rgd) in gfs2_rgrp_error() argument
2225 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_rgrp_error()
2227 (unsigned long long)rgd->rd_addr); in gfs2_rgrp_error()
2229 gfs2_rgrp_dump(NULL, rgd->rd_gl); in gfs2_rgrp_error()
2230 rgd->rd_flags |= GFS2_RDF_ERROR; in gfs2_rgrp_error()
2248 struct gfs2_rgrpd *rgd = rbm->rgd; in gfs2_adjust_reservation() local
2253 spin_lock(&rgd->rd_rsspin); in gfs2_adjust_reservation()
2260 rgd->rd_reserved -= rlen; in gfs2_adjust_reservation()
2271 spin_unlock(&rgd->rd_rsspin); in gfs2_adjust_reservation()
2295 if (!dinode && rgrp_contains_block(rbm->rgd, ip->i_goal)) in gfs2_set_alloc_start()
2298 goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0; in gfs2_set_alloc_start()
2319 struct gfs2_rbm rbm = { .rgd = ip->i_rgd, }; in gfs2_alloc_blocks()
2337 test_bit(GBF_FULL, &rbm.rgd->rd_bits->bi_flags), in gfs2_alloc_blocks()
2338 rbm.rgd->rd_extfail_pt); in gfs2_alloc_blocks()
2344 rbm.rgd->rd_last_alloc = block - rbm.rgd->rd_data0; in gfs2_alloc_blocks()
2363 if (rbm.rgd->rd_free < *nblocks) { in gfs2_alloc_blocks()
2368 rbm.rgd->rd_free -= *nblocks; in gfs2_alloc_blocks()
2370 rbm.rgd->rd_dinodes++; in gfs2_alloc_blocks()
2371 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2373 *generation = rbm.rgd->rd_igeneration++; in gfs2_alloc_blocks()
2376 gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh); in gfs2_alloc_blocks()
2377 gfs2_rgrp_out(rbm.rgd, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2378 gfs2_rgrp_ondisk2lvb(rbm.rgd->rd_rgl, rbm.rgd->rd_bits[0].bi_bh->b_data); in gfs2_alloc_blocks()
2386 rbm.rgd->rd_free_clone -= *nblocks; in gfs2_alloc_blocks()
2387 trace_gfs2_block_alloc(ip, rbm.rgd, block, *nblocks, in gfs2_alloc_blocks()
2393 gfs2_rgrp_error(rbm.rgd); in gfs2_alloc_blocks()
2409 struct gfs2_rgrpd *rgd; in __gfs2_free_blocks() local
2411 rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE); in __gfs2_free_blocks()
2412 if (!rgd) in __gfs2_free_blocks()
2414 trace_gfs2_block_alloc(ip, rgd, bstart, blen, GFS2_BLKST_FREE); in __gfs2_free_blocks()
2415 rgd->rd_free += blen; in __gfs2_free_blocks()
2416 rgd->rd_flags &= ~GFS2_RGF_TRIMMED; in __gfs2_free_blocks()
2417 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in __gfs2_free_blocks()
2418 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in __gfs2_free_blocks()
2419 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in __gfs2_free_blocks()
2447 struct gfs2_rgrpd *rgd; in gfs2_unlink_di() local
2450 rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_UNLINKED); in gfs2_unlink_di()
2451 if (!rgd) in gfs2_unlink_di()
2453 trace_gfs2_block_alloc(ip, rgd, blkno, 1, GFS2_BLKST_UNLINKED); in gfs2_unlink_di()
2454 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in gfs2_unlink_di()
2455 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in gfs2_unlink_di()
2456 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in gfs2_unlink_di()
2457 update_rgrp_lvb_unlinked(rgd, 1); in gfs2_unlink_di()
2460 static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno) in gfs2_free_uninit_di() argument
2462 struct gfs2_sbd *sdp = rgd->rd_sbd; in gfs2_free_uninit_di()
2468 gfs2_assert_withdraw(sdp, rgd == tmp_rgd); in gfs2_free_uninit_di()
2470 if (!rgd->rd_dinodes) in gfs2_free_uninit_di()
2471 gfs2_consist_rgrpd(rgd); in gfs2_free_uninit_di()
2472 rgd->rd_dinodes--; in gfs2_free_uninit_di()
2473 rgd->rd_free++; in gfs2_free_uninit_di()
2475 gfs2_trans_add_meta(rgd->rd_gl, rgd->rd_bits[0].bi_bh); in gfs2_free_uninit_di()
2476 gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); in gfs2_free_uninit_di()
2477 gfs2_rgrp_ondisk2lvb(rgd->rd_rgl, rgd->rd_bits[0].bi_bh->b_data); in gfs2_free_uninit_di()
2478 update_rgrp_lvb_unlinked(rgd, -1); in gfs2_free_uninit_di()
2484 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip) in gfs2_free_di() argument
2486 gfs2_free_uninit_di(rgd, ip->i_no_addr); in gfs2_free_di()
2487 trace_gfs2_block_alloc(ip, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE); in gfs2_free_di()
2505 struct gfs2_rgrpd *rgd; in gfs2_check_blk_type() local
2509 rgd = gfs2_blk2rgrpd(sdp, no_addr, 1); in gfs2_check_blk_type()
2510 if (!rgd) in gfs2_check_blk_type()
2513 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_SHARED, 0, &rgd_gh); in gfs2_check_blk_type()
2517 if (gfs2_get_block_type(rgd, no_addr) != type) in gfs2_check_blk_type()
2541 struct gfs2_rgrpd *rgd; in gfs2_rlist_add() local
2550 rgd = ip->i_rgd; in gfs2_rlist_add()
2552 rgd = gfs2_blk2rgrpd(sdp, block, 1); in gfs2_rlist_add()
2553 if (!rgd) { in gfs2_rlist_add()
2557 ip->i_rgd = rgd; in gfs2_rlist_add()
2560 if (rlist->rl_rgd[x] == rgd) in gfs2_rlist_add()
2579 rlist->rl_rgd[rlist->rl_rgrps++] = rgd; in gfs2_rlist_add()