Lines Matching refs:pag

46 	struct xfs_perag	*pag;  in xfs_perag_get()  local
49 pag = radix_tree_lookup(&mp->m_perag_tree, agno); in xfs_perag_get()
50 if (pag) { in xfs_perag_get()
51 trace_xfs_perag_get(pag, _RET_IP_); in xfs_perag_get()
52 ASSERT(atomic_read(&pag->pag_ref) >= 0); in xfs_perag_get()
53 atomic_inc(&pag->pag_ref); in xfs_perag_get()
56 return pag; in xfs_perag_get()
68 struct xfs_perag *pag; in xfs_perag_get_tag() local
73 (void **)&pag, first, 1, tag); in xfs_perag_get_tag()
78 trace_xfs_perag_get_tag(pag, _RET_IP_); in xfs_perag_get_tag()
79 atomic_inc(&pag->pag_ref); in xfs_perag_get_tag()
81 return pag; in xfs_perag_get_tag()
87 struct xfs_perag *pag) in xfs_perag_hold() argument
89 ASSERT(atomic_read(&pag->pag_ref) > 0 || in xfs_perag_hold()
90 atomic_read(&pag->pag_active_ref) > 0); in xfs_perag_hold()
92 trace_xfs_perag_hold(pag, _RET_IP_); in xfs_perag_hold()
93 atomic_inc(&pag->pag_ref); in xfs_perag_hold()
94 return pag; in xfs_perag_hold()
99 struct xfs_perag *pag) in xfs_perag_put() argument
101 trace_xfs_perag_put(pag, _RET_IP_); in xfs_perag_put()
102 ASSERT(atomic_read(&pag->pag_ref) > 0); in xfs_perag_put()
103 atomic_dec(&pag->pag_ref); in xfs_perag_put()
117 struct xfs_perag *pag; in xfs_perag_grab() local
120 pag = radix_tree_lookup(&mp->m_perag_tree, agno); in xfs_perag_grab()
121 if (pag) { in xfs_perag_grab()
122 trace_xfs_perag_grab(pag, _RET_IP_); in xfs_perag_grab()
123 if (!atomic_inc_not_zero(&pag->pag_active_ref)) in xfs_perag_grab()
124 pag = NULL; in xfs_perag_grab()
127 return pag; in xfs_perag_grab()
139 struct xfs_perag *pag; in xfs_perag_grab_tag() local
144 (void **)&pag, first, 1, tag); in xfs_perag_grab_tag()
149 trace_xfs_perag_grab_tag(pag, _RET_IP_); in xfs_perag_grab_tag()
150 if (!atomic_inc_not_zero(&pag->pag_active_ref)) in xfs_perag_grab_tag()
151 pag = NULL; in xfs_perag_grab_tag()
153 return pag; in xfs_perag_grab_tag()
158 struct xfs_perag *pag) in xfs_perag_rele() argument
160 trace_xfs_perag_rele(pag, _RET_IP_); in xfs_perag_rele()
161 if (atomic_dec_and_test(&pag->pag_active_ref)) in xfs_perag_rele()
162 wake_up(&pag->pag_active_wq); in xfs_perag_rele()
179 struct xfs_perag *pag; in xfs_initialize_perag_data() local
194 pag = xfs_perag_get(mp, index); in xfs_initialize_perag_data()
195 error = xfs_alloc_read_agf(pag, NULL, 0, NULL); in xfs_initialize_perag_data()
197 error = xfs_ialloc_read_agi(pag, NULL, NULL); in xfs_initialize_perag_data()
199 xfs_perag_put(pag); in xfs_initialize_perag_data()
203 ifree += pag->pagi_freecount; in xfs_initialize_perag_data()
204 ialloc += pag->pagi_count; in xfs_initialize_perag_data()
205 bfree += pag->pagf_freeblks; in xfs_initialize_perag_data()
206 bfreelst += pag->pagf_flcount; in xfs_initialize_perag_data()
207 btree += pag->pagf_btreeblks; in xfs_initialize_perag_data()
208 xfs_perag_put(pag); in xfs_initialize_perag_data()
241 struct xfs_perag *pag = container_of(head, struct xfs_perag, rcu_head); in __xfs_free_perag() local
243 ASSERT(!delayed_work_pending(&pag->pag_blockgc_work)); in __xfs_free_perag()
244 kmem_free(pag); in __xfs_free_perag()
254 struct xfs_perag *pag; in xfs_free_perag() local
259 pag = radix_tree_delete(&mp->m_perag_tree, agno); in xfs_free_perag()
261 ASSERT(pag); in xfs_free_perag()
262 XFS_IS_CORRUPT(pag->pag_mount, atomic_read(&pag->pag_ref) != 0); in xfs_free_perag()
263 xfs_defer_drain_free(&pag->pag_intents_drain); in xfs_free_perag()
265 cancel_delayed_work_sync(&pag->pag_blockgc_work); in xfs_free_perag()
266 xfs_buf_hash_destroy(pag); in xfs_free_perag()
269 xfs_perag_rele(pag); in xfs_free_perag()
270 XFS_IS_CORRUPT(pag->pag_mount, in xfs_free_perag()
271 atomic_read(&pag->pag_active_ref) != 0); in xfs_free_perag()
272 call_rcu(&pag->rcu_head, __xfs_free_perag); in xfs_free_perag()
345 struct xfs_perag *pag; in xfs_free_unused_perag_range() local
350 pag = radix_tree_delete(&mp->m_perag_tree, index); in xfs_free_unused_perag_range()
352 if (!pag) in xfs_free_unused_perag_range()
354 xfs_buf_hash_destroy(pag); in xfs_free_unused_perag_range()
355 xfs_defer_drain_free(&pag->pag_intents_drain); in xfs_free_unused_perag_range()
356 kmem_free(pag); in xfs_free_unused_perag_range()
367 struct xfs_perag *pag; in xfs_initialize_perag() local
378 pag = xfs_perag_get(mp, index); in xfs_initialize_perag()
379 if (pag) { in xfs_initialize_perag()
380 xfs_perag_put(pag); in xfs_initialize_perag()
384 pag = kmem_zalloc(sizeof(*pag), KM_MAYFAIL); in xfs_initialize_perag()
385 if (!pag) { in xfs_initialize_perag()
389 pag->pag_agno = index; in xfs_initialize_perag()
390 pag->pag_mount = mp; in xfs_initialize_perag()
397 if (radix_tree_insert(&mp->m_perag_tree, index, pag)) { in xfs_initialize_perag()
409 spin_lock_init(&pag->pag_ici_lock); in xfs_initialize_perag()
410 spin_lock_init(&pag->pagb_lock); in xfs_initialize_perag()
411 spin_lock_init(&pag->pag_state_lock); in xfs_initialize_perag()
412 INIT_DELAYED_WORK(&pag->pag_blockgc_work, xfs_blockgc_worker); in xfs_initialize_perag()
413 INIT_RADIX_TREE(&pag->pag_ici_root, GFP_ATOMIC); in xfs_initialize_perag()
414 xfs_defer_drain_init(&pag->pag_intents_drain); in xfs_initialize_perag()
415 init_waitqueue_head(&pag->pagb_wait); in xfs_initialize_perag()
416 init_waitqueue_head(&pag->pag_active_wq); in xfs_initialize_perag()
417 pag->pagb_count = 0; in xfs_initialize_perag()
418 pag->pagb_tree = RB_ROOT; in xfs_initialize_perag()
421 error = xfs_buf_hash_init(pag); in xfs_initialize_perag()
426 atomic_set(&pag->pag_active_ref, 1); in xfs_initialize_perag()
435 pag->block_count = __xfs_ag_block_count(mp, index, agcount, in xfs_initialize_perag()
437 pag->min_block = XFS_AGFL_BLOCK(mp); in xfs_initialize_perag()
438 __xfs_agino_range(mp, pag->block_count, &pag->agino_min, in xfs_initialize_perag()
439 &pag->agino_max); in xfs_initialize_perag()
451 xfs_defer_drain_free(&pag->pag_intents_drain); in xfs_initialize_perag()
456 kmem_free(pag); in xfs_initialize_perag()
918 struct xfs_perag *pag, in xfs_ag_shrink_space() argument
922 struct xfs_mount *mp = pag->pag_mount; in xfs_ag_shrink_space()
926 .pag = pag, in xfs_ag_shrink_space()
939 ASSERT(pag->pag_agno == mp->m_sb.sb_agcount - 1); in xfs_ag_shrink_space()
940 error = xfs_ialloc_read_agi(pag, *tpp, &agibp); in xfs_ag_shrink_space()
946 error = xfs_alloc_read_agf(pag, *tpp, 0, &agfbp); in xfs_ag_shrink_space()
962 error = xfs_ialloc_check_shrink(pag, *tpp, agibp, aglen - delta); in xfs_ag_shrink_space()
970 error = xfs_ag_resv_free(pag); in xfs_ag_shrink_space()
976 XFS_AGB_TO_FSB(mp, pag->pag_agno, aglen - delta)); in xfs_ag_shrink_space()
1009 err2 = xfs_ag_resv_init(pag, *tpp); in xfs_ag_shrink_space()
1035 pag->block_count -= delta; in xfs_ag_shrink_space()
1036 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min, in xfs_ag_shrink_space()
1037 &pag->agino_max); in xfs_ag_shrink_space()
1044 err2 = xfs_ag_resv_init(pag, *tpp); in xfs_ag_shrink_space()
1058 struct xfs_perag *pag, in xfs_ag_extend_space() argument
1067 ASSERT(pag->pag_agno == pag->pag_mount->m_sb.sb_agcount - 1); in xfs_ag_extend_space()
1069 error = xfs_ialloc_read_agi(pag, tp, &bp); in xfs_ag_extend_space()
1080 error = xfs_alloc_read_agf(pag, tp, 0, &bp); in xfs_ag_extend_space()
1095 error = xfs_rmap_free(tp, bp, pag, be32_to_cpu(agf->agf_length) - len, in xfs_ag_extend_space()
1100 error = xfs_free_extent(tp, pag, be32_to_cpu(agf->agf_length) - len, in xfs_ag_extend_space()
1106 pag->block_count = be32_to_cpu(agf->agf_length); in xfs_ag_extend_space()
1107 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min, in xfs_ag_extend_space()
1108 &pag->agino_max); in xfs_ag_extend_space()
1115 struct xfs_perag *pag, in xfs_ag_get_geometry() argument
1126 error = xfs_ialloc_read_agi(pag, NULL, &agi_bp); in xfs_ag_get_geometry()
1129 error = xfs_alloc_read_agf(pag, NULL, 0, &agf_bp); in xfs_ag_get_geometry()
1135 ageo->ag_number = pag->pag_agno; in xfs_ag_get_geometry()
1143 freeblks = pag->pagf_freeblks + in xfs_ag_get_geometry()
1144 pag->pagf_flcount + in xfs_ag_get_geometry()
1145 pag->pagf_btreeblks - in xfs_ag_get_geometry()
1146 xfs_ag_resv_needed(pag, XFS_AG_RESV_NONE); in xfs_ag_get_geometry()
1148 xfs_ag_geom_health(pag, ageo); in xfs_ag_get_geometry()