Lines Matching refs:iwag

149 	struct xfs_iwalk_ag	*iwag)  in xfs_iwalk_alloc()  argument
153 ASSERT(iwag->recs == NULL); in xfs_iwalk_alloc()
154 iwag->nr_recs = 0; in xfs_iwalk_alloc()
157 size = iwag->sz_recs * sizeof(struct xfs_inobt_rec_incore); in xfs_iwalk_alloc()
158 iwag->recs = kmem_alloc(size, KM_MAYFAIL); in xfs_iwalk_alloc()
159 if (iwag->recs == NULL) in xfs_iwalk_alloc()
168 struct xfs_iwalk_ag *iwag) in xfs_iwalk_free() argument
170 kmem_free(iwag->recs); in xfs_iwalk_free()
171 iwag->recs = NULL; in xfs_iwalk_free()
177 struct xfs_iwalk_ag *iwag) in xfs_iwalk_ag_recs() argument
179 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag_recs()
180 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_ag_recs()
186 agno = XFS_INO_TO_AGNO(mp, iwag->startino); in xfs_iwalk_ag_recs()
187 for (i = 0; i < iwag->nr_recs; i++) { in xfs_iwalk_ag_recs()
188 struct xfs_inobt_rec_incore *irec = &iwag->recs[i]; in xfs_iwalk_ag_recs()
192 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag_recs()
195 if (iwag->inobt_walk_fn) { in xfs_iwalk_ag_recs()
196 error = iwag->inobt_walk_fn(mp, tp, agno, irec, in xfs_iwalk_ag_recs()
197 iwag->data); in xfs_iwalk_ag_recs()
202 if (!iwag->iwalk_fn) in xfs_iwalk_ag_recs()
206 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag_recs()
215 error = iwag->iwalk_fn(mp, tp, ino, iwag->data); in xfs_iwalk_ag_recs()
259 struct xfs_iwalk_ag *iwag, in xfs_iwalk_ag_start() argument
266 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag_start()
267 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_ag_start()
272 iwag->nr_recs = 0; in xfs_iwalk_ag_start()
300 irec = &iwag->recs[iwag->nr_recs]; in xfs_iwalk_ag_start()
307 iwag->lastino = XFS_AGINO_TO_INO(mp, agno, in xfs_iwalk_ag_start()
321 if (iwag->trim_start) in xfs_iwalk_ag_start()
330 iwag->nr_recs++; in xfs_iwalk_ag_start()
331 ASSERT(iwag->nr_recs < iwag->sz_recs); in xfs_iwalk_ag_start()
347 struct xfs_iwalk_ag *iwag, in xfs_iwalk_run_callbacks() argument
353 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_run_callbacks()
354 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_run_callbacks()
359 next_agino = XFS_INO_TO_AGINO(mp, iwag->lastino) + 1; in xfs_iwalk_run_callbacks()
361 ASSERT(iwag->nr_recs > 0); in xfs_iwalk_run_callbacks()
365 irec = &iwag->recs[iwag->nr_recs - 1]; in xfs_iwalk_run_callbacks()
368 error = xfs_iwalk_ag_recs(iwag); in xfs_iwalk_run_callbacks()
373 iwag->nr_recs = 0; in xfs_iwalk_run_callbacks()
389 struct xfs_iwalk_ag *iwag) in xfs_iwalk_ag() argument
391 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag()
392 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_ag()
401 agno = XFS_INO_TO_AGNO(mp, iwag->startino); in xfs_iwalk_ag()
402 agino = XFS_INO_TO_AGINO(mp, iwag->startino); in xfs_iwalk_ag()
403 error = xfs_iwalk_ag_start(iwag, agno, agino, &cur, &agi_bp, &has_more); in xfs_iwalk_ag()
410 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag()
414 irec = &iwag->recs[iwag->nr_recs]; in xfs_iwalk_ag()
421 if (iwag->lastino != NULLFSINO && in xfs_iwalk_ag()
422 XFS_IS_CORRUPT(mp, iwag->lastino >= rec_fsino)) { in xfs_iwalk_ag()
426 iwag->lastino = rec_fsino + XFS_INODES_PER_CHUNK - 1; in xfs_iwalk_ag()
429 if (iwag->skip_empty && irec->ir_freecount == irec->ir_count) { in xfs_iwalk_ag()
440 if (iwag->iwalk_fn) in xfs_iwalk_ag()
447 if (++iwag->nr_recs < iwag->sz_recs) { in xfs_iwalk_ag()
461 error = xfs_iwalk_run_callbacks(iwag, agno, &cur, &agi_bp, in xfs_iwalk_ag()
465 if (iwag->nr_recs == 0 || error) in xfs_iwalk_ag()
469 error = xfs_iwalk_run_callbacks(iwag, agno, &cur, &agi_bp, &has_more); in xfs_iwalk_ag()
546 struct xfs_iwalk_ag iwag = { in xfs_iwalk() local
564 error = xfs_iwalk_alloc(&iwag); in xfs_iwalk()
569 error = xfs_iwalk_ag(&iwag); in xfs_iwalk()
572 iwag.startino = XFS_AGINO_TO_INO(mp, agno + 1, 0); in xfs_iwalk()
577 xfs_iwalk_free(&iwag); in xfs_iwalk()
587 struct xfs_iwalk_ag *iwag; in xfs_iwalk_ag_work() local
590 iwag = container_of(pwork, struct xfs_iwalk_ag, pwork); in xfs_iwalk_ag_work()
594 error = xfs_iwalk_alloc(iwag); in xfs_iwalk_ag_work()
598 error = xfs_iwalk_ag(iwag); in xfs_iwalk_ag_work()
599 xfs_iwalk_free(iwag); in xfs_iwalk_ag_work()
601 kmem_free(iwag); in xfs_iwalk_ag_work()
634 struct xfs_iwalk_ag *iwag; in xfs_iwalk_threaded() local
639 iwag = kmem_zalloc(sizeof(struct xfs_iwalk_ag), 0); in xfs_iwalk_threaded()
640 iwag->mp = mp; in xfs_iwalk_threaded()
641 iwag->iwalk_fn = iwalk_fn; in xfs_iwalk_threaded()
642 iwag->data = data; in xfs_iwalk_threaded()
643 iwag->startino = startino; in xfs_iwalk_threaded()
644 iwag->sz_recs = xfs_iwalk_prefetch(inode_records); in xfs_iwalk_threaded()
645 iwag->lastino = NULLFSINO; in xfs_iwalk_threaded()
646 xfs_pwork_queue(&pctl, &iwag->pwork); in xfs_iwalk_threaded()
711 struct xfs_iwalk_ag iwag = { in xfs_inobt_walk() local
727 error = xfs_iwalk_alloc(&iwag); in xfs_inobt_walk()
732 error = xfs_iwalk_ag(&iwag); in xfs_inobt_walk()
735 iwag.startino = XFS_AGINO_TO_INO(mp, agno + 1, 0); in xfs_inobt_walk()
740 xfs_iwalk_free(&iwag); in xfs_inobt_walk()