Lines Matching defs:sc

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