Lines Matching refs:sc

67 	struct xfs_scrub	*sc,
81 sc->ip ? sc->ip : XFS_I(file_inode(sc->file)),
82 sc->sm, *error);
87 sc->sm->sm_flags |= errflag;
91 trace_xchk_op_error(sc, agno, bno, *error,
100 struct xfs_scrub *sc,
105 return __xchk_process_error(sc, agno, bno, error,
111 struct xfs_scrub *sc,
116 return __xchk_process_error(sc, agno, bno, error,
123 struct xfs_scrub *sc,
136 trace_xchk_deadlock_retry(sc->ip, sc->sm, *error);
141 sc->sm->sm_flags |= errflag;
145 trace_xchk_file_op_error(sc, whichfork, offset, *error,
154 struct xfs_scrub *sc,
159 return __xchk_fblock_process_error(sc, whichfork, offset, error,
165 struct xfs_scrub *sc,
170 return __xchk_fblock_process_error(sc, whichfork, offset, error,
189 struct xfs_scrub *sc,
192 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
193 trace_xchk_block_preen(sc, xfs_buf_daddr(bp), __return_address);
203 struct xfs_scrub *sc,
206 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
207 trace_xchk_ino_preen(sc, ino, __return_address);
213 struct xfs_scrub *sc)
215 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
216 trace_xchk_fs_error(sc, 0, __return_address);
222 struct xfs_scrub *sc,
225 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
226 trace_xchk_block_error(sc, xfs_buf_daddr(bp), __return_address);
232 struct xfs_scrub *sc,
235 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
236 trace_xchk_block_error(sc, xfs_buf_daddr(bp), __return_address);
246 struct xfs_scrub *sc,
249 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
250 trace_xchk_ino_error(sc, ino, __return_address);
256 struct xfs_scrub *sc,
259 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
260 trace_xchk_ino_error(sc, ino, __return_address);
266 struct xfs_scrub *sc,
270 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
271 trace_xchk_fblock_error(sc, whichfork, offset, __return_address);
277 struct xfs_scrub *sc,
281 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
282 trace_xchk_fblock_error(sc, whichfork, offset, __return_address);
291 struct xfs_scrub *sc,
294 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING;
295 trace_xchk_ino_warning(sc, ino, __return_address);
301 struct xfs_scrub *sc,
305 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING;
306 trace_xchk_fblock_warning(sc, whichfork, offset, __return_address);
312 struct xfs_scrub *sc)
314 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_INCOMPLETE;
315 trace_xchk_incomplete(sc, __return_address);
356 struct xfs_scrub *sc,
382 struct xfs_scrub *sc,
386 if (sc->sm->sm_type != XFS_SCRUB_TYPE_AGF &&
387 sc->sm->sm_type != XFS_SCRUB_TYPE_AGFL &&
388 sc->sm->sm_type != XFS_SCRUB_TYPE_AGI)
395 if (sc->sm->sm_type == type)
409 struct xfs_scrub *sc,
414 error = xfs_ialloc_read_agi(sa->pag, sc->tp, &sa->agi_bp);
415 if (error && want_ag_read_header_failure(sc, XFS_SCRUB_TYPE_AGI))
418 error = xfs_alloc_read_agf(sa->pag, sc->tp, 0, &sa->agf_bp);
419 if (error && want_ag_read_header_failure(sc, XFS_SCRUB_TYPE_AGF))
431 struct xfs_scrub *sc)
433 struct xchk_ag *sa = &sc->sa;
441 if (xchk_should_terminate(sc, &error))
444 error = xchk_perag_read_headers(sc, sa);
453 if (sc->ip)
483 xfs_trans_brelse(sc->tp, sa->agf_bp);
488 xfs_trans_brelse(sc->tp, sa->agi_bp);
492 if (!(sc->flags & XCHK_FSGATES_DRAIN))
509 struct xfs_scrub *sc,
513 struct xfs_mount *mp = sc->mp;
520 return xchk_perag_drain_and_lock(sc);
552 struct xfs_scrub *sc,
555 struct xfs_mount *mp = sc->mp;
558 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_BNO)) {
560 sa->bno_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
565 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_CNT)) {
567 sa->cnt_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
573 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_INO)) {
574 sa->ino_cur = xfs_inobt_init_cursor(sa->pag, sc->tp, sa->agi_bp,
580 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_FINO)) {
581 sa->fino_cur = xfs_inobt_init_cursor(sa->pag, sc->tp, sa->agi_bp,
587 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_RMAP)) {
588 sa->rmap_cur = xfs_rmapbt_init_cursor(mp, sc->tp, sa->agf_bp,
594 xchk_ag_btree_healthy_enough(sc, sa->pag, XFS_BTNUM_REFC)) {
595 sa->refc_cur = xfs_refcountbt_init_cursor(mp, sc->tp,
603 struct xfs_scrub *sc,
608 xfs_trans_brelse(sc->tp, sa->agf_bp);
612 xfs_trans_brelse(sc->tp, sa->agi_bp);
630 struct xfs_scrub *sc,
636 error = xchk_ag_read_headers(sc, agno, sa);
640 xchk_ag_btcur_init(sc, sa);
648 struct xfs_scrub *sc)
650 xfs_trans_cancel(sc->tp);
651 sc->tp = NULL;
666 struct xfs_scrub *sc,
669 if (sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR)
670 return xfs_trans_alloc(sc->mp, &M_RES(sc->mp)->tr_itruncate,
671 resblks, 0, 0, &sc->tp);
673 return xfs_trans_alloc_empty(sc->mp, &sc->tp);
679 struct xfs_scrub *sc)
683 resblks = xrep_calc_ag_resblks(sc);
684 return xchk_trans_alloc(sc, resblks);
690 struct xfs_scrub *sc,
693 struct xfs_mount *mp = sc->mp;
708 error = xchk_setup_fs(sc);
712 return xchk_ag_init(sc, sc->sm->sm_agno, &sc->sa);
732 struct xfs_scrub *sc,
736 return xfs_iget(sc->mp, sc->tp, inum, XFS_IGET_UNTRUSTED, 0, ipp);
757 struct xfs_scrub *sc,
762 struct xfs_mount *mp = sc->mp;
763 struct xfs_trans *tp = sc->tp;
767 ASSERT(sc->tp != NULL);
774 if (xchk_should_terminate(sc, &error))
822 struct xfs_scrub *sc,
825 if (VFS_I(ip)->i_generation != sc->sm->sm_gen) {
826 xchk_irele(sc, ip);
830 sc->ip = ip;
841 struct xfs_scrub *sc,
845 xchk_ino_set_corrupt(sc, ip->i_ino);
849 sc->ip = ip;
862 struct xfs_scrub *sc)
865 struct xfs_mount *mp = sc->mp;
868 struct xfs_inode *ip_in = XFS_I(file_inode(sc->file));
870 xfs_agnumber_t agno = XFS_INO_TO_AGNO(mp, sc->sm->sm_ino);
873 ASSERT(sc->tp == NULL);
876 if (sc->sm->sm_ino == 0 || sc->sm->sm_ino == ip_in->i_ino)
877 return xchk_install_live_inode(sc, ip_in);
880 if (xfs_internal_inum(mp, sc->sm->sm_ino))
882 if (!xfs_verify_ino(sc->mp, sc->sm->sm_ino))
886 error = xchk_iget(sc, sc->sm->sm_ino, &ip);
888 return xchk_install_handle_inode(sc, ip);
909 error = xchk_trans_alloc(sc, 0);
913 error = xchk_iget_agi(sc, sc->sm->sm_ino, &agi_bp, &ip);
916 xchk_trans_cancel(sc);
917 return xchk_install_handle_inode(sc, ip);
947 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, sc->sm->sm_ino));
953 error = xfs_imap(pag, sc->tp, sc->sm->sm_ino, &imap,
962 xchk_trans_cancel(sc);
964 trace_xchk_op_error(sc, agno, XFS_INO_TO_AGBNO(mp, sc->sm->sm_ino),
969 xchk_trans_cancel(sc);
976 struct xfs_scrub *sc,
980 ASSERT(current->journal_info == sc->tp);
1015 struct xfs_scrub *sc,
1020 error = xchk_iget_for_scrubbing(sc);
1025 xchk_ilock(sc, XFS_IOLOCK_EXCL);
1027 error = xchk_trans_alloc(sc, resblks);
1030 xchk_ilock(sc, XFS_ILOCK_EXCL);
1038 struct xfs_scrub *sc,
1041 xfs_ilock(sc->ip, ilock_flags);
1042 sc->ilock_flags |= ilock_flags;
1047 struct xfs_scrub *sc,
1050 if (xfs_ilock_nowait(sc->ip, ilock_flags)) {
1051 sc->ilock_flags |= ilock_flags;
1060 struct xfs_scrub *sc,
1063 sc->ilock_flags &= ~ilock_flags;
1064 xfs_iunlock(sc->ip, ilock_flags);
1074 struct xfs_scrub *sc,
1079 if (xchk_skip_xref(sc->sm))
1095 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XFAIL;
1096 trace_xchk_xref_error(sc, *error, __return_address);
1109 struct xfs_scrub *sc,
1115 xchk_block_set_corrupt(sc, bp);
1119 xchk_set_incomplete(sc);
1125 sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
1126 trace_xchk_block_error(sc, xfs_buf_daddr(bp), fa);
1131 struct xfs_scrub *sc,
1134 __u32 smtype = sc->sm->sm_type;
1137 sc->sm->sm_type = scrub_type;
1141 error = xchk_inode(sc);
1144 error = xchk_bmap_data(sc);
1152 sc->sm->sm_type = smtype;
1158 * pointed to by sc->ip and the ILOCK must be held.
1162 struct xfs_scrub *sc)
1167 if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
1171 error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_INODE);
1172 if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
1176 if (sc->ip->i_diflags & XFS_DIFLAG_REALTIME) {
1177 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1182 if (xfs_is_reflink_inode(sc->ip)) {
1183 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1188 if (xfs_inode_hasattr(sc->ip)) {
1189 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1194 error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTD);
1195 if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
1199 if (xfs_has_reflink(sc->mp)) {
1200 error = xfs_reflink_inode_has_shared_extents(sc->tp, sc->ip,
1202 if (!xchk_fblock_process_error(sc, XFS_DATA_FORK, 0,
1206 xchk_ino_set_corrupt(sc, sc->ip->i_ino);
1220 struct xfs_scrub *sc,
1224 ASSERT(!(sc->flags & scrub_fsgates));
1226 trace_xchk_fsgates_enable(sc, scrub_fsgates);
1231 sc->flags |= scrub_fsgates;
1252 struct xfs_scrub *sc,
1256 struct xfs_mount *mp = sc->mp;
1257 struct xfs_perag *pag = sc->sa.pag;
1269 if (sc->sa.agi_bp == NULL) {
1270 ASSERT(sc->sa.agi_bp != NULL);
1275 ino = XFS_AGINO_TO_INO(sc->mp, pag->pag_agno, agino);