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 | |
| 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>
| -rw-r--r-- | fs/xfs/quota/xfs_dquot.c | 10 | ||||
| -rw-r--r-- | fs/xfs/quota/xfs_qm.c | 2 | ||||
| -rw-r--r-- | fs/xfs/quota/xfs_qm_syscalls.c | 24 |
3 files changed, 32 insertions, 4 deletions
diff --git a/fs/xfs/quota/xfs_dquot.c b/fs/xfs/quota/xfs_dquot.c index 68089f56d5cd..32ec7f4467d7 100644 --- a/fs/xfs/quota/xfs_dquot.c +++ b/fs/xfs/quota/xfs_dquot.c | |||
| @@ -286,7 +286,9 @@ xfs_qm_adjust_dqlimits( | |||
| 286 | * We also return 0 as the values of the timers in Q_GETQUOTA calls, when | 286 | * We also return 0 as the values of the timers in Q_GETQUOTA calls, when |
| 287 | * enforcement's off. | 287 | * enforcement's off. |
| 288 | * In contrast, warnings are a little different in that they don't | 288 | * In contrast, warnings are a little different in that they don't |
| 289 | * 'automatically' get started when limits get exceeded. | 289 | * 'automatically' get started when limits get exceeded. They do |
| 290 | * get reset to zero, however, when we find the count to be under | ||
| 291 | * the soft limit (they are only ever set non-zero via userspace). | ||
| 290 | */ | 292 | */ |
| 291 | void | 293 | void |
| 292 | xfs_qm_adjust_dqtimers( | 294 | xfs_qm_adjust_dqtimers( |
| @@ -315,6 +317,8 @@ xfs_qm_adjust_dqtimers( | |||
| 315 | INT_GET(d->d_blk_hardlimit, ARCH_CONVERT)))) { | 317 | INT_GET(d->d_blk_hardlimit, ARCH_CONVERT)))) { |
| 316 | INT_SET(d->d_btimer, ARCH_CONVERT, | 318 | INT_SET(d->d_btimer, ARCH_CONVERT, |
| 317 | get_seconds() + XFS_QI_BTIMELIMIT(mp)); | 319 | get_seconds() + XFS_QI_BTIMELIMIT(mp)); |
| 320 | } else { | ||
| 321 | d->d_bwarns = 0; | ||
| 318 | } | 322 | } |
| 319 | } else { | 323 | } else { |
| 320 | if ((!d->d_blk_softlimit || | 324 | if ((!d->d_blk_softlimit || |
| @@ -336,6 +340,8 @@ xfs_qm_adjust_dqtimers( | |||
| 336 | INT_GET(d->d_ino_hardlimit, ARCH_CONVERT)))) { | 340 | INT_GET(d->d_ino_hardlimit, ARCH_CONVERT)))) { |
| 337 | INT_SET(d->d_itimer, ARCH_CONVERT, | 341 | INT_SET(d->d_itimer, ARCH_CONVERT, |
| 338 | get_seconds() + XFS_QI_ITIMELIMIT(mp)); | 342 | get_seconds() + XFS_QI_ITIMELIMIT(mp)); |
| 343 | } else { | ||
| 344 | d->d_iwarns = 0; | ||
| 339 | } | 345 | } |
| 340 | } else { | 346 | } else { |
| 341 | if ((!d->d_ino_softlimit || | 347 | if ((!d->d_ino_softlimit || |
| @@ -357,6 +363,8 @@ xfs_qm_adjust_dqtimers( | |||
| 357 | INT_GET(d->d_rtb_hardlimit, ARCH_CONVERT)))) { | 363 | INT_GET(d->d_rtb_hardlimit, ARCH_CONVERT)))) { |
| 358 | INT_SET(d->d_rtbtimer, ARCH_CONVERT, | 364 | INT_SET(d->d_rtbtimer, ARCH_CONVERT, |
| 359 | get_seconds() + XFS_QI_RTBTIMELIMIT(mp)); | 365 | get_seconds() + XFS_QI_RTBTIMELIMIT(mp)); |
| 366 | } else { | ||
| 367 | d->d_rtbwarns = 0; | ||
| 360 | } | 368 | } |
| 361 | } else { | 369 | } else { |
| 362 | if ((!d->d_rtb_softlimit || | 370 | if ((!d->d_rtb_softlimit || |
diff --git a/fs/xfs/quota/xfs_qm.c b/fs/xfs/quota/xfs_qm.c index 3254cb7b87f4..f665ca8f9e96 100644 --- a/fs/xfs/quota/xfs_qm.c +++ b/fs/xfs/quota/xfs_qm.c | |||
| @@ -1550,8 +1550,10 @@ xfs_qm_reset_dqcounts( | |||
| 1550 | INT_SET(ddq->d_rtbcount, ARCH_CONVERT, 0ULL); | 1550 | INT_SET(ddq->d_rtbcount, ARCH_CONVERT, 0ULL); |
| 1551 | INT_SET(ddq->d_btimer, ARCH_CONVERT, (time_t)0); | 1551 | INT_SET(ddq->d_btimer, ARCH_CONVERT, (time_t)0); |
| 1552 | INT_SET(ddq->d_itimer, ARCH_CONVERT, (time_t)0); | 1552 | INT_SET(ddq->d_itimer, ARCH_CONVERT, (time_t)0); |
| 1553 | INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, (time_t)0); | ||
| 1553 | INT_SET(ddq->d_bwarns, ARCH_CONVERT, 0UL); | 1554 | INT_SET(ddq->d_bwarns, ARCH_CONVERT, 0UL); |
| 1554 | INT_SET(ddq->d_iwarns, ARCH_CONVERT, 0UL); | 1555 | INT_SET(ddq->d_iwarns, ARCH_CONVERT, 0UL); |
| 1556 | INT_SET(ddq->d_rtbwarns, ARCH_CONVERT, 0UL); | ||
| 1555 | ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); | 1557 | ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); |
| 1556 | } | 1558 | } |
| 1557 | 1559 | ||
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'. |
