@@ -217,6 +217,7 @@ struct xfs_rtgroup_geometry {
#define XFS_RTGROUP_GEOM_SICK_SUPER (1 << 0) /* superblock */
#define XFS_RTGROUP_GEOM_SICK_BITMAP (1 << 1) /* rtbitmap for this group */
#define XFS_RTGROUP_GEOM_SICK_RMAPBT (1 << 2) /* reverse mappings */
+#define XFS_RTGROUP_GEOM_SICK_REFCNTBT (1 << 3) /* reference counts */
#define XFS_IOC_RTGROUP_GEOMETRY _IOWR('X', 63, struct xfs_rtgroup_geometry)
@@ -69,6 +69,7 @@ struct xfs_rtgroup;
#define XFS_SICK_RT_SUMMARY (1 << 1) /* realtime summary */
#define XFS_SICK_RT_SUPER (1 << 2) /* rt group superblock */
#define XFS_SICK_RT_RMAPBT (1 << 3) /* reverse mappings */
+#define XFS_SICK_RT_REFCNTBT (1 << 4) /* reference counts */
/* Observable health issues for AG metadata. */
#define XFS_SICK_AG_SB (1 << 0) /* superblock */
@@ -115,7 +116,8 @@ struct xfs_rtgroup;
#define XFS_SICK_RT_PRIMARY (XFS_SICK_RT_BITMAP | \
XFS_SICK_RT_SUMMARY | \
XFS_SICK_RT_SUPER | \
- XFS_SICK_RT_RMAPBT)
+ XFS_SICK_RT_RMAPBT | \
+ XFS_SICK_RT_REFCNTBT)
#define XFS_SICK_AG_PRIMARY (XFS_SICK_AG_SB | \
XFS_SICK_AG_AGF | \
@@ -271,8 +271,10 @@ xfs_iformat_data_fork(
}
return xfs_iformat_rtrmap(ip, dip);
case XFS_DINODE_FMT_REFCOUNT:
- if (!xfs_has_rtreflink(ip->i_mount))
+ if (!xfs_has_rtreflink(ip->i_mount)) {
+ xfs_inode_mark_sick(ip, XFS_SICK_INO_CORE);
return -EFSCORRUPTED;
+ }
return xfs_iformat_rtrefcount(ip, dip);
default:
xfs_inode_verifier_error(ip, -EFSCORRUPTED, __func__,
@@ -25,6 +25,7 @@
#include "xfs_rtgroup.h"
#include "xfs_rtbitmap.h"
#include "xfs_imeta.h"
+#include "xfs_health.h"
static struct kmem_cache *xfs_rtrefcountbt_cur_cache;
@@ -692,8 +693,10 @@ xfs_iformat_rtrefcount(
level = be16_to_cpu(dfp->bb_level);
if (level > mp->m_rtrefc_maxlevels ||
- xfs_rtrefcount_droot_space_calc(level, numrecs) > dsize)
+ xfs_rtrefcount_droot_space_calc(level, numrecs) > dsize) {
+ xfs_inode_mark_sick(ip, XFS_SICK_INO_CORE);
return -EFSCORRUPTED;
+ }
xfs_iroot_alloc(ip, XFS_DATA_FORK,
xfs_rtrefcount_broot_space_calc(mp, level, numrecs));
@@ -76,6 +76,9 @@ Realtime bitmap for this group.
.TP
.B XFS_RTGROUP_GEOM_SICK_RTRMAPBT
Reverse mapping btree for this group.
+.TP
+.B XFS_RTGROUP_GEOM_SICK_REFCNTBT
+Reference count btree for this group.
.RE
.SH RETURN VALUE
On error, \-1 is returned, and