Lines Matching full:sc
62 struct xfs_scrub *sc, in xrep_attempt() argument
68 trace_xrep_attempt(XFS_I(file_inode(sc->file)), sc->sm, error); in xrep_attempt()
70 xchk_ag_btcur_free(&sc->sa); in xrep_attempt()
71 xchk_rtgroup_btcur_free(&sc->sr); in xrep_attempt()
74 ASSERT(sc->ops->repair); in xrep_attempt()
77 error = sc->ops->repair(sc); in xrep_attempt()
78 trace_xrep_done(XFS_I(file_inode(sc->file)), sc->sm, error); in xrep_attempt()
86 sc->sm->sm_flags &= ~XFS_SCRUB_FLAGS_OUT; in xrep_attempt()
87 sc->flags |= XREP_ALREADY_FIXED; in xrep_attempt()
91 sc->flags |= XCHK_NEED_DRAIN; in xrep_attempt()
96 if (!(sc->flags & XCHK_TRY_HARDER)) { in xrep_attempt()
97 sc->flags |= XCHK_TRY_HARDER; in xrep_attempt()
140 struct xfs_scrub *sc) in xrep_probe() argument
144 if (xchk_should_terminate(sc, &error)) in xrep_probe()
156 struct xfs_scrub *sc) in xrep_roll_ag_trans() argument
169 if (sc->sa.agi_bp) { in xrep_roll_ag_trans()
170 xfs_ialloc_log_agi(sc->tp, sc->sa.agi_bp, XFS_AGI_MAGICNUM); in xrep_roll_ag_trans()
171 xfs_trans_bhold(sc->tp, sc->sa.agi_bp); in xrep_roll_ag_trans()
174 if (sc->sa.agf_bp) { in xrep_roll_ag_trans()
175 xfs_alloc_log_agf(sc->tp, sc->sa.agf_bp, XFS_AGF_MAGICNUM); in xrep_roll_ag_trans()
176 xfs_trans_bhold(sc->tp, sc->sa.agf_bp); in xrep_roll_ag_trans()
185 error = xfs_trans_roll(&sc->tp); in xrep_roll_ag_trans()
190 if (sc->sa.agi_bp) in xrep_roll_ag_trans()
191 xfs_trans_bjoin(sc->tp, sc->sa.agi_bp); in xrep_roll_ag_trans()
192 if (sc->sa.agf_bp) in xrep_roll_ag_trans()
193 xfs_trans_bjoin(sc->tp, sc->sa.agf_bp); in xrep_roll_ag_trans()
201 struct xfs_scrub *sc) in xrep_roll_trans() argument
203 if (!sc->ip) in xrep_roll_trans()
204 return xrep_roll_ag_trans(sc); in xrep_roll_trans()
205 return xfs_trans_roll_inode(&sc->tp, sc->ip); in xrep_roll_trans()
211 struct xfs_scrub *sc) in xrep_defer_finish() argument
224 if (sc->sa.agi_bp) { in xrep_defer_finish()
225 xfs_ialloc_log_agi(sc->tp, sc->sa.agi_bp, XFS_AGI_MAGICNUM); in xrep_defer_finish()
226 xfs_trans_bhold(sc->tp, sc->sa.agi_bp); in xrep_defer_finish()
229 if (sc->sa.agf_bp) { in xrep_defer_finish()
230 xfs_alloc_log_agf(sc->tp, sc->sa.agf_bp, XFS_AGF_MAGICNUM); in xrep_defer_finish()
231 xfs_trans_bhold(sc->tp, sc->sa.agf_bp); in xrep_defer_finish()
241 error = xfs_defer_finish(&sc->tp); in xrep_defer_finish()
250 if (sc->sa.agi_bp) in xrep_defer_finish()
251 xfs_trans_bhold_release(sc->tp, sc->sa.agi_bp); in xrep_defer_finish()
252 if (sc->sa.agf_bp) in xrep_defer_finish()
253 xfs_trans_bhold_release(sc->tp, sc->sa.agf_bp); in xrep_defer_finish()
281 struct xfs_scrub *sc) in xrep_calc_ag_resblks() argument
283 struct xfs_mount *mp = sc->mp; in xrep_calc_ag_resblks()
284 struct xfs_scrub_metadata *sm = sc->sm; in xrep_calc_ag_resblks()
396 struct xfs_scrub *sc) in xrep_calc_rtgroup_resblks() argument
398 struct xfs_mount *mp = sc->mp; in xrep_calc_rtgroup_resblks()
399 struct xfs_scrub_metadata *sm = sc->sm; in xrep_calc_rtgroup_resblks()
452 struct xfs_scrub *sc, in xrep_fix_freelist() argument
457 args.mp = sc->mp; in xrep_fix_freelist()
458 args.tp = sc->tp; in xrep_fix_freelist()
459 args.agno = pag_agno(sc->sa.pag); in xrep_fix_freelist()
461 args.pag = sc->sa.pag; in xrep_fix_freelist()
494 struct xfs_scrub *sc; member
521 struct xfs_mount *mp = ri->sc->mp; in xrep_findroot_block()
528 daddr = xfs_agbno_to_daddr(ri->sc->sa.pag, agbno); in xrep_findroot_block()
563 error = xfs_trans_read_buf(mp, ri->sc->tp, mp->m_ddev_targp, daddr, in xrep_findroot_block()
657 trace_xrep_findroot_block(ri->sc->sa.pag, agbno, in xrep_findroot_block()
660 xfs_trans_brelse(ri->sc->tp, bp); in xrep_findroot_block()
706 struct xfs_scrub *sc, in xrep_find_ag_btree_roots() argument
711 struct xfs_mount *mp = sc->mp; in xrep_find_ag_btree_roots()
720 ri.sc = sc; in xrep_find_ag_btree_roots()
731 cur = xfs_rmapbt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag); in xrep_find_ag_btree_roots()
742 struct xfs_scrub *sc, in xrep_update_qflags() argument
746 struct xfs_mount *mp = sc->mp; in xrep_update_qflags()
768 bp = xfs_trans_getsb(sc->tp); in xrep_update_qflags()
770 xfs_trans_buf_set_type(sc->tp, bp, XFS_BLFT_SB_BUF); in xrep_update_qflags()
771 xfs_trans_log_buf(sc->tp, bp, 0, sizeof(struct xfs_dsb) - 1); in xrep_update_qflags()
780 struct xfs_scrub *sc, in xrep_force_quotacheck() argument
786 if (!(flag & sc->mp->m_qflags)) in xrep_force_quotacheck()
789 xrep_update_qflags(sc, flag, 0); in xrep_force_quotacheck()
804 struct xfs_scrub *sc) in xrep_ino_dqattach() argument
808 ASSERT(sc->tp != NULL); in xrep_ino_dqattach()
809 ASSERT(sc->ip != NULL); in xrep_ino_dqattach()
811 error = xfs_qm_dqattach(sc->ip); in xrep_ino_dqattach()
816 xfs_err_ratelimited(sc->mp, in xrep_ino_dqattach()
818 (unsigned long long)sc->ip->i_ino, error); in xrep_ino_dqattach()
819 if (XFS_IS_UQUOTA_ON(sc->mp) && !sc->ip->i_udquot) in xrep_ino_dqattach()
820 xrep_force_quotacheck(sc, XFS_DQTYPE_USER); in xrep_ino_dqattach()
821 if (XFS_IS_GQUOTA_ON(sc->mp) && !sc->ip->i_gdquot) in xrep_ino_dqattach()
822 xrep_force_quotacheck(sc, XFS_DQTYPE_GROUP); in xrep_ino_dqattach()
823 if (XFS_IS_PQUOTA_ON(sc->mp) && !sc->ip->i_pdquot) in xrep_ino_dqattach()
824 xrep_force_quotacheck(sc, XFS_DQTYPE_PROJ); in xrep_ino_dqattach()
844 struct xfs_scrub *sc, in xrep_ino_ensure_extent_count() argument
851 inode_has_nrext64 = xfs_inode_has_large_extent_counts(sc->ip); in xrep_ino_ensure_extent_count()
857 if (!xfs_has_large_extent_counts(sc->mp)) in xrep_ino_ensure_extent_count()
864 sc->ip->i_diflags2 |= XFS_DIFLAG2_NREXT64; in xrep_ino_ensure_extent_count()
865 xfs_trans_log_inode(sc->tp, sc->ip, XFS_ILOG_CORE); in xrep_ino_ensure_extent_count()
875 struct xfs_scrub *sc, in xrep_ag_btcur_init() argument
878 struct xfs_mount *mp = sc->mp; in xrep_ag_btcur_init()
881 if (sc->sm->sm_type != XFS_SCRUB_TYPE_BNOBT && in xrep_ag_btcur_init()
882 sc->sm->sm_type != XFS_SCRUB_TYPE_CNTBT) { in xrep_ag_btcur_init()
883 sa->bno_cur = xfs_bnobt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
884 sc->sa.pag); in xrep_ag_btcur_init()
885 sa->cnt_cur = xfs_cntbt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
886 sc->sa.pag); in xrep_ag_btcur_init()
890 if (sc->sm->sm_type != XFS_SCRUB_TYPE_INOBT && in xrep_ag_btcur_init()
891 sc->sm->sm_type != XFS_SCRUB_TYPE_FINOBT) { in xrep_ag_btcur_init()
892 sa->ino_cur = xfs_inobt_init_cursor(sc->sa.pag, sc->tp, in xrep_ag_btcur_init()
895 sa->fino_cur = xfs_finobt_init_cursor(sc->sa.pag, in xrep_ag_btcur_init()
896 sc->tp, sa->agi_bp); in xrep_ag_btcur_init()
900 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RMAPBT && in xrep_ag_btcur_init()
902 sa->rmap_cur = xfs_rmapbt_init_cursor(mp, sc->tp, sa->agf_bp, in xrep_ag_btcur_init()
903 sc->sa.pag); in xrep_ag_btcur_init()
906 if (sc->sm->sm_type != XFS_SCRUB_TYPE_REFCNTBT && in xrep_ag_btcur_init()
908 sa->refc_cur = xfs_refcountbt_init_cursor(mp, sc->tp, in xrep_ag_btcur_init()
909 sa->agf_bp, sc->sa.pag); in xrep_ag_btcur_init()
919 struct xfs_scrub *sc) in xrep_reinit_pagf() argument
921 struct xfs_perag *pag = sc->sa.pag; in xrep_reinit_pagf()
929 error = xfs_alloc_read_agf(pag, sc->tp, 0, &bp); in xrep_reinit_pagf()
933 if (bp != sc->sa.agf_bp) { in xrep_reinit_pagf()
934 ASSERT(bp == sc->sa.agf_bp); in xrep_reinit_pagf()
948 struct xfs_scrub *sc) in xrep_reinit_pagi() argument
950 struct xfs_perag *pag = sc->sa.pag; in xrep_reinit_pagi()
958 error = xfs_ialloc_read_agi(pag, sc->tp, 0, &bp); in xrep_reinit_pagi()
962 if (bp != sc->sa.agi_bp) { in xrep_reinit_pagi()
963 ASSERT(bp == sc->sa.agi_bp); in xrep_reinit_pagi()
976 struct xfs_scrub *sc, in xrep_ag_init() argument
984 error = xfs_ialloc_read_agi(pag, sc->tp, 0, &sa->agi_bp); in xrep_ag_init()
988 error = xfs_alloc_read_agf(pag, sc->tp, 0, &sa->agf_bp); in xrep_ag_init()
994 xrep_ag_btcur_init(sc, sa); in xrep_ag_init()
1002 struct xfs_scrub *sc, in xrep_rtgroup_btcur_init() argument
1005 struct xfs_mount *mp = sc->mp; in xrep_rtgroup_btcur_init()
1009 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RTRMAPBT && in xrep_rtgroup_btcur_init()
1012 sr->rmap_cur = xfs_rtrmapbt_init_cursor(sc->tp, sr->rtg); in xrep_rtgroup_btcur_init()
1014 if (sc->sm->sm_type != XFS_SCRUB_TYPE_RTREFCBT && in xrep_rtgroup_btcur_init()
1017 sr->refc_cur = xfs_rtrefcountbt_init_cursor(sc->tp, sr->rtg); in xrep_rtgroup_btcur_init()
1026 struct xfs_scrub *sc, in xrep_rtgroup_init() argument
1038 xrep_rtgroup_btcur_init(sc, sr); in xrep_rtgroup_init()
1045 struct xfs_scrub *sc, in xrep_require_rtext_inuse() argument
1049 struct xfs_mount *mp = sc->mp; in xrep_require_rtext_inuse()
1058 error = xfs_rtalloc_extent_is_free(sc->sr.rtg, sc->tp, startrtx, in xrep_require_rtext_inuse()
1072 struct xfs_scrub *sc) in xrep_reset_perag_resv() argument
1076 if (!(sc->flags & XREP_RESET_PERAG_RESV)) in xrep_reset_perag_resv()
1079 ASSERT(sc->sa.pag != NULL); in xrep_reset_perag_resv()
1080 ASSERT(sc->ops->type == ST_PERAG); in xrep_reset_perag_resv()
1081 ASSERT(sc->tp); in xrep_reset_perag_resv()
1083 sc->flags &= ~XREP_RESET_PERAG_RESV; in xrep_reset_perag_resv()
1084 xfs_ag_resv_free(sc->sa.pag); in xrep_reset_perag_resv()
1085 error = xfs_ag_resv_init(sc->sa.pag, sc->tp); in xrep_reset_perag_resv()
1087 xfs_err(sc->mp, in xrep_reset_perag_resv()
1089 pag_agno(sc->sa.pag)); in xrep_reset_perag_resv()
1099 struct xfs_scrub *sc) in xrep_will_attempt() argument
1102 if (sc->sm->sm_flags & XFS_SCRUB_IFLAG_FORCE_REBUILD) in xrep_will_attempt()
1106 if (XFS_TEST_ERROR(false, sc->mp, XFS_ERRTAG_FORCE_SCRUB_REPAIR)) in xrep_will_attempt()
1110 if (xchk_needs_repair(sc->sm)) in xrep_will_attempt()
1119 struct xfs_scrub *sc, in xrep_metadata_inode_subtype() argument
1131 sub = xchk_scrub_create_subord(sc, scrub_type); in xrep_metadata_inode_subtype()
1132 error = sub->sc.ops->scrub(&sub->sc); in xrep_metadata_inode_subtype()
1135 if (!xrep_will_attempt(&sub->sc)) in xrep_metadata_inode_subtype()
1142 error = sub->sc.ops->repair(&sub->sc); in xrep_metadata_inode_subtype()
1151 error = xfs_defer_finish(&sub->sc.tp); in xrep_metadata_inode_subtype()
1154 error = xfs_trans_roll(&sub->sc.tp); in xrep_metadata_inode_subtype()
1162 sub->sc.sm->sm_flags &= ~XFS_SCRUB_FLAGS_OUT; in xrep_metadata_inode_subtype()
1163 error = sub->sc.ops->scrub(&sub->sc); in xrep_metadata_inode_subtype()
1168 if (xchk_needs_repair(sub->sc.sm)) { in xrep_metadata_inode_subtype()
1179 * sc->ip points to the metadata inode and the ILOCK is held on that inode.
1185 struct xfs_scrub *sc) in xrep_metadata_inode_forks() argument
1191 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_INODE); in xrep_metadata_inode_forks()
1195 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTD); in xrep_metadata_inode_forks()
1205 if (xfs_inode_hasattr(sc->ip)) { in xrep_metadata_inode_forks()
1206 error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTA); in xrep_metadata_inode_forks()
1212 if (xfs_is_reflink_inode(sc->ip)) { in xrep_metadata_inode_forks()
1214 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_metadata_inode_forks()
1215 error = xfs_reflink_clear_inode_flag(sc->ip, &sc->tp); in xrep_metadata_inode_forks()
1224 if (xfs_inode_hasattr(sc->ip) && !xfs_has_metadir(sc->mp)) { in xrep_metadata_inode_forks()
1227 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_metadata_inode_forks()
1229 error = xrep_xattr_reset_fork(sc); in xrep_metadata_inode_forks()
1239 error = xfs_trans_roll(&sc->tp); in xrep_metadata_inode_forks()
1256 struct xfs_scrub *sc, in xrep_setup_xfbtree() argument
1259 ASSERT(sc->tp == NULL); in xrep_setup_xfbtree()
1261 return xmbuf_alloc(sc->mp, descr, &sc->xmbtp); in xrep_setup_xfbtree()
1334 struct xfs_scrub *sc, in xrep_check_ino_btree_mapping() argument
1349 if (!xfs_verify_agbext(sc->sa.pag, rec->rm_startblock, in xrep_check_ino_btree_mapping()
1354 error = xfs_alloc_has_records(sc->sa.bno_cur, rec->rm_startblock, in xrep_check_ino_btree_mapping()
1370 struct xfs_scrub *sc, in xrep_inode_set_nblocks() argument
1374 new_blocks - sc->ip->i_nblocks; in xrep_inode_set_nblocks()
1376 sc->ip->i_nblocks = new_blocks; in xrep_inode_set_nblocks()
1378 xfs_trans_log_inode(sc->tp, sc->ip, XFS_ILOG_CORE); in xrep_inode_set_nblocks()
1380 xfs_trans_mod_dquot_byino(sc->tp, sc->ip, XFS_TRANS_DQ_BCOUNT, in xrep_inode_set_nblocks()
1387 struct xfs_scrub *sc) in xrep_reset_metafile_resv() argument
1389 struct xfs_inode *ip = sc->ip; in xrep_reset_metafile_resv()
1419 error = xfs_dec_fdblocks(sc->mp, delta, true); in xrep_reset_metafile_resv()
1423 xfs_warn(sc->mp, in xrep_reset_metafile_resv()
1428 error = xfs_dec_fdblocks(sc->mp, delta, true); in xrep_reset_metafile_resv()