| .. | .. |
|---|
| 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 | |
|---|