• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/fs/gfs2/

Lines Matching defs:rgd

62 static void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
73 gfs2_assert(rgd->rd_sbd, byte < end);
81 gfs2_consist_rgrpd(rgd);
92 static unsigned char gfs2_testbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
102 gfs2_assert(rgd->rd_sbd, byte < end);
125 static u32 gfs2_bitfit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
172 static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, unsigned char *buffer,
199 * @rgd: the rgrp
203 void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd)
205 struct gfs2_sbd *sdp = rgd->rd_sbd;
207 u32 length = rgd->rd_ri.ri_length;
215 bi = rgd->rd_bits + buf;
217 count[x] += gfs2_bitcount(rgd,
223 if (count[0] != rgd->rd_rg.rg_free) {
224 if (gfs2_consist_rgrpd(rgd))
226 count[0], rgd->rd_rg.rg_free);
230 tmp = rgd->rd_ri.ri_data -
231 rgd->rd_rg.rg_free -
232 rgd->rd_rg.rg_dinodes;
234 if (gfs2_consist_rgrpd(rgd))
240 if (count[3] != rgd->rd_rg.rg_dinodes) {
241 if (gfs2_consist_rgrpd(rgd))
243 count[3], rgd->rd_rg.rg_dinodes);
248 if (gfs2_consist_rgrpd(rgd))
273 struct gfs2_rgrpd *rgd;
277 list_for_each_entry(rgd, &sdp->sd_rindex_mru_list, rd_list_mru) {
278 if (rgrp_contains_block(&rgd->rd_ri, blk)) {
279 list_move(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
281 return rgd;
305 * @rgd: A RG
310 struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd)
312 if (rgd->rd_list.next == &rgd->rd_sbd->sd_rindex_list)
314 return list_entry(rgd->rd_list.next, struct gfs2_rgrpd, rd_list);
320 struct gfs2_rgrpd *rgd;
327 rgd = list_entry(head->next, struct gfs2_rgrpd, rd_recent);
328 list_del(&rgd->rd_recent);
334 rgd = list_entry(head->next, struct gfs2_rgrpd, rd_list);
335 gl = rgd->rd_gl;
337 list_del(&rgd->rd_list);
338 list_del(&rgd->rd_list_mru);
345 kfree(rgd->rd_bits);
346 kfree(rgd);
359 * @rgd: The resource group descriptor
366 static int compute_bitstructs(struct gfs2_rgrpd *rgd)
368 struct gfs2_sbd *sdp = rgd->rd_sbd;
370 u32 length = rgd->rd_ri.ri_length; /* # blocks in hdr & bitmap */
377 rgd->rd_bits = kcalloc(length, sizeof(struct gfs2_bitmap), GFP_NOFS);
378 if (!rgd->rd_bits)
381 bytes_left = rgd->rd_ri.ri_bitbytes;
384 bi = rgd->rd_bits + x;
402 bi->bi_start = rgd->rd_ri.ri_bitbytes - bytes_left;
409 bi->bi_start = rgd->rd_ri.ri_bitbytes - bytes_left;
417 gfs2_consist_rgrpd(rgd);
420 bi = rgd->rd_bits + (length - 1);
421 if ((bi->bi_start + bi->bi_len) * GFS2_NBBY != rgd->rd_ri.ri_data) {
422 if (gfs2_consist_rgrpd(rgd)) {
423 gfs2_rindex_print(&rgd->rd_ri);
444 struct gfs2_rgrpd *rgd;
470 rgd = kzalloc(sizeof(struct gfs2_rgrpd), GFP_NOFS);
472 if (!rgd)
475 mutex_init(&rgd->rd_mutex);
476 lops_init_le(&rgd->rd_le, &gfs2_rg_lops);
477 rgd->rd_sbd = sdp;
479 list_add_tail(&rgd->rd_list, &sdp->sd_rindex_list);
480 list_add_tail(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
482 gfs2_rindex_in(&rgd->rd_ri, buf);
483 error = compute_bitstructs(rgd);
487 error = gfs2_glock_get(sdp, rgd->rd_ri.ri_addr,
488 &gfs2_rgrp_glops, CREATE, &rgd->rd_gl);
492 rgd->rd_gl->gl_object = rgd;
493 rgd->rd_rg_vn = rgd->rd_gl->gl_vn - 1;
548 * @rgd: the struct gfs2_rgrpd describing the RG to read in
556 int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd)
558 struct gfs2_sbd *sdp = rgd->rd_sbd;
559 struct gfs2_glock *gl = rgd->rd_gl;
560 unsigned int length = rgd->rd_ri.ri_length;
565 mutex_lock(&rgd->rd_mutex);
568 if (rgd->rd_bh_count) {
569 rgd->rd_bh_count++;
571 mutex_unlock(&rgd->rd_mutex);
577 bi = rgd->rd_bits + x;
578 error = gfs2_meta_read(gl, rgd->rd_ri.ri_addr + x, 0, &bi->bi_bh);
584 bi = rgd->rd_bits + y;
595 if (rgd->rd_rg_vn != gl->gl_vn) {
596 gfs2_rgrp_in(&rgd->rd_rg, (rgd->rd_bits[0].bi_bh)->b_data);
597 rgd->rd_rg_vn = gl->gl_vn;
601 rgd->rd_free_clone = rgd->rd_rg.rg_free;
602 rgd->rd_bh_count++;
605 mutex_unlock(&rgd->rd_mutex);
611 bi = rgd->rd_bits + x;
616 mutex_unlock(&rgd->rd_mutex);
621 void gfs2_rgrp_bh_hold(struct gfs2_rgrpd *rgd)
623 struct gfs2_sbd *sdp = rgd->rd_sbd;
626 gfs2_assert_warn(rgd->rd_sbd, rgd->rd_bh_count);
627 rgd->rd_bh_count++;
633 * @rgd: the struct gfs2_rgrpd describing the RG to read in
637 void gfs2_rgrp_bh_put(struct gfs2_rgrpd *rgd)
639 struct gfs2_sbd *sdp = rgd->rd_sbd;
640 int x, length = rgd->rd_ri.ri_length;
643 gfs2_assert_warn(rgd->rd_sbd, rgd->rd_bh_count);
644 if (--rgd->rd_bh_count) {
650 struct gfs2_bitmap *bi = rgd->rd_bits + x;
660 void gfs2_rgrp_repolish_clones(struct gfs2_rgrpd *rgd)
662 struct gfs2_sbd *sdp = rgd->rd_sbd;
663 unsigned int length = rgd->rd_ri.ri_length;
667 struct gfs2_bitmap *bi = rgd->rd_bits + x;
675 rgd->rd_free_clone = rgd->rd_rg.rg_free;
696 * @rgd: the RG data
705 static int try_rgrp_fit(struct gfs2_rgrpd *rgd, struct gfs2_alloc *al)
707 struct gfs2_sbd *sdp = rgd->rd_sbd;
710 if (rgd->rd_rg.rg_flags & GFS2_RGF_NOALLOC)
714 if (rgd->rd_free_clone >= al->al_requested) {
715 al->al_rgd = rgd;
734 struct gfs2_rgrpd *rgd = NULL;
744 list_for_each_entry(rgd, &sdp->sd_rindex_recent_list, rd_recent) {
745 if (rgd->rd_ri.ri_addr == rglast)
750 rgd = list_entry(sdp->sd_rindex_recent_list.next, struct gfs2_rgrpd,
754 return rgd;
770 struct gfs2_rgrpd *rgd;
776 list_for_each_entry(rgd, head, rd_recent) {
777 if (rgd == cur_rgd) {
779 rgd = list_entry(cur_rgd->rd_recent.next,
782 rgd = NULL;
791 rgd = NULL;
793 rgd = list_entry(head->next, struct gfs2_rgrpd, rd_recent);
797 return rgd;
809 struct gfs2_rgrpd *rgd;
815 list_for_each_entry(rgd, &sdp->sd_rindex_recent_list, rd_recent) {
816 if (rgd == new_rgd)
837 struct gfs2_rgrpd *rgd;
843 rgd = sdp->sd_rindex_forward;
844 if (!rgd) {
848 for (x = 0, rgd = gfs2_rgrpd_get_first(sdp); x < rg;
849 x++, rgd = gfs2_rgrpd_get_next(rgd))
852 sdp->sd_rindex_forward = rgd;
857 return rgd;
863 * @rgd: The new forward rgrp
867 static void forward_rgrp_set(struct gfs2_sbd *sdp, struct gfs2_rgrpd *rgd)
870 sdp->sd_rindex_forward = rgd;
887 struct gfs2_rgrpd *rgd, *begin = NULL;
896 rgd = recent_rgrp_first(sdp, ip->i_last_rg_alloc);
898 while (rgd) {
899 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
903 if (try_rgrp_fit(rgd, al))
906 rgd = recent_rgrp_next(rgd, 1);
910 rgd = recent_rgrp_next(rgd, 0);
920 begin = rgd = forward_rgrp_get(sdp);
923 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, flags,
927 if (try_rgrp_fit(rgd, al))
940 rgd = gfs2_rgrpd_get_next(rgd);
941 if (!rgd)
942 rgd = gfs2_rgrpd_get_first(sdp);
944 if (rgd == begin) {
956 ip->i_last_rg_alloc = rgd->rd_ri.ri_addr;
959 recent_rgrp_add(rgd);
960 rgd = gfs2_rgrpd_get_next(rgd);
961 if (!rgd)
962 rgd = gfs2_rgrpd_get_first(sdp);
963 forward_rgrp_set(sdp, rgd);
1026 * @rgd: the resource group holding the block
1032 unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block)
1039 length = rgd->rd_ri.ri_length;
1040 rgrp_block = block - rgd->rd_ri.ri_data0;
1043 bi = rgd->rd_bits + buf;
1048 gfs2_assert(rgd->rd_sbd, buf < length);
1051 type = gfs2_testbit(rgd, bi->bi_bh->b_data + bi->bi_offset,
1060 * @rgd: the resource group descriptor
1078 static u32 rgblk_search(struct gfs2_rgrpd *rgd, u32 goal,
1082 u32 length = rgd->rd_ri.ri_length;
1088 bi = rgd->rd_bits + buf;
1093 gfs2_assert(rgd->rd_sbd, buf < length);
1105 blk = gfs2_bitfit(rgd, bi->bi_clone + bi->bi_offset,
1108 blk = gfs2_bitfit(rgd,
1116 bi = rgd->rd_bits + buf;
1120 if (gfs2_assert_withdraw(rgd->rd_sbd, x <= length))
1123 gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
1124 gfs2_setbit(rgd, bi->bi_bh->b_data + bi->bi_offset,
1127 gfs2_setbit(rgd, bi->bi_clone + bi->bi_offset,
1146 struct gfs2_rgrpd *rgd;
1151 rgd = gfs2_blk2rgrpd(sdp, bstart);
1152 if (!rgd) {
1158 length = rgd->rd_ri.ri_length;
1160 rgrp_blk = bstart - rgd->rd_ri.ri_data0;
1164 bi = rgd->rd_bits + buf;
1169 gfs2_assert(rgd->rd_sbd, buf < length);
1181 gfs2_trans_add_bh(rgd->rd_gl, bi->bi_bh, 1);
1182 gfs2_setbit(rgd, bi->bi_bh->b_data + bi->bi_offset,
1186 return rgd;
1200 struct gfs2_rgrpd *rgd = al->al_rgd;
1204 if (rgrp_contains_block(&rgd->rd_ri, ip->i_di.di_goal_data))
1205 goal = ip->i_di.di_goal_data - rgd->rd_ri.ri_data0;
1207 goal = rgd->rd_last_alloc_data;
1209 blk = rgblk_search(rgd, goal, GFS2_BLKST_FREE, GFS2_BLKST_USED);
1210 rgd->rd_last_alloc_data = blk;
1212 block = rgd->rd_ri.ri_data0 + blk;
1215 gfs2_assert_withdraw(sdp, rgd->rd_rg.rg_free);
1216 rgd->rd_rg.rg_free--;
1218 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1219 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1227 rgd->rd_free_clone--;
1244 struct gfs2_rgrpd *rgd = al->al_rgd;
1248 if (rgrp_contains_block(&rgd->rd_ri, ip->i_di.di_goal_meta))
1249 goal = ip->i_di.di_goal_meta - rgd->rd_ri.ri_data0;
1251 goal = rgd->rd_last_alloc_meta;
1253 blk = rgblk_search(rgd, goal, GFS2_BLKST_FREE, GFS2_BLKST_USED);
1254 rgd->rd_last_alloc_meta = blk;
1256 block = rgd->rd_ri.ri_data0 + blk;
1259 gfs2_assert_withdraw(sdp, rgd->rd_rg.rg_free);
1260 rgd->rd_rg.rg_free--;
1262 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1263 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1272 rgd->rd_free_clone--;
1289 struct gfs2_rgrpd *rgd = al->al_rgd;
1293 blk = rgblk_search(rgd, rgd->rd_last_alloc_meta,
1296 rgd->rd_last_alloc_meta = blk;
1298 block = rgd->rd_ri.ri_data0 + blk;
1300 gfs2_assert_withdraw(sdp, rgd->rd_rg.rg_free);
1301 rgd->rd_rg.rg_free--;
1302 rgd->rd_rg.rg_dinodes++;
1303 *generation = rgd->rd_rg.rg_igeneration++;
1304 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1305 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1313 rgd->rd_free_clone--;
1330 struct gfs2_rgrpd *rgd;
1332 rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE);
1333 if (!rgd)
1336 rgd->rd_rg.rg_free += blen;
1338 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1339 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1341 gfs2_trans_add_rg(rgd);
1358 struct gfs2_rgrpd *rgd;
1360 rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE);
1361 if (!rgd)
1364 rgd->rd_rg.rg_free += blen;
1366 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1367 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1369 gfs2_trans_add_rg(rgd);
1380 struct gfs2_rgrpd *rgd;
1383 rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_UNLINKED);
1384 if (!rgd)
1386 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1387 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1388 gfs2_trans_add_rg(rgd);
1391 static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno)
1393 struct gfs2_sbd *sdp = rgd->rd_sbd;
1399 gfs2_assert_withdraw(sdp, rgd == tmp_rgd);
1401 if (!rgd->rd_rg.rg_dinodes)
1402 gfs2_consist_rgrpd(rgd);
1403 rgd->rd_rg.rg_dinodes--;
1404 rgd->rd_rg.rg_free++;
1406 gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1);
1407 gfs2_rgrp_out(&rgd->rd_rg, rgd->rd_bits[0].bi_bh->b_data);
1410 gfs2_trans_add_rg(rgd);
1414 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip)
1416 gfs2_free_uninit_di(rgd, ip->i_num.no_addr);
1425 struct gfs2_rgrpd *rgd;
1433 rgd = gfs2_blk2rgrpd(sdp, block);
1434 if (!rgd) {
1441 if (rlist->rl_rgd[x] == rgd)
1460 rlist->rl_rgd[rlist->rl_rgrps++] = rgd;