Lines Matching refs:iwag

154 	struct xfs_iwalk_ag	*iwag)  in xfs_iwalk_alloc()  argument
158 ASSERT(iwag->recs == NULL); in xfs_iwalk_alloc()
159 iwag->nr_recs = 0; in xfs_iwalk_alloc()
162 size = iwag->sz_recs * sizeof(struct xfs_inobt_rec_incore); in xfs_iwalk_alloc()
163 iwag->recs = kmem_alloc(size, KM_MAYFAIL); in xfs_iwalk_alloc()
164 if (iwag->recs == NULL) in xfs_iwalk_alloc()
173 struct xfs_iwalk_ag *iwag) in xfs_iwalk_free() argument
175 kmem_free(iwag->recs); in xfs_iwalk_free()
176 iwag->recs = NULL; in xfs_iwalk_free()
182 struct xfs_iwalk_ag *iwag) in xfs_iwalk_ag_recs() argument
184 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag_recs()
185 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_ag_recs()
186 struct xfs_perag *pag = iwag->pag; in xfs_iwalk_ag_recs()
191 for (i = 0; i < iwag->nr_recs; i++) { in xfs_iwalk_ag_recs()
192 struct xfs_inobt_rec_incore *irec = &iwag->recs[i]; in xfs_iwalk_ag_recs()
196 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag_recs()
199 if (iwag->inobt_walk_fn) { in xfs_iwalk_ag_recs()
200 error = iwag->inobt_walk_fn(mp, tp, pag->pag_agno, irec, in xfs_iwalk_ag_recs()
201 iwag->data); in xfs_iwalk_ag_recs()
206 if (!iwag->iwalk_fn) in xfs_iwalk_ag_recs()
210 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag_recs()
220 error = iwag->iwalk_fn(mp, tp, ino, iwag->data); in xfs_iwalk_ag_recs()
264 struct xfs_iwalk_ag *iwag, in xfs_iwalk_ag_start() argument
270 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag_start()
271 struct xfs_trans *tp = iwag->tp; in xfs_iwalk_ag_start()
272 struct xfs_perag *pag = iwag->pag; in xfs_iwalk_ag_start()
277 iwag->nr_recs = 0; in xfs_iwalk_ag_start()
305 irec = &iwag->recs[iwag->nr_recs]; in xfs_iwalk_ag_start()
312 iwag->lastino = XFS_AGINO_TO_INO(mp, pag->pag_agno, in xfs_iwalk_ag_start()
326 if (iwag->trim_start) in xfs_iwalk_ag_start()
335 iwag->nr_recs++; in xfs_iwalk_ag_start()
336 ASSERT(iwag->nr_recs < iwag->sz_recs); in xfs_iwalk_ag_start()
352 struct xfs_iwalk_ag *iwag, in xfs_iwalk_run_callbacks() argument
357 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_run_callbacks()
362 next_agino = XFS_INO_TO_AGINO(mp, iwag->lastino) + 1; in xfs_iwalk_run_callbacks()
364 ASSERT(iwag->nr_recs > 0); in xfs_iwalk_run_callbacks()
367 xfs_iwalk_del_inobt(iwag->tp, curpp, agi_bpp, 0); in xfs_iwalk_run_callbacks()
368 irec = &iwag->recs[iwag->nr_recs - 1]; in xfs_iwalk_run_callbacks()
371 if (iwag->drop_trans) { in xfs_iwalk_run_callbacks()
372 xfs_trans_cancel(iwag->tp); in xfs_iwalk_run_callbacks()
373 iwag->tp = NULL; in xfs_iwalk_run_callbacks()
376 error = xfs_iwalk_ag_recs(iwag); in xfs_iwalk_run_callbacks()
381 iwag->nr_recs = 0; in xfs_iwalk_run_callbacks()
386 if (iwag->drop_trans) { in xfs_iwalk_run_callbacks()
387 error = xfs_trans_alloc_empty(mp, &iwag->tp); in xfs_iwalk_run_callbacks()
393 error = xfs_inobt_cur(iwag->pag, iwag->tp, XFS_BTNUM_INO, curpp, in xfs_iwalk_run_callbacks()
404 struct xfs_iwalk_ag *iwag) in xfs_iwalk_ag() argument
406 struct xfs_mount *mp = iwag->mp; in xfs_iwalk_ag()
407 struct xfs_perag *pag = iwag->pag; in xfs_iwalk_ag()
415 ASSERT(pag->pag_agno == XFS_INO_TO_AGNO(mp, iwag->startino)); in xfs_iwalk_ag()
416 agino = XFS_INO_TO_AGINO(mp, iwag->startino); in xfs_iwalk_ag()
417 error = xfs_iwalk_ag_start(iwag, agino, &cur, &agi_bp, &has_more); in xfs_iwalk_ag()
424 if (xfs_pwork_want_abort(&iwag->pwork)) in xfs_iwalk_ag()
428 irec = &iwag->recs[iwag->nr_recs]; in xfs_iwalk_ag()
435 if (iwag->lastino != NULLFSINO && in xfs_iwalk_ag()
436 XFS_IS_CORRUPT(mp, iwag->lastino >= rec_fsino)) { in xfs_iwalk_ag()
440 iwag->lastino = rec_fsino + XFS_INODES_PER_CHUNK - 1; in xfs_iwalk_ag()
443 if (iwag->skip_empty && irec->ir_freecount == irec->ir_count) { in xfs_iwalk_ag()
454 if (iwag->iwalk_fn) in xfs_iwalk_ag()
461 if (++iwag->nr_recs < iwag->sz_recs) { in xfs_iwalk_ag()
475 error = xfs_iwalk_run_callbacks(iwag, &cur, &agi_bp, &has_more); in xfs_iwalk_ag()
478 if (iwag->nr_recs == 0 || error) in xfs_iwalk_ag()
482 error = xfs_iwalk_run_callbacks(iwag, &cur, &agi_bp, &has_more); in xfs_iwalk_ag()
485 xfs_iwalk_del_inobt(iwag->tp, &cur, &agi_bp, error); in xfs_iwalk_ag()
559 struct xfs_iwalk_ag iwag = { in xfs_iwalk() local
578 error = xfs_iwalk_alloc(&iwag); in xfs_iwalk()
583 iwag.pag = pag; in xfs_iwalk()
584 error = xfs_iwalk_ag(&iwag); in xfs_iwalk()
587 iwag.startino = XFS_AGINO_TO_INO(mp, agno + 1, 0); in xfs_iwalk()
590 iwag.pag = NULL; in xfs_iwalk()
593 if (iwag.pag) in xfs_iwalk()
595 xfs_iwalk_free(&iwag); in xfs_iwalk()
605 struct xfs_iwalk_ag *iwag; in xfs_iwalk_ag_work() local
608 iwag = container_of(pwork, struct xfs_iwalk_ag, pwork); in xfs_iwalk_ag_work()
612 error = xfs_iwalk_alloc(iwag); in xfs_iwalk_ag_work()
619 error = xfs_trans_alloc_empty(mp, &iwag->tp); in xfs_iwalk_ag_work()
622 iwag->drop_trans = 1; in xfs_iwalk_ag_work()
624 error = xfs_iwalk_ag(iwag); in xfs_iwalk_ag_work()
625 if (iwag->tp) in xfs_iwalk_ag_work()
626 xfs_trans_cancel(iwag->tp); in xfs_iwalk_ag_work()
627 xfs_iwalk_free(iwag); in xfs_iwalk_ag_work()
629 xfs_perag_put(iwag->pag); in xfs_iwalk_ag_work()
630 kmem_free(iwag); in xfs_iwalk_ag_work()
661 struct xfs_iwalk_ag *iwag; in xfs_iwalk_threaded() local
666 iwag = kmem_zalloc(sizeof(struct xfs_iwalk_ag), 0); in xfs_iwalk_threaded()
667 iwag->mp = mp; in xfs_iwalk_threaded()
673 iwag->pag = xfs_perag_hold(pag); in xfs_iwalk_threaded()
674 iwag->iwalk_fn = iwalk_fn; in xfs_iwalk_threaded()
675 iwag->data = data; in xfs_iwalk_threaded()
676 iwag->startino = startino; in xfs_iwalk_threaded()
677 iwag->sz_recs = xfs_iwalk_prefetch(inode_records); in xfs_iwalk_threaded()
678 iwag->lastino = NULLFSINO; in xfs_iwalk_threaded()
679 xfs_pwork_queue(&pctl, &iwag->pwork); in xfs_iwalk_threaded()
745 struct xfs_iwalk_ag iwag = { in xfs_inobt_walk() local
762 error = xfs_iwalk_alloc(&iwag); in xfs_inobt_walk()
767 iwag.pag = pag; in xfs_inobt_walk()
768 error = xfs_iwalk_ag(&iwag); in xfs_inobt_walk()
771 iwag.startino = XFS_AGINO_TO_INO(mp, pag->pag_agno + 1, 0); in xfs_inobt_walk()
774 iwag.pag = NULL; in xfs_inobt_walk()
777 if (iwag.pag) in xfs_inobt_walk()
779 xfs_iwalk_free(&iwag); in xfs_inobt_walk()