Lines Matching defs: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);
345 struct xfs_perag *pag;
350 pag = radix_tree_delete(&mp->m_perag_tree, index);
352 if (!pag)
354 xfs_buf_hash_destroy(pag);
355 xfs_defer_drain_free(&pag->pag_intents_drain);
356 kmem_free(pag);
365 struct xfs_perag *pag = xfs_perag_grab(mp, prev_agcount - 1);
367 if (!pag)
369 pag->block_count = __xfs_ag_block_count(mp, prev_agcount - 1,
371 __xfs_agino_range(mp, pag->block_count, &pag->agino_min,
372 &pag->agino_max);
373 xfs_perag_rele(pag);
385 struct xfs_perag *pag;
390 pag = kmem_zalloc(sizeof(*pag), 0);
391 if (!pag) {
395 pag->pag_agno = index;
396 pag->pag_mount = mp;
403 if (radix_tree_insert(&mp->m_perag_tree, index, pag)) {
415 spin_lock_init(&pag->pag_ici_lock);
416 spin_lock_init(&pag->pagb_lock);
417 spin_lock_init(&pag->pag_state_lock);
418 INIT_DELAYED_WORK(&pag->pag_blockgc_work, xfs_blockgc_worker);
419 INIT_RADIX_TREE(&pag->pag_ici_root, GFP_ATOMIC);
420 xfs_defer_drain_init(&pag->pag_intents_drain);
421 init_waitqueue_head(&pag->pagb_wait);
422 init_waitqueue_head(&pag->pag_active_wq);
423 pag->pagb_count = 0;
424 pag->pagb_tree = RB_ROOT;
427 error = xfs_buf_hash_init(pag);
432 atomic_set(&pag->pag_active_ref, 1);
437 pag->block_count = __xfs_ag_block_count(mp, index, new_agcount,
439 pag->min_block = XFS_AGFL_BLOCK(mp);
440 __xfs_agino_range(mp, pag->block_count, &pag->agino_min,
441 &pag->agino_max);
453 xfs_defer_drain_free(&pag->pag_intents_drain);
458 kmem_free(pag);
919 struct xfs_perag *pag,
923 struct xfs_mount *mp = pag->pag_mount;
927 .pag = pag,
940 ASSERT(pag->pag_agno == mp->m_sb.sb_agcount - 1);
941 error = xfs_ialloc_read_agi(pag, *tpp, &agibp);
947 error = xfs_alloc_read_agf(pag, *tpp, 0, &agfbp);
963 error = xfs_ialloc_check_shrink(pag, *tpp, agibp, aglen - delta);
971 error = xfs_ag_resv_free(pag);
977 XFS_AGB_TO_FSB(mp, pag->pag_agno, aglen - delta));
1010 err2 = xfs_ag_resv_init(pag, *tpp);
1036 pag->block_count -= delta;
1037 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min,
1038 &pag->agino_max);
1045 err2 = xfs_ag_resv_init(pag, *tpp);
1059 struct xfs_perag *pag,
1068 ASSERT(pag->pag_agno == pag->pag_mount->m_sb.sb_agcount - 1);
1070 error = xfs_ialloc_read_agi(pag, tp, &bp);
1081 error = xfs_alloc_read_agf(pag, tp, 0, &bp);
1096 error = xfs_rmap_free(tp, bp, pag, be32_to_cpu(agf->agf_length) - len,
1101 error = xfs_free_extent(tp, pag, be32_to_cpu(agf->agf_length) - len,
1107 pag->block_count = be32_to_cpu(agf->agf_length);
1108 __xfs_agino_range(pag->pag_mount, pag->block_count, &pag->agino_min,
1109 &pag->agino_max);
1116 struct xfs_perag *pag,
1127 error = xfs_ialloc_read_agi(pag, NULL, &agi_bp);
1130 error = xfs_alloc_read_agf(pag, NULL, 0, &agf_bp);
1136 ageo->ag_number = pag->pag_agno;
1144 freeblks = pag->pagf_freeblks +
1145 pag->pagf_flcount +
1146 pag->pagf_btreeblks -
1147 xfs_ag_resv_needed(pag, XFS_AG_RESV_NONE);
1149 xfs_ag_geom_health(pag, ageo);