]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/gfs2/rgrp.c
[GFS2] Kernel changes to support new gfs2_grow command (part 2)
[linux-2.6-omap-h63xx.git] / fs / gfs2 / rgrp.c
index 84fcc1bfaf1bcfb83565ebe673fbe66720c46412..48a6461d601c3de8cc5aeb00a154344593d7a9a9 100644 (file)
@@ -1,22 +1,21 @@
 /*
  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
- * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
+ * Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
  *
  * This copyrighted material is made available to anyone wishing to use,
  * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU General Public License v.2.
+ * of the GNU General Public License version 2.
  */
 
-#include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
 #include <linux/fs.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "glops.h"
@@ -28,8 +27,9 @@
 #include "trans.h"
 #include "ops_file.h"
 #include "util.h"
+#include "log.h"
 
-#define BFITNOENT 0xFFFFFFFF
+#define BFITNOENT ((u32)~0)
 
 /*
  * These routines are used by the resource group routines (rgrp.c)
@@ -60,7 +60,7 @@ static const char valid_change[16] = {
  */
 
 static void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
-                       unsigned int buflen, uint32_t block,
+                       unsigned int buflen, u32 block,
                        unsigned char new_state)
 {
        unsigned char *byte, *end, cur_state;
@@ -90,7 +90,7 @@ static void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
  */
 
 static unsigned char gfs2_testbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
-                                 unsigned int buflen, uint32_t block)
+                                 unsigned int buflen, u32 block)
 {
        unsigned char *byte, *end, cur_state;
        unsigned int bit;
@@ -122,12 +122,12 @@ static unsigned char gfs2_testbit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
  * Return: the block number (bitmap buffer scope) that was found
  */
 
-static uint32_t gfs2_bitfit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
-                           unsigned int buflen, uint32_t goal,
+static u32 gfs2_bitfit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
+                           unsigned int buflen, u32 goal,
                            unsigned char old_state)
 {
        unsigned char *byte, *end, alloc;
-       uint32_t blk = goal;
+       u32 blk = goal;
        unsigned int bit;
 
        byte = buffer + (goal / GFS2_NBBY);
@@ -169,7 +169,7 @@ static uint32_t gfs2_bitfit(struct gfs2_rgrpd *rgd, unsigned char *buffer,
  * Returns: The number of bits
  */
 
-static uint32_t gfs2_bitcount(struct gfs2_rgrpd *rgd, unsigned char *buffer,
+static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, unsigned char *buffer,
                              unsigned int buflen, unsigned char state)
 {
        unsigned char *byte = buffer;
@@ -177,7 +177,7 @@ static uint32_t gfs2_bitcount(struct gfs2_rgrpd *rgd, unsigned char *buffer,
        unsigned char state1 = state << 2;
        unsigned char state2 = state << 4;
        unsigned char state3 = state << 6;
-       uint32_t count = 0;
+       u32 count = 0;
 
        for (; byte < end; byte++) {
                if (((*byte) & 0x03) == state)
@@ -204,11 +204,11 @@ void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd)
 {
        struct gfs2_sbd *sdp = rgd->rd_sbd;
        struct gfs2_bitmap *bi = NULL;
-       uint32_t length = rgd->rd_ri.ri_length;
-       uint32_t count[4], tmp;
+       u32 length = rgd->rd_ri.ri_length;
+       u32 count[4], tmp;
        int buf, x;
 
-       memset(count, 0, 4 * sizeof(uint32_t));
+       memset(count, 0, 4 * sizeof(u32));
 
        /* Count # blocks in each of 4 possible allocation states */
        for (buf = 0; buf < length; buf++) {
@@ -253,11 +253,11 @@ void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd)
 
 }
 
-static inline int rgrp_contains_block(struct gfs2_rindex *ri, uint64_t block)
+static inline int rgrp_contains_block(struct gfs2_rindex_host *ri, u64 block)
 {
-       uint64_t first = ri->ri_data0;
-       uint64_t last = first + ri->ri_data;
-       return !!(first <= block && block < last);
+       u64 first = ri->ri_data0;
+       u64 last = first + ri->ri_data;
+       return first <= block && block < last;
 }
 
 /**
@@ -268,7 +268,7 @@ static inline int rgrp_contains_block(struct gfs2_rindex *ri, uint64_t block)
  * Returns: The resource group, or NULL if not found
  */
 
-struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, uint64_t blk)
+struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk)
 {
        struct gfs2_rgrpd *rgd;
 
@@ -367,8 +367,8 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
 {
        struct gfs2_sbd *sdp = rgd->rd_sbd;
        struct gfs2_bitmap *bi;
-       uint32_t length = rgd->rd_ri.ri_length; /* # blocks in hdr & bitmap */
-       uint32_t bytes_left, bytes;
+       u32 length = rgd->rd_ri.ri_length; /* # blocks in hdr & bitmap */
+       u32 bytes_left, bytes;
        int x;
 
        if (!length)
@@ -431,9 +431,94 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
 }
 
 /**
- * gfs2_ri_update - Pull in a new resource index from the disk
+ * gfs2_ri_total - Total up the file system space, according to the rindex.
+ *
+ */
+u64 gfs2_ri_total(struct gfs2_sbd *sdp)
+{
+       u64 total_data = 0;     
+       struct inode *inode = sdp->sd_rindex;
+       struct gfs2_inode *ip = GFS2_I(inode);
+       struct gfs2_rindex_host ri;
+       char buf[sizeof(struct gfs2_rindex)];
+       struct file_ra_state ra_state;
+       int error, rgrps;
+
+       mutex_lock(&sdp->sd_rindex_mutex);
+       file_ra_state_init(&ra_state, inode->i_mapping);
+       for (rgrps = 0;; rgrps++) {
+               loff_t pos = rgrps * sizeof(struct gfs2_rindex);
+
+               if (pos + sizeof(struct gfs2_rindex) >= ip->i_di.di_size)
+                       break;
+               error = gfs2_internal_read(ip, &ra_state, buf, &pos,
+                                          sizeof(struct gfs2_rindex));
+               if (error != sizeof(struct gfs2_rindex))
+                       break;
+               gfs2_rindex_in(&ri, buf);
+               total_data += ri.ri_data;
+       }
+       mutex_unlock(&sdp->sd_rindex_mutex);
+       return total_data;
+}
+
+/**
+ * read_rindex_entry - Pull in a new resource index entry from the disk
  * @gl: The glock covering the rindex inode
  *
+ * Returns: 0 on success, error code otherwise
+ */
+
+static int read_rindex_entry(struct gfs2_inode *ip,
+                            struct file_ra_state *ra_state)
+{
+       struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
+       loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex);
+       char buf[sizeof(struct gfs2_rindex)];
+       int error;
+       struct gfs2_rgrpd *rgd;
+
+       error = gfs2_internal_read(ip, ra_state, buf, &pos,
+                                  sizeof(struct gfs2_rindex));
+       if (!error)
+               return 0;
+       if (error != sizeof(struct gfs2_rindex)) {
+               if (error > 0)
+                       error = -EIO;
+               return error;
+       }
+
+       rgd = kzalloc(sizeof(struct gfs2_rgrpd), GFP_NOFS);
+       error = -ENOMEM;
+       if (!rgd)
+               return error;
+
+       mutex_init(&rgd->rd_mutex);
+       lops_init_le(&rgd->rd_le, &gfs2_rg_lops);
+       rgd->rd_sbd = sdp;
+
+       list_add_tail(&rgd->rd_list, &sdp->sd_rindex_list);
+       list_add_tail(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
+
+       gfs2_rindex_in(&rgd->rd_ri, buf);
+       error = compute_bitstructs(rgd);
+       if (error)
+               return error;
+
+       error = gfs2_glock_get(sdp, rgd->rd_ri.ri_addr,
+                              &gfs2_rgrp_glops, CREATE, &rgd->rd_gl);
+       if (error)
+               return error;
+
+       rgd->rd_gl->gl_object = rgd;
+       rgd->rd_rg_vn = rgd->rd_gl->gl_vn - 1;
+       return error;
+}
+
+/**
+ * gfs2_ri_update - Pull in a new resource index from the disk
+ * @ip: pointer to the rindex inode
+ *
  * Returns: 0 on successful update, error code otherwise
  */
 
@@ -441,10 +526,8 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct inode *inode = &ip->i_inode;
-       struct gfs2_rgrpd *rgd;
-       char buf[sizeof(struct gfs2_rindex)];
        struct file_ra_state ra_state;
-       uint64_t junk = ip->i_di.di_size;
+       u64 junk = ip->i_di.di_size;
        int error;
 
        if (do_div(junk, sizeof(struct gfs2_rindex))) {
@@ -456,49 +539,49 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
 
        file_ra_state_init(&ra_state, inode->i_mapping);
        for (sdp->sd_rgrps = 0;; sdp->sd_rgrps++) {
-               loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex);
-               error = gfs2_internal_read(ip, &ra_state, buf, &pos,
-                                           sizeof(struct gfs2_rindex));
-               if (!error)
-                       break;
-               if (error != sizeof(struct gfs2_rindex)) {
-                       if (error > 0)
-                               error = -EIO;
-                       goto fail;
+               error = read_rindex_entry(ip, &ra_state);
+               if (error) {
+                       clear_rgrpdi(sdp);
+                       return error;
                }
+       }
 
-               rgd = kzalloc(sizeof(struct gfs2_rgrpd), GFP_NOFS);
-               error = -ENOMEM;
-               if (!rgd)
-                       goto fail;
-
-               mutex_init(&rgd->rd_mutex);
-               lops_init_le(&rgd->rd_le, &gfs2_rg_lops);
-               rgd->rd_sbd = sdp;
-
-               list_add_tail(&rgd->rd_list, &sdp->sd_rindex_list);
-               list_add_tail(&rgd->rd_list_mru, &sdp->sd_rindex_mru_list);
-
-               gfs2_rindex_in(&rgd->rd_ri, buf);
-               error = compute_bitstructs(rgd);
-               if (error)
-                       goto fail;
+       sdp->sd_rindex_vn = ip->i_gl->gl_vn;
+       return 0;
+}
 
-               error = gfs2_glock_get(sdp, rgd->rd_ri.ri_addr,
-                                      &gfs2_rgrp_glops, CREATE, &rgd->rd_gl);
-               if (error)
-                       goto fail;
+/**
+ * gfs2_ri_update_special - Pull in a new resource index from the disk
+ *
+ * This is a special version that's safe to call from gfs2_inplace_reserve_i.
+ * In this case we know that we don't have any resource groups in memory yet.
+ *
+ * @ip: pointer to the rindex inode
+ *
+ * Returns: 0 on successful update, error code otherwise
+ */
+static int gfs2_ri_update_special(struct gfs2_inode *ip)
+{
+       struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
+       struct inode *inode = &ip->i_inode;
+       struct file_ra_state ra_state;
+       int error;
 
-               rgd->rd_gl->gl_object = rgd;
-               rgd->rd_rg_vn = rgd->rd_gl->gl_vn - 1;
+       file_ra_state_init(&ra_state, inode->i_mapping);
+       for (sdp->sd_rgrps = 0;; sdp->sd_rgrps++) {
+               /* Ignore partials */
+               if ((sdp->sd_rgrps + 1) * sizeof(struct gfs2_rindex) >
+                   ip->i_di.di_size)
+                       break;
+               error = read_rindex_entry(ip, &ra_state);
+               if (error) {
+                       clear_rgrpdi(sdp);
+                       return error;
+               }
        }
 
        sdp->sd_rindex_vn = ip->i_gl->gl_vn;
        return 0;
-
-fail:
-       clear_rgrpdi(sdp);
-       return error;
 }
 
 /**
@@ -575,15 +658,14 @@ int gfs2_rgrp_bh_get(struct gfs2_rgrpd *rgd)
 
        for (x = 0; x < length; x++) {
                bi = rgd->rd_bits + x;
-               error = gfs2_meta_read(gl, rgd->rd_ri.ri_addr + x, DIO_START,
-                                      &bi->bi_bh);
+               error = gfs2_meta_read(gl, rgd->rd_ri.ri_addr + x, 0, &bi->bi_bh);
                if (error)
                        goto fail;
        }
 
        for (y = length; y--;) {
                bi = rgd->rd_bits + y;
-               error = gfs2_meta_reread(sdp, bi->bi_bh, DIO_WAIT);
+               error = gfs2_meta_wait(sdp, bi->bi_bh);
                if (error)
                        goto fail;
                if (gfs2_metatype_check(sdp, bi->bi_bh, y ? GFS2_METATYPE_RB :
@@ -693,25 +775,12 @@ struct gfs2_alloc *gfs2_alloc_get(struct gfs2_inode *ip)
        return al;
 }
 
-/**
- * gfs2_alloc_put - throw away the struct gfs2_alloc for an inode
- * @ip: the inode
- *
- */
-
-void gfs2_alloc_put(struct gfs2_inode *ip)
-{
-       return;
-}
-
 /**
  * try_rgrp_fit - See if a given reservation will fit in a given RG
  * @rgd: the RG data
  * @al: the struct gfs2_alloc structure describing the reservation
  *
  * If there's room for the requested blocks to be allocated from the RG:
- *   Sets the $al_reserved_data field in @al.
- *   Sets the $al_reserved_meta field in @al.
  *   Sets the $al_rgd field in @al.
  *
  * Returns: 1 on success (it fits), 0 on failure (it doesn't fit)
@@ -722,6 +791,9 @@ static int try_rgrp_fit(struct gfs2_rgrpd *rgd, struct gfs2_alloc *al)
        struct gfs2_sbd *sdp = rgd->rd_sbd;
        int ret = 0;
 
+       if (rgd->rd_rg.rg_flags & GFS2_RGF_NOALLOC)
+               return 0;
+
        spin_lock(&sdp->sd_rindex_spin);
        if (rgd->rd_free_clone >= al->al_requested) {
                al->al_rgd = rgd;
@@ -741,7 +813,7 @@ static int try_rgrp_fit(struct gfs2_rgrpd *rgd, struct gfs2_alloc *al)
  */
 
 static struct gfs2_rgrpd *recent_rgrp_first(struct gfs2_sbd *sdp,
-                                           uint64_t rglast)
+                                           u64 rglast)
 {
        struct gfs2_rgrpd *rgd = NULL;
 
@@ -908,7 +980,7 @@ static int get_local_rgrp(struct gfs2_inode *ip)
        rgd = recent_rgrp_first(sdp, ip->i_last_rg_alloc);
 
        while (rgd) {
-               error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 
+               error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
                                           LM_FLAG_TRY, &al->al_rgd_gh);
                switch (error) {
                case 0:
@@ -954,9 +1026,13 @@ static int get_local_rgrp(struct gfs2_inode *ip)
                        rgd = gfs2_rgrpd_get_first(sdp);
 
                if (rgd == begin) {
-                       if (++loops >= 2 || !skipped)
+                       if (++loops >= 3)
                                return -ENOSPC;
+                       if (!skipped)
+                               loops++;
                        flags = 0;
+                       if (loops == 2)
+                               gfs2_log_flush(sdp, NULL);
                }
        }
 
@@ -985,18 +1061,25 @@ int gfs2_inplace_reserve_i(struct gfs2_inode *ip, char *file, unsigned int line)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct gfs2_alloc *al = &ip->i_alloc;
-       int error;
+       int error = 0;
 
        if (gfs2_assert_warn(sdp, al->al_requested))
                return -EINVAL;
 
-       error = gfs2_rindex_hold(sdp, &al->al_ri_gh);
+       /* We need to hold the rindex unless the inode we're using is
+          the rindex itself, in which case it's already held. */
+       if (ip != GFS2_I(sdp->sd_rindex))
+               error = gfs2_rindex_hold(sdp, &al->al_ri_gh);
+       else if (!sdp->sd_rgrps) /* We may not have the rindex read in, so: */
+               error = gfs2_ri_update_special(ip);
+
        if (error)
                return error;
 
        error = get_local_rgrp(ip);
        if (error) {
-               gfs2_glock_dq_uninit(&al->al_ri_gh);
+               if (ip != GFS2_I(sdp->sd_rindex))
+                       gfs2_glock_dq_uninit(&al->al_ri_gh);
                return error;
        }
 
@@ -1026,7 +1109,8 @@ void gfs2_inplace_release(struct gfs2_inode *ip)
 
        al->al_rgd = NULL;
        gfs2_glock_dq_uninit(&al->al_rgd_gh);
-       gfs2_glock_dq_uninit(&al->al_ri_gh);
+       if (ip != GFS2_I(sdp->sd_rindex))
+               gfs2_glock_dq_uninit(&al->al_ri_gh);
 }
 
 /**
@@ -1037,10 +1121,10 @@ void gfs2_inplace_release(struct gfs2_inode *ip)
  * Returns: The block type (GFS2_BLKST_*)
  */
 
-unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, uint64_t block)
+unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block)
 {
        struct gfs2_bitmap *bi = NULL;
-       uint32_t length, rgrp_block, buf_block;
+       u32 length, rgrp_block, buf_block;
        unsigned int buf;
        unsigned char type;
 
@@ -1083,12 +1167,12 @@ unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, uint64_t block)
  * Returns:  the block number allocated
  */
 
-static uint32_t rgblk_search(struct gfs2_rgrpd *rgd, uint32_t goal,
+static u32 rgblk_search(struct gfs2_rgrpd *rgd, u32 goal,
                             unsigned char old_state, unsigned char new_state)
 {
        struct gfs2_bitmap *bi = NULL;
-       uint32_t length = rgd->rd_ri.ri_length;
-       uint32_t blk = 0;
+       u32 length = rgd->rd_ri.ri_length;
+       u32 blk = 0;
        unsigned int buf, x;
 
        /* Find bitmap block that contains bits for goal block */
@@ -1148,12 +1232,12 @@ static uint32_t rgblk_search(struct gfs2_rgrpd *rgd, uint32_t goal,
  * Returns:  Resource group containing the block(s)
  */
 
-static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, uint64_t bstart,
-                                    uint32_t blen, unsigned char new_state)
+static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart,
+                                    u32 blen, unsigned char new_state)
 {
        struct gfs2_rgrpd *rgd;
        struct gfs2_bitmap *bi = NULL;
-       uint32_t length, rgrp_blk, buf_blk;
+       u32 length, rgrp_blk, buf_blk;
        unsigned int buf;
 
        rgd = gfs2_blk2rgrpd(sdp, bstart);
@@ -1206,8 +1290,8 @@ u64 gfs2_alloc_data(struct gfs2_inode *ip)
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct gfs2_alloc *al = &ip->i_alloc;
        struct gfs2_rgrpd *rgd = al->al_rgd;
-       uint32_t goal, blk;
-       uint64_t block;
+       u32 goal, blk;
+       u64 block;
 
        if (rgrp_contains_block(&rgd->rd_ri, ip->i_di.di_goal_data))
                goal = ip->i_di.di_goal_data - rgd->rd_ri.ri_data0;
@@ -1229,7 +1313,7 @@ u64 gfs2_alloc_data(struct gfs2_inode *ip)
        al->al_alloced++;
 
        gfs2_statfs_change(sdp, 0, -1, 0);
-       gfs2_quota_change(ip, +1, ip->i_di.di_uid, ip->i_di.di_gid);
+       gfs2_quota_change(ip, +1, ip->i_inode.i_uid, ip->i_inode.i_gid);
 
        spin_lock(&sdp->sd_rindex_spin);
        rgd->rd_free_clone--;
@@ -1250,8 +1334,8 @@ u64 gfs2_alloc_meta(struct gfs2_inode *ip)
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct gfs2_alloc *al = &ip->i_alloc;
        struct gfs2_rgrpd *rgd = al->al_rgd;
-       uint32_t goal, blk;
-       uint64_t block;
+       u32 goal, blk;
+       u64 block;
 
        if (rgrp_contains_block(&rgd->rd_ri, ip->i_di.di_goal_meta))
                goal = ip->i_di.di_goal_meta - rgd->rd_ri.ri_data0;
@@ -1273,7 +1357,7 @@ u64 gfs2_alloc_meta(struct gfs2_inode *ip)
        al->al_alloced++;
 
        gfs2_statfs_change(sdp, 0, -1, 0);
-       gfs2_quota_change(ip, +1, ip->i_di.di_uid, ip->i_di.di_gid);
+       gfs2_quota_change(ip, +1, ip->i_inode.i_uid, ip->i_inode.i_gid);
        gfs2_trans_add_unrevoke(sdp, block);
 
        spin_lock(&sdp->sd_rindex_spin);
@@ -1332,7 +1416,7 @@ u64 gfs2_alloc_di(struct gfs2_inode *dip, u64 *generation)
  *
  */
 
-void gfs2_free_data(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
+void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct gfs2_rgrpd *rgd;
@@ -1349,8 +1433,7 @@ void gfs2_free_data(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
        gfs2_trans_add_rg(rgd);
 
        gfs2_statfs_change(sdp, 0, +blen, 0);
-       gfs2_quota_change(ip, -(int64_t)blen,
-                        ip->i_di.di_uid, ip->i_di.di_gid);
+       gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid);
 }
 
 /**
@@ -1361,7 +1444,7 @@ void gfs2_free_data(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
  *
  */
 
-void gfs2_free_meta(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
+void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen)
 {
        struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
        struct gfs2_rgrpd *rgd;
@@ -1378,7 +1461,7 @@ void gfs2_free_meta(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
        gfs2_trans_add_rg(rgd);
 
        gfs2_statfs_change(sdp, 0, +blen, 0);
-       gfs2_quota_change(ip, -(int64_t)blen, ip->i_di.di_uid, ip->i_di.di_gid);
+       gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid);
        gfs2_meta_wipe(ip, bstart, blen);
 }
 
@@ -1397,7 +1480,7 @@ void gfs2_unlink_di(struct inode *inode)
        gfs2_trans_add_rg(rgd);
 }
 
-static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, uint64_t blkno)
+static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno)
 {
        struct gfs2_sbd *sdp = rgd->rd_sbd;
        struct gfs2_rgrpd *tmp_rgd;
@@ -1423,7 +1506,7 @@ static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, uint64_t blkno)
 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip)
 {
        gfs2_free_uninit_di(rgd, ip->i_num.no_addr);
-       gfs2_quota_change(ip, -1, ip->i_di.di_uid, ip->i_di.di_gid);
+       gfs2_quota_change(ip, -1, ip->i_inode.i_uid, ip->i_inode.i_gid);
        gfs2_meta_wipe(ip, ip->i_num.no_addr, 1);
 }
 
@@ -1440,7 +1523,7 @@ void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip)
  */
 
 void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist,
-                   uint64_t block)
+                   u64 block)
 {
        struct gfs2_rgrpd *rgd;
        struct gfs2_rgrpd **tmp;