Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / fs / gfs2 / quota.c
index 0e8bb13..7e528dc 100644 (file)
@@ -638,15 +638,18 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
        unsigned long index = loc >> PAGE_CACHE_SHIFT;
        unsigned offset = loc & (PAGE_CACHE_SIZE - 1);
        unsigned blocksize, iblock, pos;
-       struct buffer_head *bh, *dibh;
+       struct buffer_head *bh;
        struct page *page;
        void *kaddr, *ptr;
        struct gfs2_quota q, *qp;
        int err, nbytes;
        u64 size;
 
-       if (gfs2_is_stuffed(ip))
-               gfs2_unstuff_dinode(ip, NULL);
+       if (gfs2_is_stuffed(ip)) {
+               err = gfs2_unstuff_dinode(ip, NULL);
+               if (err)
+                       return err;
+       }
 
        memset(&q, 0, sizeof(struct gfs2_quota));
        err = gfs2_internal_read(ip, NULL, (char *)&q, &loc, sizeof(q));
@@ -736,22 +739,13 @@ get_a_page:
                goto get_a_page;
        }
 
-       /* Update the disk inode timestamp and size (if extended) */
-       err = gfs2_meta_inode_buffer(ip, &dibh);
-       if (err)
-               goto out;
-
        size = loc + sizeof(struct gfs2_quota);
        if (size > inode->i_size)
                i_size_write(inode, size);
        inode->i_mtime = inode->i_atime = CURRENT_TIME;
-       gfs2_trans_add_bh(ip->i_gl, dibh, 1);
-       gfs2_dinode_out(ip, dibh->b_data);
-       brelse(dibh);
        mark_inode_dirty(inode);
-
-out:
        return err;
+
 unlock_out:
        unlock_page(page);
        page_cache_release(page);
@@ -822,7 +816,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
                goto out_alloc;
 
        if (nalloc)
-               blocks += gfs2_rg_blocks(al) + nalloc * ind_blocks + RES_STATFS;
+               blocks += gfs2_rg_blocks(ip) + nalloc * ind_blocks + RES_STATFS;
 
        error = gfs2_trans_begin(sdp, blocks, 0);
        if (error)
@@ -936,7 +930,9 @@ int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid)
        unsigned int x;
        int error = 0;
 
-       gfs2_quota_hold(ip, uid, gid);
+       error = gfs2_quota_hold(ip, uid, gid);
+       if (error)
+               return error;
 
        if (capable(CAP_SYS_RESOURCE) ||
            sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
@@ -1607,7 +1603,7 @@ static int gfs2_set_dqblk(struct super_block *sb, int type, qid_t id,
                error = gfs2_inplace_reserve(ip);
                if (error)
                        goto out_alloc;
-               blocks += gfs2_rg_blocks(al);
+               blocks += gfs2_rg_blocks(ip);
        }
 
        /* Some quotas span block boundaries and can update two blocks,