Loading fs/xfs/libxfs/xfs_bmap.c +1 −4 Original line number Diff line number Diff line Loading @@ -477,10 +477,7 @@ xfs_bmap_check_leaf_extents( } block = XFS_BUF_TO_BLOCK(bp); } if (bp_release) { bp_release = 0; xfs_trans_brelse(NULL, bp); } return; error0: Loading fs/xfs/libxfs/xfs_ialloc.c +2 −2 Original line number Diff line number Diff line Loading @@ -2403,8 +2403,8 @@ xfs_ialloc_compute_maxlevels( maxleafents = (1LL << XFS_INO_AGINO_BITS(mp)) >> XFS_INODES_PER_CHUNK_LOG; minleafrecs = mp->m_alloc_mnr[0]; minnoderecs = mp->m_alloc_mnr[1]; minleafrecs = mp->m_inobt_mnr[0]; minnoderecs = mp->m_inobt_mnr[1]; maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs; for (level = 1; maxblocks > 1; level++) maxblocks = (maxblocks + minnoderecs - 1) / minnoderecs; Loading fs/xfs/xfs_log.c +68 −64 Original line number Diff line number Diff line Loading @@ -2008,77 +2008,81 @@ xlog_print_tic_res( uint ophdr_spc = ticket->t_res_num_ophdrs * (uint)sizeof(xlog_op_header_t); /* match with XLOG_REG_TYPE_* in xfs_log.h */ static char *res_type_str[XLOG_REG_TYPE_MAX] = { "bformat", "bchunk", "efi_format", "efd_format", "iformat", "icore", "iext", "ibroot", "ilocal", "iattr_ext", "iattr_broot", "iattr_local", "qformat", "dquot", "quotaoff", "LR header", "unmount", "commit", "trans header" #define REG_TYPE_STR(type, str) [XLOG_REG_TYPE_##type] = str static char *res_type_str[XLOG_REG_TYPE_MAX + 1] = { REG_TYPE_STR(BFORMAT, "bformat"), REG_TYPE_STR(BCHUNK, "bchunk"), REG_TYPE_STR(EFI_FORMAT, "efi_format"), REG_TYPE_STR(EFD_FORMAT, "efd_format"), REG_TYPE_STR(IFORMAT, "iformat"), REG_TYPE_STR(ICORE, "icore"), REG_TYPE_STR(IEXT, "iext"), REG_TYPE_STR(IBROOT, "ibroot"), REG_TYPE_STR(ILOCAL, "ilocal"), REG_TYPE_STR(IATTR_EXT, "iattr_ext"), REG_TYPE_STR(IATTR_BROOT, "iattr_broot"), REG_TYPE_STR(IATTR_LOCAL, "iattr_local"), REG_TYPE_STR(QFORMAT, "qformat"), REG_TYPE_STR(DQUOT, "dquot"), REG_TYPE_STR(QUOTAOFF, "quotaoff"), REG_TYPE_STR(LRHEADER, "LR header"), REG_TYPE_STR(UNMOUNT, "unmount"), REG_TYPE_STR(COMMIT, "commit"), REG_TYPE_STR(TRANSHDR, "trans header"), REG_TYPE_STR(ICREATE, "inode create") }; #undef REG_TYPE_STR #define TRANS_TYPE_STR(type) [XFS_TRANS_##type] = #type static char *trans_type_str[XFS_TRANS_TYPE_MAX] = { "SETATTR_NOT_SIZE", "SETATTR_SIZE", "INACTIVE", "CREATE", "CREATE_TRUNC", "TRUNCATE_FILE", "REMOVE", "LINK", "RENAME", "MKDIR", "RMDIR", "SYMLINK", "SET_DMATTRS", "GROWFS", "STRAT_WRITE", "DIOSTRAT", "WRITE_SYNC", "WRITEID", "ADDAFORK", "ATTRINVAL", "ATRUNCATE", "ATTR_SET", "ATTR_RM", "ATTR_FLAG", "CLEAR_AGI_BUCKET", "QM_SBCHANGE", "DUMMY1", "DUMMY2", "QM_QUOTAOFF", "QM_DQALLOC", "QM_SETQLIM", "QM_DQCLUSTER", "QM_QINOCREATE", "QM_QUOTAOFF_END", "FSYNC_TS", "GROWFSRT_ALLOC", "GROWFSRT_ZERO", "GROWFSRT_FREE", "SWAPEXT", "CHECKPOINT", "ICREATE", "CREATE_TMPFILE" TRANS_TYPE_STR(SETATTR_NOT_SIZE), TRANS_TYPE_STR(SETATTR_SIZE), TRANS_TYPE_STR(INACTIVE), TRANS_TYPE_STR(CREATE), TRANS_TYPE_STR(CREATE_TRUNC), TRANS_TYPE_STR(TRUNCATE_FILE), TRANS_TYPE_STR(REMOVE), TRANS_TYPE_STR(LINK), TRANS_TYPE_STR(RENAME), TRANS_TYPE_STR(MKDIR), TRANS_TYPE_STR(RMDIR), TRANS_TYPE_STR(SYMLINK), TRANS_TYPE_STR(SET_DMATTRS), TRANS_TYPE_STR(GROWFS), TRANS_TYPE_STR(STRAT_WRITE), TRANS_TYPE_STR(DIOSTRAT), TRANS_TYPE_STR(WRITEID), TRANS_TYPE_STR(ADDAFORK), TRANS_TYPE_STR(ATTRINVAL), TRANS_TYPE_STR(ATRUNCATE), TRANS_TYPE_STR(ATTR_SET), TRANS_TYPE_STR(ATTR_RM), TRANS_TYPE_STR(ATTR_FLAG), TRANS_TYPE_STR(CLEAR_AGI_BUCKET), TRANS_TYPE_STR(SB_CHANGE), TRANS_TYPE_STR(DUMMY1), TRANS_TYPE_STR(DUMMY2), TRANS_TYPE_STR(QM_QUOTAOFF), TRANS_TYPE_STR(QM_DQALLOC), TRANS_TYPE_STR(QM_SETQLIM), TRANS_TYPE_STR(QM_DQCLUSTER), TRANS_TYPE_STR(QM_QINOCREATE), TRANS_TYPE_STR(QM_QUOTAOFF_END), TRANS_TYPE_STR(FSYNC_TS), TRANS_TYPE_STR(GROWFSRT_ALLOC), TRANS_TYPE_STR(GROWFSRT_ZERO), TRANS_TYPE_STR(GROWFSRT_FREE), TRANS_TYPE_STR(SWAPEXT), TRANS_TYPE_STR(CHECKPOINT), TRANS_TYPE_STR(ICREATE), TRANS_TYPE_STR(CREATE_TMPFILE) }; #undef TRANS_TYPE_STR xfs_warn(mp, "xlog_write: reservation summary:"); xfs_warn(mp, " trans type = %s (%u)", ((ticket->t_trans_type <= 0 || ticket->t_trans_type > XFS_TRANS_TYPE_MAX) ? "bad-trans-type" : trans_type_str[ticket->t_trans_type-1]), "bad-trans-type" : trans_type_str[ticket->t_trans_type]), ticket->t_trans_type); xfs_warn(mp, " unit res = %d bytes", ticket->t_unit_res); Loading @@ -2097,7 +2101,7 @@ xlog_print_tic_res( uint r_type = ticket->t_res_arr[i].r_type; xfs_warn(mp, "region[%u]: %s - %u bytes", i, ((r_type <= 0 || r_type > XLOG_REG_TYPE_MAX) ? "bad-rtype" : res_type_str[r_type-1]), "bad-rtype" : res_type_str[r_type]), ticket->t_res_arr[i].r_len); } Loading fs/xfs/xfs_log_recover.c +13 −9 Original line number Diff line number Diff line Loading @@ -4963,6 +4963,7 @@ xlog_do_recover( xfs_daddr_t head_blk, xfs_daddr_t tail_blk) { struct xfs_mount *mp = log->l_mp; int error; xfs_buf_t *bp; xfs_sb_t *sbp; Loading @@ -4977,7 +4978,7 @@ xlog_do_recover( /* * If IO errors happened during recovery, bail out. */ if (XFS_FORCED_SHUTDOWN(log->l_mp)) { if (XFS_FORCED_SHUTDOWN(mp)) { return -EIO; } Loading @@ -4990,13 +4991,13 @@ xlog_do_recover( * or iunlinks they will have some entries in the AIL; so we look at * the AIL to determine how to set the tail_lsn. */ xlog_assign_tail_lsn(log->l_mp); xlog_assign_tail_lsn(mp); /* * Now that we've finished replaying all buffer and inode * updates, re-read in the superblock and reverify it. */ bp = xfs_getsb(log->l_mp, 0); bp = xfs_getsb(mp, 0); bp->b_flags &= ~(XBF_DONE | XBF_ASYNC); ASSERT(!(bp->b_flags & XBF_WRITE)); bp->b_flags |= XBF_READ; Loading @@ -5004,7 +5005,7 @@ xlog_do_recover( error = xfs_buf_submit_wait(bp); if (error) { if (!XFS_FORCED_SHUTDOWN(log->l_mp)) { if (!XFS_FORCED_SHUTDOWN(mp)) { xfs_buf_ioerror_alert(bp, __func__); ASSERT(0); } Loading @@ -5013,14 +5014,17 @@ xlog_do_recover( } /* Convert superblock from on-disk format */ sbp = &log->l_mp->m_sb; sbp = &mp->m_sb; xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp)); ASSERT(sbp->sb_magicnum == XFS_SB_MAGIC); ASSERT(xfs_sb_good_version(sbp)); xfs_reinit_percpu_counters(log->l_mp); xfs_buf_relse(bp); /* re-initialise in-core superblock and geometry structures */ xfs_reinit_percpu_counters(mp); error = xfs_initialize_perag(mp, sbp->sb_agcount, &mp->m_maxagi); if (error) { xfs_warn(mp, "Failed post-recovery per-ag init: %d", error); return error; } xlog_recover_check_summary(log); Loading fs/xfs/xfs_ondisk.h 0 → 100644 +117 −0 Original line number Diff line number Diff line /* * Copyright (c) 2016 Oracle. * All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __XFS_ONDISK_H #define __XFS_ONDISK_H #define XFS_CHECK_STRUCT_SIZE(structname, size) \ BUILD_BUG_ON_MSG(sizeof(structname) != (size), "XFS: sizeof(" \ #structname ") is wrong, expected " #size) static inline void __init xfs_check_ondisk_structs(void) { /* ag/file structures */ XFS_CHECK_STRUCT_SIZE(struct xfs_acl, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_acl_entry, 12); XFS_CHECK_STRUCT_SIZE(struct xfs_agf, 224); XFS_CHECK_STRUCT_SIZE(struct xfs_agfl, 36); XFS_CHECK_STRUCT_SIZE(struct xfs_agi, 336); XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8); XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72); XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176); XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104); XFS_CHECK_STRUCT_SIZE(struct xfs_dqblk, 136); XFS_CHECK_STRUCT_SIZE(struct xfs_dsb, 264); XFS_CHECK_STRUCT_SIZE(struct xfs_dsymlink_hdr, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_inobt_key, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_inobt_rec, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_timestamp, 8); XFS_CHECK_STRUCT_SIZE(xfs_alloc_key_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_alloc_ptr_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_alloc_rec_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_inobt_ptr_t, 4); /* dir/attr trees */ XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_leaf_hdr, 80); XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_leafblock, 88); XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_rmt_hdr, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_blkinfo, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_intnode, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_node_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_blk_hdr, 48); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_data_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_free, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_free_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_leaf, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_leaf_hdr, 64); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_hdr_t, 32); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_map_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_local_t, 4); /* * m68k has problems with xfs_attr_leaf_name_remote_t, but we pad it to * 4 bytes anyway so it's not obviously a problem. Hence for the moment * we don't check this structure. This can be re-instated when the attr * definitions are updated to use c99 VLA definitions. * XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_remote_t, 12); */ XFS_CHECK_STRUCT_SIZE(xfs_attr_leafblock_t, 40); XFS_CHECK_STRUCT_SIZE(xfs_attr_shortform_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_da_blkinfo_t, 12); XFS_CHECK_STRUCT_SIZE(xfs_da_intnode_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_da_node_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_da_node_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_free_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_unused_t, 6); XFS_CHECK_STRUCT_SIZE(xfs_dir2_free_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_free_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_ino4_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_ino8_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_inou_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_tail_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_entry_t, 3); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_hdr_t, 10); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_off_t, 2); /* log structures */ XFS_CHECK_STRUCT_SIZE(struct xfs_dq_logformat, 24); XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_32, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_64, 32); XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_32, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_64, 32); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_32, 12); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode, 176); XFS_CHECK_STRUCT_SIZE(struct xfs_icreate_log, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_ictimestamp, 8); XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_32, 52); XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_64, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat, 20); XFS_CHECK_STRUCT_SIZE(struct xfs_trans_header, 16); } #endif /* __XFS_ONDISK_H */ Loading
fs/xfs/libxfs/xfs_bmap.c +1 −4 Original line number Diff line number Diff line Loading @@ -477,10 +477,7 @@ xfs_bmap_check_leaf_extents( } block = XFS_BUF_TO_BLOCK(bp); } if (bp_release) { bp_release = 0; xfs_trans_brelse(NULL, bp); } return; error0: Loading
fs/xfs/libxfs/xfs_ialloc.c +2 −2 Original line number Diff line number Diff line Loading @@ -2403,8 +2403,8 @@ xfs_ialloc_compute_maxlevels( maxleafents = (1LL << XFS_INO_AGINO_BITS(mp)) >> XFS_INODES_PER_CHUNK_LOG; minleafrecs = mp->m_alloc_mnr[0]; minnoderecs = mp->m_alloc_mnr[1]; minleafrecs = mp->m_inobt_mnr[0]; minnoderecs = mp->m_inobt_mnr[1]; maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs; for (level = 1; maxblocks > 1; level++) maxblocks = (maxblocks + minnoderecs - 1) / minnoderecs; Loading
fs/xfs/xfs_log.c +68 −64 Original line number Diff line number Diff line Loading @@ -2008,77 +2008,81 @@ xlog_print_tic_res( uint ophdr_spc = ticket->t_res_num_ophdrs * (uint)sizeof(xlog_op_header_t); /* match with XLOG_REG_TYPE_* in xfs_log.h */ static char *res_type_str[XLOG_REG_TYPE_MAX] = { "bformat", "bchunk", "efi_format", "efd_format", "iformat", "icore", "iext", "ibroot", "ilocal", "iattr_ext", "iattr_broot", "iattr_local", "qformat", "dquot", "quotaoff", "LR header", "unmount", "commit", "trans header" #define REG_TYPE_STR(type, str) [XLOG_REG_TYPE_##type] = str static char *res_type_str[XLOG_REG_TYPE_MAX + 1] = { REG_TYPE_STR(BFORMAT, "bformat"), REG_TYPE_STR(BCHUNK, "bchunk"), REG_TYPE_STR(EFI_FORMAT, "efi_format"), REG_TYPE_STR(EFD_FORMAT, "efd_format"), REG_TYPE_STR(IFORMAT, "iformat"), REG_TYPE_STR(ICORE, "icore"), REG_TYPE_STR(IEXT, "iext"), REG_TYPE_STR(IBROOT, "ibroot"), REG_TYPE_STR(ILOCAL, "ilocal"), REG_TYPE_STR(IATTR_EXT, "iattr_ext"), REG_TYPE_STR(IATTR_BROOT, "iattr_broot"), REG_TYPE_STR(IATTR_LOCAL, "iattr_local"), REG_TYPE_STR(QFORMAT, "qformat"), REG_TYPE_STR(DQUOT, "dquot"), REG_TYPE_STR(QUOTAOFF, "quotaoff"), REG_TYPE_STR(LRHEADER, "LR header"), REG_TYPE_STR(UNMOUNT, "unmount"), REG_TYPE_STR(COMMIT, "commit"), REG_TYPE_STR(TRANSHDR, "trans header"), REG_TYPE_STR(ICREATE, "inode create") }; #undef REG_TYPE_STR #define TRANS_TYPE_STR(type) [XFS_TRANS_##type] = #type static char *trans_type_str[XFS_TRANS_TYPE_MAX] = { "SETATTR_NOT_SIZE", "SETATTR_SIZE", "INACTIVE", "CREATE", "CREATE_TRUNC", "TRUNCATE_FILE", "REMOVE", "LINK", "RENAME", "MKDIR", "RMDIR", "SYMLINK", "SET_DMATTRS", "GROWFS", "STRAT_WRITE", "DIOSTRAT", "WRITE_SYNC", "WRITEID", "ADDAFORK", "ATTRINVAL", "ATRUNCATE", "ATTR_SET", "ATTR_RM", "ATTR_FLAG", "CLEAR_AGI_BUCKET", "QM_SBCHANGE", "DUMMY1", "DUMMY2", "QM_QUOTAOFF", "QM_DQALLOC", "QM_SETQLIM", "QM_DQCLUSTER", "QM_QINOCREATE", "QM_QUOTAOFF_END", "FSYNC_TS", "GROWFSRT_ALLOC", "GROWFSRT_ZERO", "GROWFSRT_FREE", "SWAPEXT", "CHECKPOINT", "ICREATE", "CREATE_TMPFILE" TRANS_TYPE_STR(SETATTR_NOT_SIZE), TRANS_TYPE_STR(SETATTR_SIZE), TRANS_TYPE_STR(INACTIVE), TRANS_TYPE_STR(CREATE), TRANS_TYPE_STR(CREATE_TRUNC), TRANS_TYPE_STR(TRUNCATE_FILE), TRANS_TYPE_STR(REMOVE), TRANS_TYPE_STR(LINK), TRANS_TYPE_STR(RENAME), TRANS_TYPE_STR(MKDIR), TRANS_TYPE_STR(RMDIR), TRANS_TYPE_STR(SYMLINK), TRANS_TYPE_STR(SET_DMATTRS), TRANS_TYPE_STR(GROWFS), TRANS_TYPE_STR(STRAT_WRITE), TRANS_TYPE_STR(DIOSTRAT), TRANS_TYPE_STR(WRITEID), TRANS_TYPE_STR(ADDAFORK), TRANS_TYPE_STR(ATTRINVAL), TRANS_TYPE_STR(ATRUNCATE), TRANS_TYPE_STR(ATTR_SET), TRANS_TYPE_STR(ATTR_RM), TRANS_TYPE_STR(ATTR_FLAG), TRANS_TYPE_STR(CLEAR_AGI_BUCKET), TRANS_TYPE_STR(SB_CHANGE), TRANS_TYPE_STR(DUMMY1), TRANS_TYPE_STR(DUMMY2), TRANS_TYPE_STR(QM_QUOTAOFF), TRANS_TYPE_STR(QM_DQALLOC), TRANS_TYPE_STR(QM_SETQLIM), TRANS_TYPE_STR(QM_DQCLUSTER), TRANS_TYPE_STR(QM_QINOCREATE), TRANS_TYPE_STR(QM_QUOTAOFF_END), TRANS_TYPE_STR(FSYNC_TS), TRANS_TYPE_STR(GROWFSRT_ALLOC), TRANS_TYPE_STR(GROWFSRT_ZERO), TRANS_TYPE_STR(GROWFSRT_FREE), TRANS_TYPE_STR(SWAPEXT), TRANS_TYPE_STR(CHECKPOINT), TRANS_TYPE_STR(ICREATE), TRANS_TYPE_STR(CREATE_TMPFILE) }; #undef TRANS_TYPE_STR xfs_warn(mp, "xlog_write: reservation summary:"); xfs_warn(mp, " trans type = %s (%u)", ((ticket->t_trans_type <= 0 || ticket->t_trans_type > XFS_TRANS_TYPE_MAX) ? "bad-trans-type" : trans_type_str[ticket->t_trans_type-1]), "bad-trans-type" : trans_type_str[ticket->t_trans_type]), ticket->t_trans_type); xfs_warn(mp, " unit res = %d bytes", ticket->t_unit_res); Loading @@ -2097,7 +2101,7 @@ xlog_print_tic_res( uint r_type = ticket->t_res_arr[i].r_type; xfs_warn(mp, "region[%u]: %s - %u bytes", i, ((r_type <= 0 || r_type > XLOG_REG_TYPE_MAX) ? "bad-rtype" : res_type_str[r_type-1]), "bad-rtype" : res_type_str[r_type]), ticket->t_res_arr[i].r_len); } Loading
fs/xfs/xfs_log_recover.c +13 −9 Original line number Diff line number Diff line Loading @@ -4963,6 +4963,7 @@ xlog_do_recover( xfs_daddr_t head_blk, xfs_daddr_t tail_blk) { struct xfs_mount *mp = log->l_mp; int error; xfs_buf_t *bp; xfs_sb_t *sbp; Loading @@ -4977,7 +4978,7 @@ xlog_do_recover( /* * If IO errors happened during recovery, bail out. */ if (XFS_FORCED_SHUTDOWN(log->l_mp)) { if (XFS_FORCED_SHUTDOWN(mp)) { return -EIO; } Loading @@ -4990,13 +4991,13 @@ xlog_do_recover( * or iunlinks they will have some entries in the AIL; so we look at * the AIL to determine how to set the tail_lsn. */ xlog_assign_tail_lsn(log->l_mp); xlog_assign_tail_lsn(mp); /* * Now that we've finished replaying all buffer and inode * updates, re-read in the superblock and reverify it. */ bp = xfs_getsb(log->l_mp, 0); bp = xfs_getsb(mp, 0); bp->b_flags &= ~(XBF_DONE | XBF_ASYNC); ASSERT(!(bp->b_flags & XBF_WRITE)); bp->b_flags |= XBF_READ; Loading @@ -5004,7 +5005,7 @@ xlog_do_recover( error = xfs_buf_submit_wait(bp); if (error) { if (!XFS_FORCED_SHUTDOWN(log->l_mp)) { if (!XFS_FORCED_SHUTDOWN(mp)) { xfs_buf_ioerror_alert(bp, __func__); ASSERT(0); } Loading @@ -5013,14 +5014,17 @@ xlog_do_recover( } /* Convert superblock from on-disk format */ sbp = &log->l_mp->m_sb; sbp = &mp->m_sb; xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp)); ASSERT(sbp->sb_magicnum == XFS_SB_MAGIC); ASSERT(xfs_sb_good_version(sbp)); xfs_reinit_percpu_counters(log->l_mp); xfs_buf_relse(bp); /* re-initialise in-core superblock and geometry structures */ xfs_reinit_percpu_counters(mp); error = xfs_initialize_perag(mp, sbp->sb_agcount, &mp->m_maxagi); if (error) { xfs_warn(mp, "Failed post-recovery per-ag init: %d", error); return error; } xlog_recover_check_summary(log); Loading
fs/xfs/xfs_ondisk.h 0 → 100644 +117 −0 Original line number Diff line number Diff line /* * Copyright (c) 2016 Oracle. * All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __XFS_ONDISK_H #define __XFS_ONDISK_H #define XFS_CHECK_STRUCT_SIZE(structname, size) \ BUILD_BUG_ON_MSG(sizeof(structname) != (size), "XFS: sizeof(" \ #structname ") is wrong, expected " #size) static inline void __init xfs_check_ondisk_structs(void) { /* ag/file structures */ XFS_CHECK_STRUCT_SIZE(struct xfs_acl, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_acl_entry, 12); XFS_CHECK_STRUCT_SIZE(struct xfs_agf, 224); XFS_CHECK_STRUCT_SIZE(struct xfs_agfl, 36); XFS_CHECK_STRUCT_SIZE(struct xfs_agi, 336); XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8); XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72); XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176); XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104); XFS_CHECK_STRUCT_SIZE(struct xfs_dqblk, 136); XFS_CHECK_STRUCT_SIZE(struct xfs_dsb, 264); XFS_CHECK_STRUCT_SIZE(struct xfs_dsymlink_hdr, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_inobt_key, 4); XFS_CHECK_STRUCT_SIZE(struct xfs_inobt_rec, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_timestamp, 8); XFS_CHECK_STRUCT_SIZE(xfs_alloc_key_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_alloc_ptr_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_alloc_rec_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_inobt_ptr_t, 4); /* dir/attr trees */ XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_leaf_hdr, 80); XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_leafblock, 88); XFS_CHECK_STRUCT_SIZE(struct xfs_attr3_rmt_hdr, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_blkinfo, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_intnode, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_da3_node_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_blk_hdr, 48); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_data_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_free, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_free_hdr, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_leaf, 64); XFS_CHECK_STRUCT_SIZE(struct xfs_dir3_leaf_hdr, 64); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_hdr_t, 32); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_map_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_local_t, 4); /* * m68k has problems with xfs_attr_leaf_name_remote_t, but we pad it to * 4 bytes anyway so it's not obviously a problem. Hence for the moment * we don't check this structure. This can be re-instated when the attr * definitions are updated to use c99 VLA definitions. * XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_remote_t, 12); */ XFS_CHECK_STRUCT_SIZE(xfs_attr_leafblock_t, 40); XFS_CHECK_STRUCT_SIZE(xfs_attr_shortform_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_da_blkinfo_t, 12); XFS_CHECK_STRUCT_SIZE(xfs_da_intnode_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_da_node_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_da_node_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_free_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_data_unused_t, 6); XFS_CHECK_STRUCT_SIZE(xfs_dir2_free_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_free_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_ino4_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_ino8_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_inou_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_entry_t, 8); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_hdr_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_t, 16); XFS_CHECK_STRUCT_SIZE(xfs_dir2_leaf_tail_t, 4); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_entry_t, 3); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_hdr_t, 10); XFS_CHECK_STRUCT_SIZE(xfs_dir2_sf_off_t, 2); /* log structures */ XFS_CHECK_STRUCT_SIZE(struct xfs_dq_logformat, 24); XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_32, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_64, 32); XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_32, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_64, 32); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_32, 12); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode, 176); XFS_CHECK_STRUCT_SIZE(struct xfs_icreate_log, 28); XFS_CHECK_STRUCT_SIZE(struct xfs_ictimestamp, 8); XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_32, 52); XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_64, 56); XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat, 20); XFS_CHECK_STRUCT_SIZE(struct xfs_trans_header, 16); } #endif /* __XFS_ONDISK_H */