limit = blkres->softlimit ?
                blkres->softlimit :
                blkres->hardlimit;
-       if (limit && statp->f_blocks > limit) {
-               statp->f_blocks = limit;
-               statp->f_bfree = statp->f_bavail =
-                       (statp->f_blocks > blkres->reserved) ?
-                        (statp->f_blocks - blkres->reserved) : 0;
+       if (limit) {
+               uint64_t        remaining = 0;
+
+               if (limit > blkres->reserved)
+                       remaining = limit - blkres->reserved;
+
+               statp->f_blocks = min(statp->f_blocks, limit);
+               statp->f_bfree = min(statp->f_bfree, remaining);
+               statp->f_bavail = min(statp->f_bavail, remaining);
        }
 
        limit = dqp->q_ino.softlimit ?
                dqp->q_ino.softlimit :
                dqp->q_ino.hardlimit;
-       if (limit && statp->f_files > limit) {
-               statp->f_files = limit;
-               statp->f_ffree =
-                       (statp->f_files > dqp->q_ino.reserved) ?
-                        (statp->f_files - dqp->q_ino.reserved) : 0;
+       if (limit) {
+               uint64_t        remaining = 0;
+
+               if (limit > dqp->q_ino.reserved)
+                       remaining = limit - dqp->q_ino.reserved;
+
+               statp->f_files = min(statp->f_files, limit);
+               statp->f_ffree = min(statp->f_ffree, remaining);
        }
 }