diff options
author | Nathan Scott <nathans@sgi.com> | 2005-06-21 01:49:06 -0400 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2005-06-21 01:49:06 -0400 |
commit | 754002b4fb1b553bd8f978bb6f5aca7af46fde67 (patch) | |
tree | e40e17fab79023052f0a66c8ee7c2cadbf434a98 /fs/xfs/quota/xfs_qm_syscalls.c | |
parent | 06d10dd9ca70ff1318ff2b871ff5f61a94223d9f (diff) |
[XFS] Merge a few minor fixes to the quota warning code.
SGI-PV: 938145
SGI-Modid: xfs-linux:xfs-kern:22901a
Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/quota/xfs_qm_syscalls.c')
-rw-r--r-- | fs/xfs/quota/xfs_qm_syscalls.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/fs/xfs/quota/xfs_qm_syscalls.c b/fs/xfs/quota/xfs_qm_syscalls.c index 365a054f02d6..68e98962dbef 100644 --- a/fs/xfs/quota/xfs_qm_syscalls.c +++ b/fs/xfs/quota/xfs_qm_syscalls.c | |||
@@ -617,7 +617,8 @@ xfs_qm_scall_setqlim( | |||
617 | if (!capable(CAP_SYS_ADMIN)) | 617 | if (!capable(CAP_SYS_ADMIN)) |
618 | return XFS_ERROR(EPERM); | 618 | return XFS_ERROR(EPERM); |
619 | 619 | ||
620 | if ((newlim->d_fieldmask & (FS_DQ_LIMIT_MASK|FS_DQ_TIMER_MASK)) == 0) | 620 | if ((newlim->d_fieldmask & |
621 | (FS_DQ_LIMIT_MASK|FS_DQ_TIMER_MASK|FS_DQ_WARNS_MASK)) == 0) | ||
621 | return (0); | 622 | return (0); |
622 | 623 | ||
623 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); | 624 | tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM); |
@@ -702,12 +703,23 @@ xfs_qm_scall_setqlim( | |||
702 | qdprintk("ihard %Ld < isoft %Ld\n", hard, soft); | 703 | qdprintk("ihard %Ld < isoft %Ld\n", hard, soft); |
703 | } | 704 | } |
704 | 705 | ||
706 | /* | ||
707 | * Update warnings counter(s) if requested | ||
708 | */ | ||
709 | if (newlim->d_fieldmask & FS_DQ_BWARNS) | ||
710 | INT_SET(ddq->d_bwarns, ARCH_CONVERT, newlim->d_bwarns); | ||
711 | if (newlim->d_fieldmask & FS_DQ_IWARNS) | ||
712 | INT_SET(ddq->d_iwarns, ARCH_CONVERT, newlim->d_iwarns); | ||
713 | if (newlim->d_fieldmask & FS_DQ_RTBWARNS) | ||
714 | INT_SET(ddq->d_rtbwarns, ARCH_CONVERT, newlim->d_rtbwarns); | ||
715 | |||
705 | if (id == 0) { | 716 | if (id == 0) { |
706 | /* | 717 | /* |
707 | * Timelimits for the super user set the relative time | 718 | * Timelimits for the super user set the relative time |
708 | * the other users can be over quota for this file system. | 719 | * the other users can be over quota for this file system. |
709 | * If it is zero a default is used. Ditto for the default | 720 | * If it is zero a default is used. Ditto for the default |
710 | * soft and hard limit values (already done, above). | 721 | * soft and hard limit values (already done, above), and |
722 | * for warnings. | ||
711 | */ | 723 | */ |
712 | if (newlim->d_fieldmask & FS_DQ_BTIMER) { | 724 | if (newlim->d_fieldmask & FS_DQ_BTIMER) { |
713 | mp->m_quotainfo->qi_btimelimit = newlim->d_btimer; | 725 | mp->m_quotainfo->qi_btimelimit = newlim->d_btimer; |
@@ -721,7 +733,13 @@ xfs_qm_scall_setqlim( | |||
721 | mp->m_quotainfo->qi_rtbtimelimit = newlim->d_rtbtimer; | 733 | mp->m_quotainfo->qi_rtbtimelimit = newlim->d_rtbtimer; |
722 | INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer); | 734 | INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer); |
723 | } | 735 | } |
724 | } else /* if (XFS_IS_QUOTA_ENFORCED(mp)) */ { | 736 | if (newlim->d_fieldmask & FS_DQ_BWARNS) |
737 | mp->m_quotainfo->qi_bwarnlimit = newlim->d_bwarns; | ||
738 | if (newlim->d_fieldmask & FS_DQ_IWARNS) | ||
739 | mp->m_quotainfo->qi_iwarnlimit = newlim->d_iwarns; | ||
740 | if (newlim->d_fieldmask & FS_DQ_RTBWARNS) | ||
741 | mp->m_quotainfo->qi_rtbwarnlimit = newlim->d_rtbwarns; | ||
742 | } else { | ||
725 | /* | 743 | /* |
726 | * If the user is now over quota, start the timelimit. | 744 | * If the user is now over quota, start the timelimit. |
727 | * The user will not be 'warned'. | 745 | * The user will not be 'warned'. |