]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/gfs2/quota.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm...
[karo-tx-linux.git] / fs / gfs2 / quota.c
index d554dfff58e3186a50ff7039aa8e795355924af6..40c4b0d42fa8fea10b73102b4fd7d155ebf8daa0 100644 (file)
@@ -765,6 +765,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
        struct gfs2_holder *ghs, i_gh;
        unsigned int qx, x;
        struct gfs2_quota_data *qd;
+       unsigned reserved;
        loff_t offset;
        unsigned int nalloc = 0, blocks;
        int error;
@@ -781,7 +782,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
                return -ENOMEM;
 
        sort(qda, num_qd, sizeof(struct gfs2_quota_data *), sort_qd, NULL);
-       mutex_lock_nested(&ip->i_inode.i_mutex, I_MUTEX_QUOTA);
+       mutex_lock(&ip->i_inode.i_mutex);
        for (qx = 0; qx < num_qd; qx++) {
                error = gfs2_glock_nq_init(qda[qx]->qd_gl, LM_ST_EXCLUSIVE,
                                           GL_NOCACHE, &ghs[qx]);
@@ -811,13 +812,13 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
         * two blocks need to be updated instead of 1 */
        blocks = num_qd * data_blocks + RES_DINODE + num_qd + 3;
 
-       error = gfs2_inplace_reserve(ip, 1 +
-                                    (nalloc * (data_blocks + ind_blocks)));
+       reserved = 1 + (nalloc * (data_blocks + ind_blocks));
+       error = gfs2_inplace_reserve(ip, reserved);
        if (error)
                goto out_alloc;
 
        if (nalloc)
-               blocks += gfs2_rg_blocks(ip) + nalloc * ind_blocks + RES_STATFS;
+               blocks += gfs2_rg_blocks(ip, reserved) + nalloc * ind_blocks + RES_STATFS;
 
        error = gfs2_trans_begin(sdp, blocks, 0);
        if (error)
@@ -1604,7 +1605,7 @@ static int gfs2_set_dqblk(struct super_block *sb, struct kqid qid,
                error = gfs2_inplace_reserve(ip, blocks);
                if (error)
                        goto out_i;
-               blocks += gfs2_rg_blocks(ip);
+               blocks += gfs2_rg_blocks(ip, blocks);
        }
 
        /* Some quotas span block boundaries and can update two blocks,