Lines Matching refs:sc

72 	struct xfs_scrub	*sc,
86 sc->ip ? sc->ip : XFS_I(file_inode(sc->file)),
87 sc->sm, *error);
95 trace_xchk_op_error(sc, agno, bno, *error, ret_ip);
101 sc->sm->sm_flags |= errflag;
105 trace_xchk_op_error(sc, agno, bno, *error, ret_ip);
113 struct xfs_scrub *sc,
118 return __xchk_process_error(sc, agno, bno, error,
124 struct xfs_scrub *sc,
129 return __xchk_process_error(sc, agno, bno, error,
136 struct xfs_scrub *sc,
149 trace_xchk_deadlock_retry(sc->ip, sc->sm, *error);
157 trace_xchk_file_op_error(sc, whichfork, offset, *error,
164 sc->sm->sm_flags |= errflag;
168 trace_xchk_file_op_error(sc, whichfork, offset, *error,
177 struct xfs_scrub *sc,
182 return __xchk_fblock_process_error(sc, whichfork, offset, error,
188 struct xfs_scrub *sc,
193 return __xchk_fblock_process_error(sc, whichfork, offset, error,
212 struct xfs_scrub *sc,
215 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
216 trace_xchk_block_preen(sc, xfs_buf_daddr(bp), __return_address);
226 struct xfs_scrub *sc,
229 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
230 trace_xchk_ino_preen(sc, ino, __return_address);
236 struct xfs_scrub *sc)
238 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
239 trace_xchk_fs_error(sc, 0, __return_address);
245 struct xfs_scrub *sc,
248 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
249 trace_xchk_block_error(sc, xfs_buf_daddr(bp), __return_address);
256 struct xfs_scrub *sc,
260 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
261 trace_xchk_qcheck_error(sc, dqtype, id, __return_address);
268 struct xfs_scrub *sc,
271 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
272 trace_xchk_block_error(sc, xfs_buf_daddr(bp), __return_address);
282 struct xfs_scrub *sc,
285 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
286 trace_xchk_ino_error(sc, ino, __return_address);
292 struct xfs_scrub *sc,
295 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
296 trace_xchk_ino_error(sc, ino, __return_address);
302 struct xfs_scrub *sc,
306 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
307 trace_xchk_fblock_error(sc, whichfork, offset, __return_address);
313 struct xfs_scrub *sc,
317 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
318 trace_xchk_fblock_error(sc, whichfork, offset, __return_address);
327 struct xfs_scrub *sc,
330 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING;
331 trace_xchk_ino_warning(sc, ino, __return_address);
337 struct xfs_scrub *sc,
341 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING;
342 trace_xchk_fblock_warning(sc, whichfork, offset, __return_address);
348 struct xfs_scrub *sc)
350 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_INCOMPLETE;
351 trace_xchk_incomplete(sc, __return_address);
392 struct xfs_scrub *sc,
418 struct xfs_scrub *sc,
422 if (sc->sm->sm_type != XFS_SCRUB_TYPE_AGF &&
423 sc->sm->sm_type != XFS_SCRUB_TYPE_AGFL &&
424 sc->sm->sm_type != XFS_SCRUB_TYPE_AGI)
431 if (sc->sm->sm_type == type)
445 struct xfs_scrub *sc,
450 error = xfs_ialloc_read_agi(sa->pag, sc->tp, 0, &sa->agi_bp);
451 if (error && want_ag_read_header_failure(sc, XFS_SCRUB_TYPE_AGI))
454 error = xfs_alloc_read_agf(sa->pag, sc->tp, 0, &sa->agf_bp);
455 if (error && want_ag_read_header_failure(sc, XFS_SCRUB_TYPE_AGF))
467 struct xfs_scrub *sc)
469 struct xchk_ag *sa = &sc->sa;
477 if (xchk_should_terminate(sc, &error))
480 error = xchk_perag_read_headers(sc, sa);
489 if (sc->ip)
519 xfs_trans_brelse(sc->tp, sa->agf_bp);
524 xfs_trans_brelse(sc->tp, sa->agi_bp);
528 if (!(sc->flags & XCHK_FSGATES_DRAIN))
545 struct xfs_scrub *sc,
549 struct xfs_mount *mp = sc->mp;
556 return xchk_perag_drain_and_lock(sc);
588 struct xfs_scrub *sc,
591 struct xfs_mount *mp = sc->mp;
595 sa->bno_cur = xfs_bnobt_init_cursor(mp, sc->tp, sa->agf_bp,
597 xchk_ag_btree_del_cursor_if_sick(sc, &sa->bno_cur,
601 sa->cnt_cur = xfs_cntbt_init_cursor(mp, sc->tp, sa->agf_bp,
603 xchk_ag_btree_del_cursor_if_sick(sc, &sa->cnt_cur,
608 sa->rmap_cur = xfs_rmapbt_init_cursor(mp, sc->tp,
610 xchk_ag_btree_del_cursor_if_sick(sc, &sa->rmap_cur,
616 sa->refc_cur = xfs_refcountbt_init_cursor(mp, sc->tp,
618 xchk_ag_btree_del_cursor_if_sick(sc, &sa->refc_cur,
625 sa->ino_cur = xfs_inobt_init_cursor(sa->pag, sc->tp,
627 xchk_ag_btree_del_cursor_if_sick(sc, &sa->ino_cur,
632 sa->fino_cur = xfs_finobt_init_cursor(sa->pag, sc->tp,
634 xchk_ag_btree_del_cursor_if_sick(sc, &sa->fino_cur,
643 struct xfs_scrub *sc,
647 xrep_reset_perag_resv(sc);
649 xfs_trans_brelse(sc->tp, sa->agf_bp);
653 xfs_trans_brelse(sc->tp, sa->agi_bp);
671 struct xfs_scrub *sc,
677 error = xchk_ag_read_headers(sc, agno, sa);
681 xchk_ag_btcur_init(sc, sa);
689 struct xfs_scrub *sc)
691 xfs_trans_cancel(sc->tp);
692 sc->tp = NULL;
697 struct xfs_scrub *sc)
699 return xfs_trans_alloc_empty(sc->mp, &sc->tp);
714 struct xfs_scrub *sc,
717 if (sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR)
718 return xfs_trans_alloc(sc->mp, &M_RES(sc->mp)->tr_itruncate,
719 resblks, 0, 0, &sc->tp);
721 return xchk_trans_alloc_empty(sc);
727 struct xfs_scrub *sc)
731 resblks = xrep_calc_ag_resblks(sc);
732 return xchk_trans_alloc(sc, resblks);
738 struct xfs_scrub *sc,
741 struct xfs_mount *mp = sc->mp;
756 error = xchk_setup_fs(sc);
760 return xchk_ag_init(sc, sc->sm->sm_agno, &sc->sa);
780 struct xfs_scrub *sc,
784 ASSERT(sc->tp != NULL);
786 return xfs_iget(sc->mp, sc->tp, inum, XCHK_IGET_FLAGS, 0, ipp);
807 struct xfs_scrub *sc,
812 struct xfs_mount *mp = sc->mp;
813 struct xfs_trans *tp = sc->tp;
817 ASSERT(sc->tp != NULL);
824 if (xchk_should_terminate(sc, &error))
877 struct xfs_scrub *sc)
879 ASSERT(sc->tp != NULL);
880 ASSERT(sc->ip != NULL);
882 if (!xchk_could_repair(sc))
885 return xrep_ino_dqattach(sc);
892 struct xfs_scrub *sc,
895 if (VFS_I(ip)->i_generation != sc->sm->sm_gen) {
896 xchk_irele(sc, ip);
900 sc->ip = ip;
911 struct xfs_scrub *sc,
915 xchk_ino_set_corrupt(sc, ip->i_ino);
919 sc->ip = ip;
932 struct xfs_scrub *sc)
935 struct xfs_mount *mp = sc->mp;
938 struct xfs_inode *ip_in = XFS_I(file_inode(sc->file));
940 xfs_agnumber_t agno = XFS_INO_TO_AGNO(mp, sc->sm->sm_ino);
943 ASSERT(sc->tp == NULL);
946 if (sc->sm->sm_ino == 0 || sc->sm->sm_ino == ip_in->i_ino)
947 return xchk_install_live_inode(sc, ip_in);
950 if (xfs_internal_inum(mp, sc->sm->sm_ino))
952 if (!xfs_verify_ino(sc->mp, sc->sm->sm_ino))
956 error = xchk_iget_safe(sc, sc->sm->sm_ino, &ip);
958 return xchk_install_handle_inode(sc, ip);
979 error = xchk_trans_alloc(sc, 0);
983 error = xchk_iget_agi(sc, sc->sm->sm_ino, &agi_bp, &ip);
986 xchk_trans_cancel(sc);
987 return xchk_install_handle_inode(sc, ip);
1017 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, sc->sm->sm_ino));
1023 error = xfs_imap(pag, sc->tp, sc->sm->sm_ino, &imap,
1032 xchk_trans_cancel(sc);
1034 trace_xchk_op_error(sc, agno, XFS_INO_TO_AGBNO(mp, sc->sm->sm_ino),
1039 xchk_trans_cancel(sc);
1046 struct xfs_scrub *sc,
1049 if (sc->tp) {
1077 struct xfs_scrub *sc,
1082 error = xchk_iget_for_scrubbing(sc);
1087 xchk_ilock(sc, XFS_IOLOCK_EXCL);
1089 error = xchk_trans_alloc(sc, resblks);
1093 error = xchk_ino_dqattach(sc);
1097 xchk_ilock(sc, XFS_ILOCK_EXCL);
1105 struct xfs_scrub *sc,
1108 xfs_ilock(sc->ip, ilock_flags);
1109 sc->ilock_flags |= ilock_flags;
1114 struct xfs_scrub *sc,
1117 if (xfs_ilock_nowait(sc->ip, ilock_flags)) {
1118 sc->ilock_flags |= ilock_flags;
1127 struct xfs_scrub *sc,
1130 sc->ilock_flags &= ~ilock_flags;
1131 xfs_iunlock(sc->ip, ilock_flags);
1141 struct xfs_scrub *sc,
1146 if (xchk_skip_xref(sc->sm))
1162 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XFAIL;
1163 trace_xchk_xref_error(sc, *error, __return_address);
1176 struct xfs_scrub *sc,
1182 xchk_block_set_corrupt(sc, bp);
1186 xchk_set_incomplete(sc);
1192 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
1193 trace_xchk_block_error(sc, xfs_buf_daddr(bp), fa);
1198 struct xfs_scrub *sc,
1204 sub = xchk_scrub_create_subord(sc, scrub_type);
1205 error = sub->sc.ops->scrub(&sub->sc);
1212 * pointed to by sc->ip and the ILOCK must be held.
1216 struct xfs_scrub *sc)
1221 if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
1225 error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_INODE);
1226 if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
1230 if (sc->ip->i_diflags & XFS_DIFLAG_REALTIME) {
1231 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1236 if (xfs_is_reflink_inode(sc->ip)) {
1237 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1242 if (xfs_inode_hasattr(sc->ip)) {
1243 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1248 error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTD);
1249 if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
1253 if (xfs_has_reflink(sc->mp)) {
1254 error = xfs_reflink_inode_has_shared_extents(sc->tp, sc->ip,
1256 if (!xchk_fblock_process_error(sc, XFS_DATA_FORK, 0,
1260 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1274 struct xfs_scrub *sc,
1278 ASSERT(!(sc->flags & scrub_fsgates));
1280 trace_xchk_fsgates_enable(sc, scrub_fsgates);
1294 sc->flags |= scrub_fsgates;
1315 struct xfs_scrub *sc,
1319 struct xfs_mount *mp = sc->mp;
1320 struct xfs_perag *pag = sc->sa.pag;
1332 if (sc->sa.agi_bp == NULL) {
1333 ASSERT(sc->sa.agi_bp != NULL);
1338 ino = XFS_AGINO_TO_INO(sc->mp, pag->pag_agno, agino);