Lines Matching full:sc
63 struct xfs_scrub *sc, in xrep_attempt() argument
69 trace_xrep_attempt(XFS_I(file_inode(sc->file)), sc->sm, error); in xrep_attempt()
71 xchk_ag_btcur_free(&sc->sa); in xrep_attempt()
72 xchk_rtgroup_btcur_free(&sc->sr); in xrep_attempt()
75 ASSERT(sc->ops->repair); in xrep_attempt()
78 error = sc->ops->repair(sc); in xrep_attempt()
79 trace_xrep_done(XFS_I(file_inode(sc->file)), sc->sm, error); in xrep_attempt()
87 sc->sm->sm_flags &= ~XFS_SCRUB_FLAGS_OUT; in xrep_attempt()
88 sc->flags |= XREP_ALREADY_FIXED; in xrep_attempt()
92 sc->flags |= XCHK_NEED_DRAIN; in xrep_attempt()
97 if (!(sc->flags & XCHK_TRY_HARDER)) { in xrep_attempt()
98 sc->flags |= XCHK_TRY_HARDER; in xrep_attempt()
141 struct xfs_scrub *sc) in xrep_probe() argument
145 if (xchk_should_terminate(sc, &error)) in xrep_probe()
157 struct xfs_scrub *sc) in xrep_roll_ag_trans() argument
170 if (sc->sa.agi_bp) { in xrep_roll_ag_trans()
171 xfs_ialloc_log_agi(sc->tp, sc->sa.agi_bp, XFS_AGI_MAGICNUM); in xrep_roll_ag_trans()
172 xfs_trans_bhold(sc->tp, sc->sa.agi_bp); in xrep_roll_ag_trans()
175 if (sc->sa.agf_bp) { in xrep_roll_ag_trans()
176 xfs_alloc_log_agf(sc->tp, sc->sa.agf_bp, XFS_AGF_MAGICNUM); in xrep_roll_ag_trans()
177 xfs_trans_bhold(sc->tp, sc->sa.agf_bp); in xrep_roll_ag_trans()
186 error = xfs_trans_roll(&sc->tp); in xrep_roll_ag_trans()
191 if (sc->sa.agi_bp) in xrep_roll_ag_trans()
192 xfs_trans_bjoin(sc->tp, sc->sa.agi_bp); in xrep_roll_ag_trans()
193 if (sc->sa.agf_bp) in xrep_roll_ag_trans()
194 xfs_trans_bjoin(sc->tp, sc->sa.agf_bp); in xrep_roll_ag_trans()
202 struct xfs_scrub *sc) in xrep_roll_trans() argument
204 if (!sc->ip) in xrep_roll_trans()
205 return xrep_roll_ag_trans(sc); in xrep_roll_trans()
206 return xfs_trans_roll_inode(&sc->tp, sc->ip); in xrep_roll_trans()
212 struct xfs_scrub *sc) in xrep_defer_finish() argument
225 if (sc->sa.agi_bp) { in xrep_defer_finish()
226 xfs_ialloc_log_agi(sc->tp, sc->sa.agi_bp, XFS_AGI_MAGICNUM); in xrep_defer_finish()
227 xfs_trans_bhold(sc->tp, sc->sa.agi_bp); in xrep_defer_finish()
230 if (sc->sa.agf_bp) { in xrep_defer_finish()
231 xfs_alloc_log_agf(sc->tp, sc->sa.agf_bp, XFS_AGF_MAGICNUM); in xrep_defer_finish()
232 xfs_trans_bhold(sc->tp, sc->sa.agf_bp); in xrep_defer_finish()
242 error = xfs_defer_finish(&sc->tp); in xrep_defer_finish()
251 if (sc->sa.agi_bp) in xrep_defer_finish()
252 xfs_trans_bhold_release(sc->tp, sc->sa.agi_bp); in xrep_defer_finish()
253 if (sc->sa.agf_bp) in xrep_defer_finish()
254 xfs_trans_bhold_release(sc->tp, sc->sa.agf_bp); in xrep_defer_finish()
282 struct xfs_scrub *sc) in xrep_calc_ag_resblks() argument
284 struct xfs_mount *mp = sc->mp; in xrep_calc_ag_resblks()
285 struct xfs_scrub_metadata *sm = sc->sm; in xrep_calc_ag_resblks()
397 struct xfs_scrub *sc) in xrep_calc_rtgroup_resblks() argument
399 struct xfs_mount *mp = sc->mp; in xrep_calc_rtgroup_resblks()
400 struct xfs_scrub_metadata *sm = sc->sm; in xrep_calc_rtgroup_resblks()
453 struct xfs_scrub *sc, in xrep_fix_freelist() argument
458 args.mp = sc->mp; in xrep_fix_freelist()
459 args.tp = sc->tp; in xrep_fix_freelist()
460 args.agno = pag_agno(sc->sa.pag); in xrep_fix_freelist()
462 args.pag = sc->sa.pag; in xrep_fix_freelist()
495 struct xfs_scrub *sc; member
522 struct xfs_mount *mp = ri->sc->mp; in xrep_findroot_block()
529 daddr = xfs_agbno_to_daddr(ri->sc->sa.pag, agbno); in xrep_findroot_block()
564 error = xfs_trans_read_buf(mp, ri->sc->tp, mp->m_ddev_targp, daddr, in xrep_findroot_block()
658 trace_xrep_findroot_block(ri->sc->sa.pag, agbno, in xrep_findroot_block()
661 xfs_trans_brelse(ri->sc->tp, bp); in xrep_findroot_block()
707 struct xfs_scrub *sc, in xrep_find_ag_btree_roots() argument
712 struct xfs_mount *mp = sc->mp; in xrep_find_ag_btree_roots()
721 ri.sc = sc; in xrep_find_ag_btree_roots()
732 cur = xfs_rmapbt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag); in xrep_find_ag_btree_roots()
743 struct xfs_scrub *sc, in xrep_update_qflags() argument
747 struct xfs_mount *mp = sc->mp; in xrep_update_qflags()
769 bp = xfs_trans_getsb(sc->tp); in xrep_update_qflags()
771 xfs_trans_buf_set_type(sc->tp, bp, XFS_BLFT_SB_BUF); in xrep_update_qflags()
772 xfs_trans_log_buf(sc->tp, bp, 0, sizeof(struct xfs_dsb) - 1); in xrep_update_qflags()
781 struct xfs_scrub *sc, in xrep_force_quotacheck() argument
787 if (!(flag & sc->mp->m_qflags)) in xrep_force_quotacheck()
790 xrep_update_qflags(sc, flag, 0); in xrep_force_quotacheck()
805 struct xfs_scrub *sc) in xrep_ino_dqattach() argument
809 ASSERT(sc->tp != NULL); in xrep_ino_dqattach()
810 ASSERT(sc->ip != NULL); in xrep_ino_dqattach()
812 error = xfs_qm_dqattach(sc->ip); in xrep_ino_dqattach()
817 xfs_err_ratelimited(sc->mp, in xrep_ino_dqattach()
819 (unsigned long long)sc->ip->i_ino, error); in xrep_ino_dqattach()
820 if (XFS_IS_UQUOTA_ON(sc->mp) && !sc->ip->i_udquot) in xrep_ino_dqattach()
821 xrep_force_quotacheck(sc, XFS_DQTYPE_USER); in xrep_ino_dqattach()
822 if (XFS_IS_GQUOTA_ON(sc->mp) && !sc->ip->i_gdquot) in xrep_ino_dqattach()
823 xrep_force_quotacheck(sc, XFS_DQTYPE_GROUP); in xrep_ino_dqattach()
824 if (XFS_IS_PQUOTA_ON(sc->mp) && !sc->ip->i_pdquot) in xrep_ino_dqattach()
825 xrep_force_quotacheck(sc, XFS_DQTYPE_PROJ); in xrep_ino_dqattach()
845 struct xfs_scrub *sc, in xrep_ino_ensure_extent_count() argument
852 inode_has_nrext64 = xfs_inode_has_large_extent_counts(sc->ip); in xrep_ino_ensure_extent_count()
858 if (!xfs_has_large_extent_counts(sc->mp)) in xrep_ino_ensure_extent_count()
865 sc->ip->i_diflags2 |= XFS_DIFLAG2_NREXT64; in xrep_ino_ensure_extent_count()
866 xfs_trans_log_inode(sc->tp, sc->ip, XFS_ILOG_CORE); in xrep_ino_ensure_extent_count()
876 struct xfs_scrub *sc, in xrep_ag_btcur_init() argument
879 struct xfs_mount *mp = sc->mp; in xrep_ag_btcur_init()
882 if (sc->sm->sm_type != XFS_SCRUB_TYPE_BNOBT && in xrep_ag_btcur_init()
883 sc->sm->sm_type != XFS_SCRUB_TYPE_CNTBT) { in xrep_ag_btcur_init()
884 sa->bno_cur = xfs_bnobt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
885 sc->sa.pag); in xrep_ag_btcur_init()
886 sa->cnt_cur = xfs_cntbt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
887 sc->sa.pag); in xrep_ag_btcur_init()
891 if (sc->sm->sm_type != XFS_SCRUB_TYPE_INOBT && in xrep_ag_btcur_init()
892 sc->sm->sm_type != XFS_SCRUB_TYPE_FINOBT) { in xrep_ag_btcur_init()
893 sa->ino_cur = xfs_inobt_init_cursor(sc->sa.pag, sc->tp, in xrep_ag_btcur_init()
896 sa->fino_cur = xfs_finobt_init_cursor(sc->sa.pag, in xrep_ag_btcur_init()
897 sc->tp, sa->agi_bp); in xrep_ag_btcur_init()
901 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RMAPBT && in xrep_ag_btcur_init()
903 sa->rmap_cur = xfs_rmapbt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
904 sc->sa.pag); in xrep_ag_btcur_init()
907 if (sc->sm->sm_type != XFS_SCRUB_TYPE_REFCNTBT && in xrep_ag_btcur_init()
909 sa->refc_cur = xfs_refcountbt_init_cursor(mp, sc->tp, in xrep_ag_btcur_init()
910 sa->agf_bp, sc->sa.pag); in xrep_ag_btcur_init()
920 struct xfs_scrub *sc) in xrep_reinit_pagf() argument
922 struct xfs_perag *pag = sc->sa.pag; in xrep_reinit_pagf()
930 error = xfs_alloc_read_agf(pag, sc->tp, 0, &bp); in xrep_reinit_pagf()
934 if (bp != sc->sa.agf_bp) { in xrep_reinit_pagf()
935 ASSERT(bp == sc->sa.agf_bp); in xrep_reinit_pagf()
949 struct xfs_scrub *sc) in xrep_reinit_pagi() argument
951 struct xfs_perag *pag = sc->sa.pag; in xrep_reinit_pagi()
959 error = xfs_ialloc_read_agi(pag, sc->tp, 0, &bp); in xrep_reinit_pagi()
963 if (bp != sc->sa.agi_bp) { in xrep_reinit_pagi()
964 ASSERT(bp == sc->sa.agi_bp); in xrep_reinit_pagi()
977 struct xfs_scrub *sc, in xrep_ag_init() argument
985 error = xfs_ialloc_read_agi(pag, sc->tp, 0, &sa->agi_bp); in xrep_ag_init()
989 error = xfs_alloc_read_agf(pag, sc->tp, 0, &sa->agf_bp); in xrep_ag_init()
995 xrep_ag_btcur_init(sc, sa); in xrep_ag_init()
1003 struct xfs_scrub *sc, in xrep_rtgroup_btcur_init() argument
1006 struct xfs_mount *mp = sc->mp; in xrep_rtgroup_btcur_init()
1010 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RTRMAPBT && in xrep_rtgroup_btcur_init()
1013 sr->rmap_cur = xfs_rtrmapbt_init_cursor(sc->tp, sr->rtg); in xrep_rtgroup_btcur_init()
1015 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RTREFCBT && in xrep_rtgroup_btcur_init()
1018 sr->refc_cur = xfs_rtrefcountbt_init_cursor(sc->tp, sr->rtg); in xrep_rtgroup_btcur_init()
1027 struct xfs_scrub *sc, in xrep_rtgroup_init() argument
1039 xrep_rtgroup_btcur_init(sc, sr); in xrep_rtgroup_init()
1046 struct xfs_scrub *sc, in xrep_require_rtext_inuse() argument
1050 struct xfs_mount *mp = sc->mp; in xrep_require_rtext_inuse()
1057 if (!xfs_zone_rgbno_is_valid(sc->sr.rtg, rgbno + len - 1)) in xrep_require_rtext_inuse()
1065 error = xfs_rtalloc_extent_is_free(sc->sr.rtg, sc->tp, startrtx, in xrep_require_rtext_inuse()
1079 struct xfs_scrub *sc) in xrep_reset_perag_resv() argument
1083 if (!(sc->flags & XREP_RESET_PERAG_RESV)) in xrep_reset_perag_resv()
1086 ASSERT(sc->sa.pag != NULL); in xrep_reset_perag_resv()
1087 ASSERT(sc->ops->type == ST_PERAG); in xrep_reset_perag_resv()
1088 ASSERT(sc->tp); in xrep_reset_perag_resv()
1090 sc->flags &= ~XREP_RESET_PERAG_RESV; in xrep_reset_perag_resv()
1091 xfs_ag_resv_free(sc->sa.pag); in xrep_reset_perag_resv()
1092 error = xfs_ag_resv_init(sc->sa.pag, sc->tp); in xrep_reset_perag_resv()
1094 xfs_err(sc->mp, in xrep_reset_perag_resv()
1096 pag_agno(sc->sa.pag)); in xrep_reset_perag_resv()
1106 struct xfs_scrub *sc) in xrep_will_attempt() argument
1109 if (sc->sm->sm_flags & XFS_SCRUB_IFLAG_FORCE_REBUILD) in xrep_will_attempt()
1113 if (XFS_TEST_ERROR(false, sc->mp, XFS_ERRTAG_FORCE_SCRUB_REPAIR)) in xrep_will_attempt()
1117 if (xchk_needs_repair(sc->sm)) in xrep_will_attempt()
1126 struct xfs_scrub *sc, in xrep_metadata_inode_subtype() argument
1138 sub = xchk_scrub_create_subord(sc, scrub_type); in xrep_metadata_inode_subtype()
1139 error = sub->sc.ops->scrub(&sub->sc); in xrep_metadata_inode_subtype()
1142 if (!xrep_will_attempt(&sub->sc)) in xrep_metadata_inode_subtype()
1149 error = sub->sc.ops->repair(&sub->sc); in xrep_metadata_inode_subtype()
1158 error = xfs_defer_finish(&sub->sc.tp); in xrep_metadata_inode_subtype()
1161 error = xfs_trans_roll(&sub->sc.tp); in xrep_metadata_inode_subtype()
1169 sub->sc.sm->sm_flags &= ~XFS_SCRUB_FLAGS_OUT; in xrep_metadata_inode_subtype()
1170 error = sub->sc.ops->scrub(&sub->sc); in xrep_metadata_inode_subtype()
1175 if (xchk_needs_repair(sub->sc.sm)) { in xrep_metadata_inode_subtype()
1186 * sc->ip points to the metadata inode and the ILOCK is held on that inode.
1192 struct xfs_scrub *sc) in xrep_metadata_inode_forks() argument
1198 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_INODE); in xrep_metadata_inode_forks()
1202 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTD); in xrep_metadata_inode_forks()
1212 if (xfs_inode_hasattr(sc->ip)) { in xrep_metadata_inode_forks()
1213 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTA); in xrep_metadata_inode_forks()
1219 if (xfs_is_reflink_inode(sc->ip)) { in xrep_metadata_inode_forks()
1221 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_metadata_inode_forks()
1222 error = xfs_reflink_clear_inode_flag(sc->ip, &sc->tp); in xrep_metadata_inode_forks()
1231 if (xfs_inode_hasattr(sc->ip) && !xfs_has_metadir(sc->mp)) { in xrep_metadata_inode_forks()
1234 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_metadata_inode_forks()
1236 error = xrep_xattr_reset_fork(sc); in xrep_metadata_inode_forks()
1246 error = xfs_trans_roll(&sc->tp); in xrep_metadata_inode_forks()
1263 struct xfs_scrub *sc, in xrep_setup_xfbtree() argument
1266 ASSERT(sc->tp == NULL); in xrep_setup_xfbtree()
1268 return xmbuf_alloc(sc->mp, descr, &sc->xmbtp); in xrep_setup_xfbtree()
1341 struct xfs_scrub *sc, in xrep_check_ino_btree_mapping() argument
1356 if (!xfs_verify_agbext(sc->sa.pag, rec->rm_startblock, in xrep_check_ino_btree_mapping()
1361 error = xfs_alloc_has_records(sc->sa.bno_cur, rec->rm_startblock, in xrep_check_ino_btree_mapping()
1377 struct xfs_scrub *sc, in xrep_inode_set_nblocks() argument
1381 new_blocks - sc->ip->i_nblocks; in xrep_inode_set_nblocks()
1383 sc->ip->i_nblocks = new_blocks; in xrep_inode_set_nblocks()
1385 xfs_trans_log_inode(sc->tp, sc->ip, XFS_ILOG_CORE); in xrep_inode_set_nblocks()
1387 xfs_trans_mod_dquot_byino(sc->tp, sc->ip, XFS_TRANS_DQ_BCOUNT, in xrep_inode_set_nblocks()
1394 struct xfs_scrub *sc) in xrep_reset_metafile_resv() argument
1396 struct xfs_mount *mp = sc->mp; in xrep_reset_metafile_resv()
1431 xfs_warn(sc->mp, in xrep_reset_metafile_resv()