diff options
Diffstat (limited to 'fs/xfs/quota/xfs_qm.c')
-rw-r--r-- | fs/xfs/quota/xfs_qm.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/xfs/quota/xfs_qm.c b/fs/xfs/quota/xfs_qm.c index 73c1e5e80c07..7fb5eca9bd50 100644 --- a/fs/xfs/quota/xfs_qm.c +++ b/fs/xfs/quota/xfs_qm.c | |||
@@ -2624,7 +2624,7 @@ xfs_qm_vop_chown_reserve( | |||
2624 | { | 2624 | { |
2625 | int error; | 2625 | int error; |
2626 | xfs_mount_t *mp; | 2626 | xfs_mount_t *mp; |
2627 | uint delblks, blkflags; | 2627 | uint delblks, blkflags, prjflags = 0; |
2628 | xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; | 2628 | xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; |
2629 | 2629 | ||
2630 | ASSERT(XFS_ISLOCKED_INODE(ip)); | 2630 | ASSERT(XFS_ISLOCKED_INODE(ip)); |
@@ -2650,10 +2650,13 @@ xfs_qm_vop_chown_reserve( | |||
2650 | } | 2650 | } |
2651 | } | 2651 | } |
2652 | if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { | 2652 | if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { |
2653 | if ((XFS_IS_GQUOTA_ON(ip->i_mount) && | 2653 | if (XFS_IS_PQUOTA_ON(ip->i_mount) && |
2654 | ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id)) || | 2654 | ip->i_d.di_projid != be32_to_cpu(gdqp->q_core.d_id)) |
2655 | (XFS_IS_PQUOTA_ON(ip->i_mount) && | 2655 | prjflags = XFS_QMOPT_ENOSPC; |
2656 | ip->i_d.di_projid != be32_to_cpu(gdqp->q_core.d_id))) { | 2656 | |
2657 | if (prjflags || | ||
2658 | (XFS_IS_GQUOTA_ON(ip->i_mount) && | ||
2659 | ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { | ||
2657 | delblksgdq = gdqp; | 2660 | delblksgdq = gdqp; |
2658 | if (delblks) { | 2661 | if (delblks) { |
2659 | ASSERT(ip->i_gdquot); | 2662 | ASSERT(ip->i_gdquot); |
@@ -2664,7 +2667,7 @@ xfs_qm_vop_chown_reserve( | |||
2664 | 2667 | ||
2665 | if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, | 2668 | if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, |
2666 | delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, | 2669 | delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, |
2667 | flags | blkflags))) | 2670 | flags | blkflags | prjflags))) |
2668 | return (error); | 2671 | return (error); |
2669 | 2672 | ||
2670 | /* | 2673 | /* |
@@ -2681,7 +2684,7 @@ xfs_qm_vop_chown_reserve( | |||
2681 | ASSERT(unresudq || unresgdq); | 2684 | ASSERT(unresudq || unresgdq); |
2682 | if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, | 2685 | if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, |
2683 | delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, | 2686 | delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, |
2684 | flags | blkflags))) | 2687 | flags | blkflags | prjflags))) |
2685 | return (error); | 2688 | return (error); |
2686 | xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, | 2689 | xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, |
2687 | unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, | 2690 | unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, |