|
@@ -3068,12 +3068,22 @@ xlog_recover_do_icreate_pass2(
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- /* existing allocation is fixed value */
|
|
|
- ASSERT(count == mp->m_ialloc_inos);
|
|
|
- ASSERT(length == mp->m_ialloc_blks);
|
|
|
- if (count != mp->m_ialloc_inos ||
|
|
|
- length != mp->m_ialloc_blks) {
|
|
|
- xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count 2");
|
|
|
+ /*
|
|
|
+ * The inode chunk is either full or sparse and we only support
|
|
|
+ * m_ialloc_min_blks sized sparse allocations at this time.
|
|
|
+ */
|
|
|
+ if (length != mp->m_ialloc_blks &&
|
|
|
+ length != mp->m_ialloc_min_blks) {
|
|
|
+ xfs_warn(log->l_mp,
|
|
|
+ "%s: unsupported chunk length", __FUNCTION__);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* verify inode count is consistent with extent length */
|
|
|
+ if ((count >> mp->m_sb.sb_inopblog) != length) {
|
|
|
+ xfs_warn(log->l_mp,
|
|
|
+ "%s: inconsistent inode count and chunk length",
|
|
|
+ __FUNCTION__);
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|