Lines Matching refs:pag

46 	struct xfs_perag	*pag;
49 pag = radix_tree_lookup(&mp->m_perag_tree, agno);
50 if (pag) {
51 trace_xfs_perag_get(pag, _RET_IP_);
52 ASSERT(atomic_read(&pag->pag_ref) >= 0);
53 atomic_inc(&pag->pag_ref);
56 return pag;
68 struct xfs_perag *pag;
73 (void **)&pag, first, 1, tag);
78 trace_xfs_perag_get_tag(pag, _RET_IP_);
79 atomic_inc(&pag->pag_ref);
81 return pag;
87 struct xfs_perag *pag)
89 ASSERT(atomic_read(&pag->pag_ref) > 0 ||
90 atomic_read(&pag->pag_active_ref) > 0);
92 trace_xfs_perag_hold(pag, _RET_IP_);
93 atomic_inc(&pag->pag_ref);
94 return pag;
99 struct xfs_perag *pag)
101 trace_xfs_perag_put(pag, _RET_IP_);
102 ASSERT(atomic_read(&pag->pag_ref) > 0);
103 atomic_dec(&pag->pag_ref);
117 struct xfs_perag *pag;
120 pag = radix_tree_lookup(&mp->m_perag_tree, agno);
121 if (pag) {
122 trace_xfs_perag_grab(pag, _RET_IP_);
123 if (!atomic_inc_not_zero(&pag->pag_active_ref))
124 pag = NULL;
127 return pag;
139 struct xfs_perag *pag;
144 (void **)&pag, first, 1, tag);
149 trace_xfs_perag_grab_tag(pag, _RET_IP_);
150 if (!atomic_inc_not_zero(&pag->pag_active_ref))
151 pag = NULL;
153 return pag;
158 struct xfs_perag *pag)
160 trace_xfs_perag_rele(pag, _RET_IP_);
161 if (atomic_dec_and_test(&pag->pag_active_ref))
162 wake_up(&pag->pag_active_wq);
179 struct xfs_perag *pag;
194 pag = xfs_perag_get(mp, index);
195 error = xfs_alloc_read_agf(pag, NULL, 0, NULL);
197 error = xfs_ialloc_read_agi(pag, NULL, NULL);
199 xfs_perag_put(pag);
203 ifree += pag->pagi_freecount;
204 ialloc += pag->pagi_count;
205 bfree += pag->pagf_freeblks;
206 bfreelst += pag->pagf_flcount;
207 btree += pag->pagf_btreeblks;
208 xfs_perag_put(pag);
241 struct xfs_perag *pag = container_of(head, struct xfs_perag, rcu_head);
243 ASSERT(!delayed_work_pending(&pag->pag_blockgc_work));
244 kmem_free(pag);
254 struct xfs_perag *pag;
259 pag = radix_tree_delete(&mp->m_perag_tree, agno);
261 ASSERT(pag);
262 XFS_IS_CORRUPT(pag->pag_mount, atomic_read(&pag->pag_ref) != 0);
263 xfs_defer_drain_free(&pag->pag_intents_drain);
265 cancel_delayed_work_sync(&pag->pag_blockgc_work);
266 xfs_buf_hash_destroy(pag);
269 xfs_perag_rele(pag);
270 XFS_IS_CORRUPT(pag->pag_mount,
271 atomic_read(&pag->pag_active_ref) != 0);
272 call_rcu(&pag->rcu_head, __xfs_free_perag);
342 struct xfs_perag *pag;
353 pag = xfs_perag_get(mp, index);
354 if (pag) {
355 xfs_perag_put(pag);
359 pag = kmem_zalloc(sizeof(*pag), KM_MAYFAIL);
360 if (!pag) {
364 pag->pag_agno = index;
365 pag->pag_mount = mp;
372 if (radix_tree_insert(&mp->m_perag_tree, index, pag)) {
384 spin_lock_init(&pag->pag_ici_lock);
385 spin_lock_init(&pag->pagb_lock);
386 spin_lock_init(&pag->pag_state_lock);
387 INIT_DELAYED_WORK(&pag->pag_blockgc_work, xfs_blockgc_worker);
388 INIT_RADIX_TREE(&pag->pag_ici_root, GFP_ATOMIC);
389 xfs_defer_drain_init(&pag->pag_intents_drain);
390 init_waitqueue_head(&pag->pagb_wait);
391 init_waitqueue_head(&pag->pag_active_wq);
392 pag->pagb_count = 0;
393 pag->pagb_tree = RB_ROOT;
396 error = xfs_buf_hash_init(pag);
401 atomic_set(&pag->pag_active_ref, 1);
403 /* first new pag is fully initialized */
410 pag->block_count = __xfs_ag_block_count(mp, index, agcount,
412 pag->min_block = XFS_AGFL_BLOCK(mp);
413 __xfs_agino_range(mp, pag->block_count, &pag->agino_min,
414 &pag->agino_max);
426 xfs_defer_drain_free(&pag->pag_intents_drain);
429 kmem_free(pag);
433 pag = radix_tree_delete(&mp->m_perag_tree, index);
434 if (!pag)
436 xfs_buf_hash_destroy(pag);
437 xfs_defer_drain_free(&pag->pag_intents_drain);
438 kmem_free(pag);
898 struct xfs_perag *pag,
902 struct xfs_mount *mp = pag->pag_mount;
906 .pag = pag,
919 ASSERT(pag->pag_agno == mp->m_sb.sb_agcount - 1);
920 error = xfs_ialloc_read_agi(pag, *tpp, &agibp);
926 error = xfs_alloc_read_agf(pag, *tpp, 0, &agfbp);
942 error = xfs_ialloc_check_shrink(pag, *tpp, agibp, aglen - delta);
950 error = xfs_ag_resv_free(pag);
956 XFS_AGB_TO_FSB(mp, pag->pag_agno, aglen - delta));
980 err2 = xfs_ag_resv_init(pag, *tpp);
1006 pag->block_count -= delta;
1007 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min,
1008 &pag->agino_max);
1015 err2 = xfs_ag_resv_init(pag, *tpp);
1029 struct xfs_perag *pag,
1038 ASSERT(pag->pag_agno == pag->pag_mount->m_sb.sb_agcount - 1);
1040 error = xfs_ialloc_read_agi(pag, tp, &bp);
1051 error = xfs_alloc_read_agf(pag, tp, 0, &bp);
1066 error = xfs_rmap_free(tp, bp, pag, be32_to_cpu(agf->agf_length) - len,
1071 error = xfs_free_extent(tp, pag, be32_to_cpu(agf->agf_length) - len,
1077 pag->block_count = be32_to_cpu(agf->agf_length);
1078 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min,
1079 &pag->agino_max);
1086 struct xfs_perag *pag,
1097 error = xfs_ialloc_read_agi(pag, NULL, &agi_bp);
1100 error = xfs_alloc_read_agf(pag, NULL, 0, &agf_bp);
1106 ageo->ag_number = pag->pag_agno;
1114 freeblks = pag->pagf_freeblks +
1115 pag->pagf_flcount +
1116 pag->pagf_btreeblks -
1117 xfs_ag_resv_needed(pag, XFS_AG_RESV_NONE);
1119 xfs_ag_geom_health(pag, ageo);