return PTR_ERR(dquot);
        spin_lock(&dquot->dq_dqb_lock);
 
-       limit = (dquot->dq_dqb.dqb_bsoftlimit ?
-                dquot->dq_dqb.dqb_bsoftlimit :
-                dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
+       limit = 0;
+       if (dquot->dq_dqb.dqb_bsoftlimit)
+               limit = dquot->dq_dqb.dqb_bsoftlimit;
+       if (dquot->dq_dqb.dqb_bhardlimit &&
+                       (!limit || dquot->dq_dqb.dqb_bhardlimit < limit))
+               limit = dquot->dq_dqb.dqb_bhardlimit;
+
        if (limit && buf->f_blocks > limit) {
                curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
                buf->f_blocks = limit;
                         (buf->f_blocks - curblock) : 0;
        }
 
-       limit = dquot->dq_dqb.dqb_isoftlimit ?
-               dquot->dq_dqb.dqb_isoftlimit :
-               dquot->dq_dqb.dqb_ihardlimit;
+       limit = 0;
+       if (dquot->dq_dqb.dqb_isoftlimit)
+               limit = dquot->dq_dqb.dqb_isoftlimit;
+       if (dquot->dq_dqb.dqb_ihardlimit &&
+                       (!limit || dquot->dq_dqb.dqb_ihardlimit < limit))
+               limit = dquot->dq_dqb.dqb_ihardlimit;
+
        if (limit && buf->f_files > limit) {
                buf->f_files = limit;
                buf->f_ffree =