Lines Matching refs:sc

138 	struct xfs_scrub	*sc)  in xchk_probe()  argument
142 if (xchk_should_terminate(sc, &error)) in xchk_probe()
152 struct xfs_scrub *sc) in xchk_fsgates_disable() argument
154 if (!(sc->flags & XCHK_FSGATES_ALL)) in xchk_fsgates_disable()
157 trace_xchk_fsgates_disable(sc, sc->flags & XCHK_FSGATES_ALL); in xchk_fsgates_disable()
159 if (sc->flags & XCHK_FSGATES_DRAIN) in xchk_fsgates_disable()
162 sc->flags &= ~XCHK_FSGATES_ALL; in xchk_fsgates_disable()
168 struct xfs_scrub *sc, in xchk_teardown() argument
171 xchk_ag_free(sc, &sc->sa); in xchk_teardown()
172 if (sc->tp) { in xchk_teardown()
173 if (error == 0 && (sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR)) in xchk_teardown()
174 error = xfs_trans_commit(sc->tp); in xchk_teardown()
176 xfs_trans_cancel(sc->tp); in xchk_teardown()
177 sc->tp = NULL; in xchk_teardown()
179 if (sc->ip) { in xchk_teardown()
180 if (sc->ilock_flags) in xchk_teardown()
181 xchk_iunlock(sc, sc->ilock_flags); in xchk_teardown()
182 xchk_irele(sc, sc->ip); in xchk_teardown()
183 sc->ip = NULL; in xchk_teardown()
185 if (sc->flags & XCHK_HAVE_FREEZE_PROT) { in xchk_teardown()
186 sc->flags &= ~XCHK_HAVE_FREEZE_PROT; in xchk_teardown()
187 mnt_drop_write_file(sc->file); in xchk_teardown()
189 if (sc->xfile) { in xchk_teardown()
190 xfile_destroy(sc->xfile); in xchk_teardown()
191 sc->xfile = NULL; in xchk_teardown()
193 if (sc->buf) { in xchk_teardown()
194 if (sc->buf_cleanup) in xchk_teardown()
195 sc->buf_cleanup(sc->buf); in xchk_teardown()
196 kvfree(sc->buf); in xchk_teardown()
197 sc->buf_cleanup = NULL; in xchk_teardown()
198 sc->buf = NULL; in xchk_teardown()
201 xchk_fsgates_disable(sc); in xchk_teardown()
441 static inline void xchk_postmortem(struct xfs_scrub *sc) in xchk_postmortem() argument
448 if ((sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR) && in xchk_postmortem()
449 (sc->sm->sm_flags & (XFS_SCRUB_OFLAG_CORRUPT | in xchk_postmortem()
451 xrep_failure(sc->mp); in xchk_postmortem()
454 static inline void xchk_postmortem(struct xfs_scrub *sc) in xchk_postmortem() argument
460 if (sc->sm->sm_flags & (XFS_SCRUB_OFLAG_CORRUPT | in xchk_postmortem()
462 xfs_alert_ratelimited(sc->mp, in xchk_postmortem()
474 struct xfs_scrub *sc; in xfs_scrub_metadata() local
499 sc = kzalloc(sizeof(struct xfs_scrub), XCHK_GFP_FLAGS); in xfs_scrub_metadata()
500 if (!sc) { in xfs_scrub_metadata()
505 sc->mp = mp; in xfs_scrub_metadata()
506 sc->file = file; in xfs_scrub_metadata()
507 sc->sm = sm; in xfs_scrub_metadata()
508 sc->ops = &meta_scrub_ops[sm->sm_type]; in xfs_scrub_metadata()
509 sc->sick_mask = xchk_health_mask_for_scrub_type(sm->sm_type); in xfs_scrub_metadata()
516 error = mnt_want_write_file(sc->file); in xfs_scrub_metadata()
520 sc->flags |= XCHK_HAVE_FREEZE_PROT; in xfs_scrub_metadata()
524 error = sc->ops->setup(sc); in xfs_scrub_metadata()
525 if (error == -EDEADLOCK && !(sc->flags & XCHK_TRY_HARDER)) in xfs_scrub_metadata()
527 if (error == -ECHRNG && !(sc->flags & XCHK_NEED_DRAIN)) in xfs_scrub_metadata()
534 error = sc->ops->scrub(sc); in xfs_scrub_metadata()
536 if (error == -EDEADLOCK && !(sc->flags & XCHK_TRY_HARDER)) in xfs_scrub_metadata()
538 if (error == -ECHRNG && !(sc->flags & XCHK_NEED_DRAIN)) in xfs_scrub_metadata()
543 xchk_update_health(sc); in xfs_scrub_metadata()
545 if ((sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR) && in xfs_scrub_metadata()
546 !(sc->flags & XREP_ALREADY_FIXED)) { in xfs_scrub_metadata()
547 bool needs_fix = xchk_needs_repair(sc->sm); in xfs_scrub_metadata()
550 if (sc->sm->sm_flags & XFS_SCRUB_IFLAG_FORCE_REBUILD) in xfs_scrub_metadata()
562 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED; in xfs_scrub_metadata()
570 error = xrep_attempt(sc, &run); in xfs_scrub_metadata()
577 error = xchk_teardown(sc, 0); in xfs_scrub_metadata()
587 xchk_postmortem(sc); in xfs_scrub_metadata()
589 error = xchk_teardown(sc, error); in xfs_scrub_metadata()
593 kfree(sc); in xfs_scrub_metadata()
602 error = xchk_teardown(sc, 0); in xfs_scrub_metadata()
605 sc->flags |= XCHK_NEED_DRAIN; in xfs_scrub_metadata()
614 error = xchk_teardown(sc, 0); in xfs_scrub_metadata()
617 sc->flags |= XCHK_TRY_HARDER; in xfs_scrub_metadata()