.. | .. |
---|
16 | 16 | #include "xfs_quota.h" |
---|
17 | 17 | #include "xfs_qm.h" |
---|
18 | 18 | #include "xfs_trace.h" |
---|
| 19 | +#include "xfs_error.h" |
---|
19 | 20 | |
---|
20 | 21 | STATIC void xfs_trans_alloc_dqinfo(xfs_trans_t *); |
---|
21 | 22 | |
---|
.. | .. |
---|
708 | 709 | XFS_TRANS_DQ_RES_INOS, |
---|
709 | 710 | ninos); |
---|
710 | 711 | } |
---|
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; |
---|
714 | 717 | |
---|
715 | 718 | xfs_dqunlock(dqp); |
---|
716 | 719 | return 0; |
---|
.. | .. |
---|
720 | 723 | if (xfs_dquot_type(dqp) == XFS_DQTYPE_PROJ) |
---|
721 | 724 | return -ENOSPC; |
---|
722 | 725 | return -EDQUOT; |
---|
| 726 | +error_corrupt: |
---|
| 727 | + xfs_dqunlock(dqp); |
---|
| 728 | + xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); |
---|
| 729 | + return -EFSCORRUPTED; |
---|
723 | 730 | } |
---|
724 | 731 | |
---|
725 | 732 | |
---|