hc
2024-05-11 297b60346df8beafee954a0fd7c2d64f33f3b9bc
kernel/fs/xfs/xfs_trans_dquot.c
....@@ -16,6 +16,7 @@
1616 #include "xfs_quota.h"
1717 #include "xfs_qm.h"
1818 #include "xfs_trace.h"
19
+#include "xfs_error.h"
1920
2021 STATIC void xfs_trans_alloc_dqinfo(xfs_trans_t *);
2122
....@@ -708,9 +709,11 @@
708709 XFS_TRANS_DQ_RES_INOS,
709710 ninos);
710711 }
711
- ASSERT(dqp->q_blk.reserved >= dqp->q_blk.count);
712
- ASSERT(dqp->q_rtb.reserved >= dqp->q_rtb.count);
713
- ASSERT(dqp->q_ino.reserved >= dqp->q_ino.count);
712
+
713
+ if (XFS_IS_CORRUPT(mp, dqp->q_blk.reserved < dqp->q_blk.count) ||
714
+ XFS_IS_CORRUPT(mp, dqp->q_rtb.reserved < dqp->q_rtb.count) ||
715
+ XFS_IS_CORRUPT(mp, dqp->q_ino.reserved < dqp->q_ino.count))
716
+ goto error_corrupt;
714717
715718 xfs_dqunlock(dqp);
716719 return 0;
....@@ -720,6 +723,10 @@
720723 if (xfs_dquot_type(dqp) == XFS_DQTYPE_PROJ)
721724 return -ENOSPC;
722725 return -EDQUOT;
726
+error_corrupt:
727
+ xfs_dqunlock(dqp);
728
+ xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
729
+ return -EFSCORRUPTED;
723730 }
724731
725732