xfs: shut down the filesystem if we screw up quota reservation
If we ever screw up the quota reservations enough to trip the assertions, something's wrong with the quota code. Shut down the filesystem when this happens, because this is corruption. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
fea7aae6ce
commit
2a4bdfa855
|
@ -16,6 +16,7 @@
|
||||||
#include "xfs_quota.h"
|
#include "xfs_quota.h"
|
||||||
#include "xfs_qm.h"
|
#include "xfs_qm.h"
|
||||||
#include "xfs_trace.h"
|
#include "xfs_trace.h"
|
||||||
|
#include "xfs_error.h"
|
||||||
|
|
||||||
STATIC void xfs_trans_alloc_dqinfo(xfs_trans_t *);
|
STATIC void xfs_trans_alloc_dqinfo(xfs_trans_t *);
|
||||||
|
|
||||||
|
@ -691,9 +692,11 @@ xfs_trans_dqresv(
|
||||||
nblks);
|
nblks);
|
||||||
xfs_trans_mod_dquot(tp, dqp, XFS_TRANS_DQ_RES_INOS, ninos);
|
xfs_trans_mod_dquot(tp, dqp, XFS_TRANS_DQ_RES_INOS, ninos);
|
||||||
}
|
}
|
||||||
ASSERT(dqp->q_blk.reserved >= dqp->q_blk.count);
|
|
||||||
ASSERT(dqp->q_rtb.reserved >= dqp->q_rtb.count);
|
if (XFS_IS_CORRUPT(mp, dqp->q_blk.reserved < dqp->q_blk.count) ||
|
||||||
ASSERT(dqp->q_ino.reserved >= dqp->q_ino.count);
|
XFS_IS_CORRUPT(mp, dqp->q_rtb.reserved < dqp->q_rtb.count) ||
|
||||||
|
XFS_IS_CORRUPT(mp, dqp->q_ino.reserved < dqp->q_ino.count))
|
||||||
|
goto error_corrupt;
|
||||||
|
|
||||||
xfs_dqunlock(dqp);
|
xfs_dqunlock(dqp);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -703,6 +706,10 @@ error_return:
|
||||||
if (xfs_dquot_type(dqp) == XFS_DQTYPE_PROJ)
|
if (xfs_dquot_type(dqp) == XFS_DQTYPE_PROJ)
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
return -EDQUOT;
|
return -EDQUOT;
|
||||||
|
error_corrupt:
|
||||||
|
xfs_dqunlock(dqp);
|
||||||
|
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
|
||||||
|
return -EFSCORRUPTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue