]> err.no Git - linux-2.6/blobdiff - fs/xfs/quota/xfs_dquot.c
[PATCH] optimise 64bit unaligned access on 32bit kernel
[linux-2.6] / fs / xfs / quota / xfs_dquot.c
index 68089f56d5cd1943b1afaaeca8af815150cdae11..46ce1e3ce1d6c04c90b93ec46d86d2e4f64651fc 100644 (file)
@@ -286,7 +286,9 @@ xfs_qm_adjust_dqlimits(
  * We also return 0 as the values of the timers in Q_GETQUOTA calls, when
  * enforcement's off.
  * In contrast, warnings are a little different in that they don't
- * 'automatically' get started when limits get exceeded.
+ * 'automatically' get started when limits get exceeded.  They do
+ * get reset to zero, however, when we find the count to be under
+ * the soft limit (they are only ever set non-zero via userspace).
  */
 void
 xfs_qm_adjust_dqtimers(
@@ -315,6 +317,8 @@ xfs_qm_adjust_dqtimers(
                                INT_GET(d->d_blk_hardlimit, ARCH_CONVERT)))) {
                        INT_SET(d->d_btimer, ARCH_CONVERT,
                                get_seconds() + XFS_QI_BTIMELIMIT(mp));
+               } else {
+                       d->d_bwarns = 0;
                }
        } else {
                if ((!d->d_blk_softlimit ||
@@ -336,6 +340,8 @@ xfs_qm_adjust_dqtimers(
                                INT_GET(d->d_ino_hardlimit, ARCH_CONVERT)))) {
                        INT_SET(d->d_itimer, ARCH_CONVERT,
                                get_seconds() + XFS_QI_ITIMELIMIT(mp));
+               } else {
+                       d->d_iwarns = 0;
                }
        } else {
                if ((!d->d_ino_softlimit ||
@@ -357,6 +363,8 @@ xfs_qm_adjust_dqtimers(
                                INT_GET(d->d_rtb_hardlimit, ARCH_CONVERT)))) {
                        INT_SET(d->d_rtbtimer, ARCH_CONVERT,
                                get_seconds() + XFS_QI_RTBTIMELIMIT(mp));
+               } else {
+                       d->d_rtbwarns = 0;
                }
        } else {
                if ((!d->d_rtb_softlimit ||
@@ -903,7 +911,6 @@ xfs_qm_dqget(
        if ((! XFS_IS_UQUOTA_ON(mp) && type == XFS_DQ_USER) ||
            (! XFS_IS_PQUOTA_ON(mp) && type == XFS_DQ_PROJ) ||
            (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) {
-printk("XQM: ESRCH1\n");
                return (ESRCH);
        }
        h = XFS_DQ_HASH(mp, id, type);
@@ -981,7 +988,6 @@ printk("XQM: ESRCH1\n");
                                  &dqp))) {
                if (ip)
                        xfs_ilock(ip, XFS_ILOCK_EXCL);
-if (error == ESRCH) printk("XQM: ESRCH2\n");
                return (error);
        }
 
@@ -1007,7 +1013,6 @@ if (error == ESRCH) printk("XQM: ESRCH2\n");
                if (! XFS_IS_DQTYPE_ON(mp, type)) {
                        /* inode stays locked on return */
                        xfs_qm_dqdestroy(dqp);
-printk("XQM: ESRCH3\n");
                        return XFS_ERROR(ESRCH);
                }
                /*