xfs: pass inode count through ordered icreate log item
v5 superblocks use an ordered log item for logging the initialization of inode chunks. The icreate log item is currently hardcoded to an inode count of 64 inodes. The agbno and extent length are used to initialize the inode chunk from log recovery. While an incorrect inode count does not lead to bad inode chunk initialization, we should pass the correct inode count such that log recovery has enough data to perform meaningful validity checks on the chunk. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
12d0714d4b
commit
463958af5c
|
@ -250,6 +250,7 @@ xfs_ialloc_inode_init(
|
|||
struct xfs_mount *mp,
|
||||
struct xfs_trans *tp,
|
||||
struct list_head *buffer_list,
|
||||
int icount,
|
||||
xfs_agnumber_t agno,
|
||||
xfs_agblock_t agbno,
|
||||
xfs_agblock_t length,
|
||||
|
@ -305,7 +306,7 @@ xfs_ialloc_inode_init(
|
|||
* they track in the AIL as if they were physically logged.
|
||||
*/
|
||||
if (tp)
|
||||
xfs_icreate_log(tp, agno, agbno, mp->m_ialloc_inos,
|
||||
xfs_icreate_log(tp, agno, agbno, icount,
|
||||
mp->m_sb.sb_inodesize, length, gen);
|
||||
} else
|
||||
version = 2;
|
||||
|
@ -525,8 +526,8 @@ xfs_ialloc_ag_alloc(
|
|||
* rather than a linear progression to prevent the next generation
|
||||
* number from being easily guessable.
|
||||
*/
|
||||
error = xfs_ialloc_inode_init(args.mp, tp, NULL, agno, args.agbno,
|
||||
args.len, prandom_u32());
|
||||
error = xfs_ialloc_inode_init(args.mp, tp, NULL, newlen, agno,
|
||||
args.agbno, args.len, prandom_u32());
|
||||
|
||||
if (error)
|
||||
return error;
|
||||
|
|
|
@ -156,7 +156,7 @@ int xfs_inobt_get_rec(struct xfs_btree_cur *cur,
|
|||
* Inode chunk initialisation routine
|
||||
*/
|
||||
int xfs_ialloc_inode_init(struct xfs_mount *mp, struct xfs_trans *tp,
|
||||
struct list_head *buffer_list,
|
||||
struct list_head *buffer_list, int icount,
|
||||
xfs_agnumber_t agno, xfs_agblock_t agbno,
|
||||
xfs_agblock_t length, unsigned int gen);
|
||||
|
||||
|
|
|
@ -3091,8 +3091,8 @@ xlog_recover_do_icreate_pass2(
|
|||
XFS_AGB_TO_DADDR(mp, agno, agbno), length, 0))
|
||||
return 0;
|
||||
|
||||
xfs_ialloc_inode_init(mp, NULL, buffer_list, agno, agbno, length,
|
||||
be32_to_cpu(icl->icl_gen));
|
||||
xfs_ialloc_inode_init(mp, NULL, buffer_list, count, agno, agbno, length,
|
||||
be32_to_cpu(icl->icl_gen));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue