10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0+ 2d25522f1SDarrick J. Wong /* 3d25522f1SDarrick J. Wong * Copyright (C) 2018 Oracle. All Rights Reserved. 4d25522f1SDarrick J. Wong * Author: Darrick J. Wong <darrick.wong@oracle.com> 5d25522f1SDarrick J. Wong */ 6d25522f1SDarrick J. Wong #include "xfs.h" 7d25522f1SDarrick J. Wong #include "xfs_fs.h" 8d25522f1SDarrick J. Wong #include "xfs_shared.h" 9d25522f1SDarrick J. Wong #include "xfs_format.h" 10d25522f1SDarrick J. Wong #include "xfs_trans_resv.h" 11d25522f1SDarrick J. Wong #include "xfs_mount.h" 12d25522f1SDarrick J. Wong #include "xfs_defer.h" 13d25522f1SDarrick J. Wong #include "xfs_btree.h" 14d25522f1SDarrick J. Wong #include "xfs_bit.h" 15d25522f1SDarrick J. Wong #include "xfs_log_format.h" 16d25522f1SDarrick J. Wong #include "xfs_trans.h" 17d25522f1SDarrick J. Wong #include "xfs_sb.h" 18d25522f1SDarrick J. Wong #include "xfs_inode.h" 19d25522f1SDarrick J. Wong #include "xfs_alloc.h" 20d25522f1SDarrick J. Wong #include "xfs_ialloc.h" 21d25522f1SDarrick J. Wong #include "xfs_rmap.h" 22d25522f1SDarrick J. Wong #include "scrub/xfs_scrub.h" 23d25522f1SDarrick J. Wong #include "scrub/scrub.h" 24d25522f1SDarrick J. Wong #include "scrub/common.h" 25d25522f1SDarrick J. Wong #include "scrub/trace.h" 26d25522f1SDarrick J. Wong 27d25522f1SDarrick J. Wong /* Superblock */ 28d25522f1SDarrick J. Wong 29d25522f1SDarrick J. Wong /* Repair the superblock. */ 30d25522f1SDarrick J. Wong int 31b5e2196eSDarrick J. Wong xrep_superblock( 32*1d8a748aSDarrick J. Wong struct xfs_scrub *sc) 33d25522f1SDarrick J. Wong { 34d25522f1SDarrick J. Wong struct xfs_mount *mp = sc->mp; 35d25522f1SDarrick J. Wong struct xfs_buf *bp; 36d25522f1SDarrick J. Wong xfs_agnumber_t agno; 37d25522f1SDarrick J. Wong int error; 38d25522f1SDarrick J. Wong 39d25522f1SDarrick J. Wong /* Don't try to repair AG 0's sb; let xfs_repair deal with it. */ 40d25522f1SDarrick J. Wong agno = sc->sm->sm_agno; 41d25522f1SDarrick J. Wong if (agno == 0) 42d25522f1SDarrick J. Wong return -EOPNOTSUPP; 43d25522f1SDarrick J. Wong 44d25522f1SDarrick J. Wong error = xfs_sb_get_secondary(mp, sc->tp, agno, &bp); 45d25522f1SDarrick J. Wong if (error) 46d25522f1SDarrick J. Wong return error; 47d25522f1SDarrick J. Wong 48d25522f1SDarrick J. Wong /* Copy AG 0's superblock to this one. */ 49d25522f1SDarrick J. Wong xfs_buf_zero(bp, 0, BBTOB(bp->b_length)); 50d25522f1SDarrick J. Wong xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb); 51d25522f1SDarrick J. Wong 52d25522f1SDarrick J. Wong /* Write this to disk. */ 53d25522f1SDarrick J. Wong xfs_trans_buf_set_type(sc->tp, bp, XFS_BLFT_SB_BUF); 54d25522f1SDarrick J. Wong xfs_trans_log_buf(sc->tp, bp, 0, BBTOB(bp->b_length) - 1); 55d25522f1SDarrick J. Wong return error; 56d25522f1SDarrick J. Wong } 57