vserver 1.9.3
[linux-2.6.git] / fs / xfs / quota / xfs_qm_syscalls.c
index 5a0f1ad..b722dad 100644 (file)
@@ -648,8 +648,11 @@ xfs_qm_scall_setqlim(
        if (hard == 0 || hard >= soft) {
                INT_SET(ddq->d_blk_hardlimit, ARCH_CONVERT, hard);
                INT_SET(ddq->d_blk_softlimit, ARCH_CONVERT, soft);
-       }
-       else {
+               if (id == 0) {
+                       mp->m_quotainfo->qi_bhardlimit = hard;
+                       mp->m_quotainfo->qi_bsoftlimit = soft;
+               }
+       } else {
                qdprintk("blkhard %Ld < blksoft %Ld\n", hard, soft);
        }
        hard = (newlim->d_fieldmask & FS_DQ_RTBHARD) ?
@@ -661,40 +664,49 @@ xfs_qm_scall_setqlim(
        if (hard == 0 || hard >= soft) {
                INT_SET(ddq->d_rtb_hardlimit, ARCH_CONVERT, hard);
                INT_SET(ddq->d_rtb_softlimit, ARCH_CONVERT, soft);
-       }
-       else
+               if (id == 0) {
+                       mp->m_quotainfo->qi_rtbhardlimit = hard;
+                       mp->m_quotainfo->qi_rtbsoftlimit = soft;
+               }
+       } else {
                qdprintk("rtbhard %Ld < rtbsoft %Ld\n", hard, soft);
+       }
 
        hard = (newlim->d_fieldmask & FS_DQ_IHARD) ?
                (xfs_qcnt_t) newlim->d_ino_hardlimit :
-               INT_GET(ddq->d_ino_hardlimit, ARCH_CONVERT);
+                       INT_GET(ddq->d_ino_hardlimit, ARCH_CONVERT);
        soft = (newlim->d_fieldmask & FS_DQ_ISOFT) ?
                (xfs_qcnt_t) newlim->d_ino_softlimit :
-               INT_GET(ddq->d_ino_softlimit, ARCH_CONVERT);
+                       INT_GET(ddq->d_ino_softlimit, ARCH_CONVERT);
        if (hard == 0 || hard >= soft) {
                INT_SET(ddq->d_ino_hardlimit, ARCH_CONVERT, hard);
                INT_SET(ddq->d_ino_softlimit, ARCH_CONVERT, soft);
-       }
-       else
+               if (id == 0) {
+                       mp->m_quotainfo->qi_ihardlimit = hard;
+                       mp->m_quotainfo->qi_isoftlimit = soft;
+               }
+       } else {
                qdprintk("ihard %Ld < isoft %Ld\n", hard, soft);
+       }
 
        if (id == 0) {
                /*
                 * Timelimits for the super user set the relative time
                 * the other users can be over quota for this file system.
-                * If it is zero a default is used.
+                * If it is zero a default is used.  Ditto for the default
+                * soft and hard limit values (already done, above).
                 */
                if (newlim->d_fieldmask & FS_DQ_BTIMER) {
                        mp->m_quotainfo->qi_btimelimit = newlim->d_btimer;
-                       INT_SET(dqp->q_core.d_btimer, ARCH_CONVERT, newlim->d_btimer);
+                       INT_SET(ddq->d_btimer, ARCH_CONVERT, newlim->d_btimer);
                }
                if (newlim->d_fieldmask & FS_DQ_ITIMER) {
                        mp->m_quotainfo->qi_itimelimit = newlim->d_itimer;
-                       INT_SET(dqp->q_core.d_itimer, ARCH_CONVERT, newlim->d_itimer);
+                       INT_SET(ddq->d_itimer, ARCH_CONVERT, newlim->d_itimer);
                }
                if (newlim->d_fieldmask & FS_DQ_RTBTIMER) {
                        mp->m_quotainfo->qi_rtbtimelimit = newlim->d_rtbtimer;
-                       INT_SET(dqp->q_core.d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer);
+                       INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer);
                }
        } else /* if (XFS_IS_QUOTA_ENFORCED(mp)) */ {
                /*
@@ -1114,7 +1126,7 @@ mutex_t         qcheck_lock;
          cmn_err(CE_DEBUG, "%s (#%d)", title, (int) (l)->qh_nelems); \
          for (dqp = (xfs_dqtest_t *)(l)->qh_next; dqp != NULL; \
               dqp = (xfs_dqtest_t *)dqp->NXT) { \
-               cmn_err(CE_DEBUG, "  %d\. \"%d (%s)\"  bcnt = %d, icnt = %d", \
+               cmn_err(CE_DEBUG, "  %d. \"%d (%s)\"  bcnt = %d, icnt = %d", \
                         ++i, dqp->d_id, DQFLAGTO_TYPESTR(dqp),      \
                         dqp->d_bcount, dqp->d_icount); } \
 }
@@ -1299,7 +1311,7 @@ STATIC int
 xfs_qm_internalqcheck_adjust(
        xfs_mount_t     *mp,            /* mount point for filesystem */
        xfs_ino_t       ino,            /* inode number to get data for */
-       void            *buffer,        /* not used */
+       void            __user *buffer, /* not used */
        int             ubsize,         /* not used */
        void            *private_data,  /* not used */
        xfs_daddr_t     bno,            /* starting block of inode cluster */