diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index bb59783..a97ad74 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -38,8 +38,8 @@
 };
 
 typedef int (*block_call_t) (struct gfs2_inode *ip, struct buffer_head *dibh,
-			     struct buffer_head *bh, uint64_t *top,
-			     uint64_t *bottom, unsigned int height,
+			     struct buffer_head *bh, u64 *top,
+			     u64 *bottom, unsigned int height,
 			     void *data);
 
 struct strip_mine {
@@ -58,7 +58,7 @@
  */
 
 static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
-			       uint64_t block, struct page *page)
+			       u64 block, struct page *page)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct inode *inode = &ip->i_inode;
@@ -121,7 +121,7 @@
 int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page)
 {
 	struct buffer_head *bh, *dibh;
-	uint64_t block = 0;
+	u64 block = 0;
 	int isdir = gfs2_is_dir(ip);
 	int error;
 
@@ -161,7 +161,7 @@
 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 
 	if (ip->i_di.di_size) {
-		*(uint64_t *)(dibh->b_data + sizeof(struct gfs2_dinode)) =
+		*(u64 *)(dibh->b_data + sizeof(struct gfs2_dinode)) =
 			cpu_to_be64(block);
 		ip->i_di.di_blocks++;
 	}
@@ -190,10 +190,10 @@
  * Returns: the height the tree should be
  */
 
-static unsigned int calc_tree_height(struct gfs2_inode *ip, uint64_t size)
+static unsigned int calc_tree_height(struct gfs2_inode *ip, u64 size)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
-	uint64_t *arr;
+	u64 *arr;
 	unsigned int max, height;
 
 	if (ip->i_di.di_size > size)
@@ -336,11 +336,11 @@
  *
  */
 
-static void find_metapath(struct gfs2_inode *ip, uint64_t block,
+static void find_metapath(struct gfs2_inode *ip, u64 block,
 			  struct metapath *mp)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
-	uint64_t b = block;
+	u64 b = block;
 	unsigned int i;
 
 	for (i = ip->i_di.di_height; i--;)
@@ -390,10 +390,10 @@
 
 static int lookup_block(struct gfs2_inode *ip, struct buffer_head *bh,
 			unsigned int height, struct metapath *mp, int create,
-			int *new, uint64_t *block)
+			int *new, u64 *block)
 {
 	int boundary;
-	uint64_t *ptr = metapointer(bh, &boundary, height, mp);
+	u64 *ptr = metapointer(bh, &boundary, height, mp);
 
 	if (*ptr) {
 		*block = be64_to_cpu(*ptr);
@@ -594,13 +594,13 @@
 
 static int recursive_scan(struct gfs2_inode *ip, struct buffer_head *dibh,
 			  struct metapath *mp, unsigned int height,
-			  uint64_t block, int first, block_call_t bc,
+			  u64 block, int first, block_call_t bc,
 			  void *data)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct buffer_head *bh = NULL;
-	uint64_t *top, *bottom;
-	uint64_t bn;
+	u64 *top, *bottom;
+	u64 bn;
 	int error;
 	int mh_size = sizeof(struct gfs2_meta_header);
 
@@ -617,10 +617,10 @@
 		if (error)
 			return error;
 
-		top = (uint64_t *)(bh->b_data + mh_size) +
+		top = (u64 *)(bh->b_data + mh_size) +
 				  ((first) ? mp->mp_list[height] : 0);
 
-		bottom = (uint64_t *)(bh->b_data + mh_size) + sdp->sd_inptrs;
+		bottom = (u64 *)(bh->b_data + mh_size) + sdp->sd_inptrs;
 	}
 
 	error = bc(ip, dibh, bh, top, bottom, height, data);
@@ -659,15 +659,15 @@
  */
 
 static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh,
-		    struct buffer_head *bh, uint64_t *top, uint64_t *bottom,
+		    struct buffer_head *bh, u64 *top, u64 *bottom,
 		    unsigned int height, void *data)
 {
 	struct strip_mine *sm = data;
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_rgrp_list rlist;
-	uint64_t bn, bstart;
-	uint32_t blen;
-	uint64_t *p;
+	u64 bn, bstart;
+	u32 blen;
+	u64 *p;
 	unsigned int rg_blocks = 0;
 	int metadata;
 	unsigned int revokes = 0;
@@ -804,7 +804,7 @@
  * Returns: errno
  */
 
-static int do_grow(struct gfs2_inode *ip, uint64_t size)
+static int do_grow(struct gfs2_inode *ip, u64 size)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_alloc *al;
@@ -949,7 +949,7 @@
 	return err;
 }
 
-static int trunc_start(struct gfs2_inode *ip, uint64_t size)
+static int trunc_start(struct gfs2_inode *ip, u64 size)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct buffer_head *dibh;
@@ -974,7 +974,7 @@
 		error = 1;
 
 	} else {
-		if (size & (uint64_t)(sdp->sd_sb.sb_bsize - 1))
+		if (size & (u64)(sdp->sd_sb.sb_bsize - 1))
 			error = gfs2_block_truncate_page(ip->i_inode.i_mapping);
 
 		if (!error) {
@@ -993,10 +993,10 @@
 	return error;
 }
 
-static int trunc_dealloc(struct gfs2_inode *ip, uint64_t size)
+static int trunc_dealloc(struct gfs2_inode *ip, u64 size)
 {
 	unsigned int height = ip->i_di.di_height;
-	uint64_t lblock;
+	u64 lblock;
 	struct metapath mp;
 	int error;
 
@@ -1076,7 +1076,7 @@
  * Returns: errno
  */
 
-static int do_shrink(struct gfs2_inode *ip, uint64_t size)
+static int do_shrink(struct gfs2_inode *ip, u64 size)
 {
 	int error;
 
@@ -1104,7 +1104,7 @@
  * Returns: errno
  */
 
-int gfs2_truncatei(struct gfs2_inode *ip, uint64_t size)
+int gfs2_truncatei(struct gfs2_inode *ip, u64 size)
 {
 	int error;
 
@@ -1172,12 +1172,12 @@
  * Returns: errno
  */
 
-int gfs2_write_alloc_required(struct gfs2_inode *ip, uint64_t offset,
+int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
 			      unsigned int len, int *alloc_required)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
-	uint64_t lblock, lblock_stop, dblock;
-	uint32_t extlen;
+	u64 lblock, lblock_stop, dblock;
+	u32 extlen;
 	int new = 0;
 	int error = 0;
 
diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
index ab0157c..cb3b624 100644
--- a/fs/gfs2/bmap.h
+++ b/fs/gfs2/bmap.h
@@ -14,14 +14,14 @@
 int gfs2_block_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, int *boundary);
 int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen);
 
-int gfs2_truncatei(struct gfs2_inode *ip, uint64_t size);
+int gfs2_truncatei(struct gfs2_inode *ip, u64 size);
 int gfs2_truncatei_resume(struct gfs2_inode *ip);
 int gfs2_file_dealloc(struct gfs2_inode *ip);
 
 void gfs2_write_calc_reserv(struct gfs2_inode *ip, unsigned int len,
 			    unsigned int *data_blocks,
 			    unsigned int *ind_blocks);
-int gfs2_write_alloc_required(struct gfs2_inode *ip, uint64_t offset,
+int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
 			      unsigned int len, int *alloc_required);
 
 #endif /* __BMAP_DOT_H__ */
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
index 59d0cbc..2023dc4 100644
--- a/fs/gfs2/dir.c
+++ b/fs/gfs2/dir.c
@@ -78,15 +78,15 @@
 #define IS_LEAF     1 /* Hashed (leaf) directory */
 #define IS_DINODE   2 /* Linear (stuffed dinode block) directory */
 
-#define gfs2_disk_hash2offset(h) (((uint64_t)(h)) >> 1)
-#define gfs2_dir_offset2hash(p) ((uint32_t)(((uint64_t)(p)) << 1))
+#define gfs2_disk_hash2offset(h) (((u64)(h)) >> 1)
+#define gfs2_dir_offset2hash(p) ((u32)(((u64)(p)) << 1))
 
 typedef int (*leaf_call_t) (struct gfs2_inode *dip,
-			    uint32_t index, uint32_t len, uint64_t leaf_no,
+			    u32 index, u32 len, u64 leaf_no,
 			    void *data);
 
 
-int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, uint64_t block,
+int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, u64 block,
 			    struct buffer_head **bhp)
 {
 	struct buffer_head *bh;
@@ -99,7 +99,7 @@
 	return 0;
 }
 
-static int gfs2_dir_get_existing_buffer(struct gfs2_inode *ip, uint64_t block,
+static int gfs2_dir_get_existing_buffer(struct gfs2_inode *ip, u64 block,
 					struct buffer_head **bhp)
 {
 	struct buffer_head *bh;
@@ -151,12 +151,12 @@
  * Returns: The number of bytes correctly written or error code
  */
 static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
-			       uint64_t offset, unsigned int size)
+			       u64 offset, unsigned int size)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct buffer_head *dibh;
-	uint64_t lblock, dblock;
-	uint32_t extlen = 0;
+	u64 lblock, dblock;
+	u32 extlen = 0;
 	unsigned int o;
 	int copied = 0;
 	int error = 0;
@@ -271,11 +271,11 @@
  * Returns: The amount of data actually copied or the error
  */
 static int gfs2_dir_read_data(struct gfs2_inode *ip, char *buf,
-			      uint64_t offset, unsigned int size)
+			      u64 offset, unsigned int size)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
-	uint64_t lblock, dblock;
-	uint32_t extlen = 0;
+	u64 lblock, dblock;
+	u32 extlen = 0;
 	unsigned int o;
 	int copied = 0;
 	int error = 0;
@@ -581,7 +581,7 @@
 {
 	struct gfs2_dirent *tmp, *cur;
 	char *bh_end;
-	uint16_t cur_rec_len;
+	u16 cur_rec_len;
 
 	cur = *dent;
 	bh_end = bh->b_data + bh->b_size;
@@ -630,7 +630,7 @@
 static void dirent_del(struct gfs2_inode *dip, struct buffer_head *bh,
 		       struct gfs2_dirent *prev, struct gfs2_dirent *cur)
 {
-	uint16_t cur_rec_len, prev_rec_len;
+	u16 cur_rec_len, prev_rec_len;
 
 	if (!cur->de_inum.no_addr) {
 		gfs2_consist_inode(dip);
@@ -698,7 +698,7 @@
 	return gfs2_init_dirent(inode, dent, name, bh);
 }
 
-static int get_leaf(struct gfs2_inode *dip, uint64_t leaf_no,
+static int get_leaf(struct gfs2_inode *dip, u64 leaf_no,
 		    struct buffer_head **bhp)
 {
 	int error;
@@ -721,16 +721,16 @@
  * Returns: 0 on success, error code otherwise
  */
 
-static int get_leaf_nr(struct gfs2_inode *dip, uint32_t index,
-		       uint64_t *leaf_out)
+static int get_leaf_nr(struct gfs2_inode *dip, u32 index,
+		       u64 *leaf_out)
 {
-	uint64_t leaf_no;
+	u64 leaf_no;
 	int error;
 
 	error = gfs2_dir_read_data(dip, (char *)&leaf_no,
-				    index * sizeof(uint64_t),
-				    sizeof(uint64_t));
-	if (error != sizeof(uint64_t))
+				    index * sizeof(u64),
+				    sizeof(u64));
+	if (error != sizeof(u64))
 		return (error < 0) ? error : -EIO;
 
 	*leaf_out = be64_to_cpu(leaf_no);
@@ -738,10 +738,10 @@
 	return 0;
 }
 
-static int get_first_leaf(struct gfs2_inode *dip, uint32_t index,
+static int get_first_leaf(struct gfs2_inode *dip, u32 index,
 			  struct buffer_head **bh_out)
 {
-	uint64_t leaf_no;
+	u64 leaf_no;
 	int error;
 
 	error = get_leaf_nr(dip, index, &leaf_no);
@@ -847,8 +847,8 @@
 	struct buffer_head *bh, *dibh;
 	struct gfs2_leaf *leaf;
 	int y;
-	uint32_t x;
-	uint64_t *lp, bn;
+	u32 x;
+	u64 *lp, bn;
 	int error;
 
 	error = gfs2_meta_inode_buffer(dip, &dibh);
@@ -904,7 +904,7 @@
 	gfs2_trans_add_bh(dip->i_gl, dibh, 1);
 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
 
-	lp = (uint64_t *)(dibh->b_data + sizeof(struct gfs2_dinode));
+	lp = (u64 *)(dibh->b_data + sizeof(struct gfs2_dinode));
 
 	for (x = sdp->sd_hash_ptrs; x--; lp++)
 		*lp = cpu_to_be64(bn);
@@ -939,9 +939,9 @@
 	struct buffer_head *nbh, *obh, *dibh;
 	struct gfs2_leaf *nleaf, *oleaf;
 	struct gfs2_dirent *dent = NULL, *prev = NULL, *next = NULL, *new;
-	uint32_t start, len, half_len, divider;
-	uint64_t bn, *lp, leaf_no;
-	uint32_t index;
+	u32 start, len, half_len, divider;
+	u64 bn, *lp, leaf_no;
+	u32 index;
 	int x, moved = 0;
 	int error;
 
@@ -985,14 +985,14 @@
 	/* Change the pointers.
 	   Don't bother distinguishing stuffed from non-stuffed.
 	   This code is complicated enough already. */
-	lp = kmalloc(half_len * sizeof(uint64_t), GFP_NOFS | __GFP_NOFAIL);
+	lp = kmalloc(half_len * sizeof(u64), GFP_NOFS | __GFP_NOFAIL);
 	/*  Change the pointers  */
 	for (x = 0; x < half_len; x++)
 		lp[x] = cpu_to_be64(bn);
 
-	error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(uint64_t),
-				    half_len * sizeof(uint64_t));
-	if (error != half_len * sizeof(uint64_t)) {
+	error = gfs2_dir_write_data(dip, (char *)lp, start * sizeof(u64),
+				    half_len * sizeof(u64));
+	if (error != half_len * sizeof(u64)) {
 		if (error >= 0)
 			error = -EIO;
 		goto fail_lpfree;
@@ -1077,15 +1077,15 @@
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
 	struct buffer_head *dibh;
-	uint32_t hsize;
-	uint64_t *buf;
-	uint64_t *from, *to;
-	uint64_t block;
+	u32 hsize;
+	u64 *buf;
+	u64 *from, *to;
+	u64 block;
 	int x;
 	int error = 0;
 
 	hsize = 1 << dip->i_di.di_depth;
-	if (hsize * sizeof(uint64_t) != dip->i_di.di_size) {
+	if (hsize * sizeof(u64) != dip->i_di.di_size) {
 		gfs2_consist_inode(dip);
 		return -EIO;
 	}
@@ -1105,7 +1105,7 @@
 		}
 
 		from = buf;
-		to = (uint64_t *)((char *)buf + sdp->sd_hash_bsize);
+		to = (u64 *)((char *)buf + sdp->sd_hash_bsize);
 
 		for (x = sdp->sd_hash_ptrs; x--; from++) {
 			*to++ = *from;	/*  No endianess worries  */
@@ -1153,7 +1153,7 @@
 static int compare_dents(const void *a, const void *b)
 {
 	struct gfs2_dirent *dent_a, *dent_b;
-	uint32_t hash_a, hash_b;
+	u32 hash_a, hash_b;
 	int ret = 0;
 
 	dent_a = *(struct gfs2_dirent **)a;
@@ -1201,14 +1201,14 @@
  * Returns: errno, >0 on exception from filldir
  */
 
-static int do_filldir_main(struct gfs2_inode *dip, uint64_t *offset,
+static int do_filldir_main(struct gfs2_inode *dip, u64 *offset,
 			   void *opaque, gfs2_filldir_t filldir,
-			   const struct gfs2_dirent **darr, uint32_t entries,
+			   const struct gfs2_dirent **darr, u32 entries,
 			   int *copied)
 {
 	const struct gfs2_dirent *dent, *dent_next;
 	struct gfs2_inum inum;
-	uint64_t off, off_next;
+	u64 off, off_next;
 	unsigned int x, y;
 	int run = 0;
 	int error = 0;
@@ -1346,21 +1346,21 @@
  * Returns: errno
  */
 
-static int dir_e_read(struct inode *inode, uint64_t *offset, void *opaque,
+static int dir_e_read(struct inode *inode, u64 *offset, void *opaque,
 		      gfs2_filldir_t filldir)
 {
 	struct gfs2_inode *dip = GFS2_I(inode);
 	struct gfs2_sbd *sdp = GFS2_SB(inode);
-	uint32_t hsize, len = 0;
-	uint32_t ht_offset, lp_offset, ht_offset_cur = -1;
-	uint32_t hash, index;
-	uint64_t *lp;
+	u32 hsize, len = 0;
+	u32 ht_offset, lp_offset, ht_offset_cur = -1;
+	u32 hash, index;
+	u64 *lp;
 	int copied = 0;
 	int error = 0;
 	unsigned depth = 0;
 
 	hsize = 1 << dip->i_di.di_depth;
-	if (hsize * sizeof(uint64_t) != dip->i_di.di_size) {
+	if (hsize * sizeof(u64) != dip->i_di.di_size) {
 		gfs2_consist_inode(dip);
 		return -EIO;
 	}
@@ -1378,7 +1378,7 @@
 
 		if (ht_offset_cur != ht_offset) {
 			error = gfs2_dir_read_data(dip, (char *)lp,
-						ht_offset * sizeof(uint64_t),
+						ht_offset * sizeof(u64),
 						sdp->sd_hash_bsize);
 			if (error != sdp->sd_hash_bsize) {
 				if (error >= 0)
@@ -1405,7 +1405,7 @@
 	return error;
 }
 
-int gfs2_dir_read(struct inode *inode, uint64_t *offset, void *opaque,
+int gfs2_dir_read(struct inode *inode, u64 *offset, void *opaque,
 		  gfs2_filldir_t filldir)
 {
 	struct gfs2_inode *dip = GFS2_I(inode);
@@ -1725,15 +1725,15 @@
 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
 	struct buffer_head *bh;
 	struct gfs2_leaf *leaf;
-	uint32_t hsize, len;
-	uint32_t ht_offset, lp_offset, ht_offset_cur = -1;
-	uint32_t index = 0;
-	uint64_t *lp;
-	uint64_t leaf_no;
+	u32 hsize, len;
+	u32 ht_offset, lp_offset, ht_offset_cur = -1;
+	u32 index = 0;
+	u64 *lp;
+	u64 leaf_no;
 	int error = 0;
 
 	hsize = 1 << dip->i_di.di_depth;
-	if (hsize * sizeof(uint64_t) != dip->i_di.di_size) {
+	if (hsize * sizeof(u64) != dip->i_di.di_size) {
 		gfs2_consist_inode(dip);
 		return -EIO;
 	}
@@ -1748,7 +1748,7 @@
 
 		if (ht_offset_cur != ht_offset) {
 			error = gfs2_dir_read_data(dip, (char *)lp,
-						ht_offset * sizeof(uint64_t),
+						ht_offset * sizeof(u64),
 						sdp->sd_hash_bsize);
 			if (error != sdp->sd_hash_bsize) {
 				if (error >= 0)
@@ -1798,17 +1798,17 @@
  * Returns: errno
  */
 
-static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len,
-			uint64_t leaf_no, void *data)
+static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len,
+			u64 leaf_no, void *data)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
 	struct gfs2_leaf *tmp_leaf;
 	struct gfs2_rgrp_list rlist;
 	struct buffer_head *bh, *dibh;
-	uint64_t blk, nblk;
+	u64 blk, nblk;
 	unsigned int rg_blocks = 0, l_blocks = 0;
 	char *ht;
-	unsigned int x, size = len * sizeof(uint64_t);
+	unsigned int x, size = len * sizeof(u64);
 	int error;
 
 	memset(&rlist, 0, sizeof(struct gfs2_rgrp_list));
@@ -1874,7 +1874,7 @@
 		dip->i_di.di_blocks--;
 	}
 
-	error = gfs2_dir_write_data(dip, ht, index * sizeof(uint64_t), size);
+	error = gfs2_dir_write_data(dip, ht, index * sizeof(u64), size);
 	if (error != size) {
 		if (error >= 0)
 			error = -EIO;
diff --git a/fs/gfs2/dir.h b/fs/gfs2/dir.h
index 366a557..f1f83fa 100644
--- a/fs/gfs2/dir.h
+++ b/fs/gfs2/dir.h
@@ -24,7 +24,7 @@
 
 typedef int (*gfs2_filldir_t) (void *opaque,
 			      const char *name, unsigned int length,
-			      uint64_t offset,
+			      u64 offset,
 			      struct gfs2_inum *inum, unsigned int type);
 
 int gfs2_dir_search(struct inode *dir, const struct qstr *filename,
@@ -32,7 +32,7 @@
 int gfs2_dir_add(struct inode *inode, const struct qstr *filename,
 		 const struct gfs2_inum *inum, unsigned int type);
 int gfs2_dir_del(struct gfs2_inode *dip, const struct qstr *filename);
-int gfs2_dir_read(struct inode *inode, uint64_t * offset, void *opaque,
+int gfs2_dir_read(struct inode *inode, u64 * offset, void *opaque,
 		  gfs2_filldir_t filldir);
 int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename,
 		   struct gfs2_inum *new_inum, unsigned int new_type);
@@ -41,10 +41,10 @@
 
 int gfs2_diradd_alloc_required(struct inode *dir,
 			       const struct qstr *filename);
-int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, uint64_t block,
+int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, u64 block,
 			    struct buffer_head **bhp);
 
-static inline uint32_t gfs2_disk_hash(const char *data, int len)
+static inline u32 gfs2_disk_hash(const char *data, int len)
 {
         return crc32_le(0xFFFFFFFF, data, len) ^ 0xFFFFFFFF;
 }
diff --git a/fs/gfs2/eattr.c b/fs/gfs2/eattr.c
index 5a56e65..f6b5e306 100644
--- a/fs/gfs2/eattr.c
+++ b/fs/gfs2/eattr.c
@@ -115,7 +115,7 @@
 static int ea_foreach(struct gfs2_inode *ip, ea_call_t ea_call, void *data)
 {
 	struct buffer_head *bh, *eabh;
-	uint64_t *eablk, *end;
+	u64 *eablk, *end;
 	int error;
 
 	error = gfs2_meta_read(ip->i_gl, ip->i_di.di_eattr,
@@ -133,11 +133,11 @@
 		goto out;
 	}
 
-	eablk = (uint64_t *)(bh->b_data + sizeof(struct gfs2_meta_header));
+	eablk = (u64 *)(bh->b_data + sizeof(struct gfs2_meta_header));
 	end = eablk + GFS2_SB(&ip->i_inode)->sd_inptrs;
 
 	for (; eablk < end; eablk++) {
-		uint64_t bn;
+		u64 bn;
 
 		if (!*eablk)
 			break;
@@ -235,8 +235,8 @@
 	struct gfs2_rgrpd *rgd;
 	struct gfs2_holder rg_gh;
 	struct buffer_head *dibh;
-	uint64_t *dataptrs, bn = 0;
-	uint64_t bstart = 0;
+	u64 *dataptrs, bn = 0;
+	u64 bstart = 0;
 	unsigned int blen = 0;
 	unsigned int blks = 0;
 	unsigned int x;
@@ -296,7 +296,7 @@
 		gfs2_free_meta(ip, bstart, blen);
 
 	if (prev && !leave) {
-		uint32_t len;
+		u32 len;
 
 		len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea);
 		prev->ea_rec_len = cpu_to_be32(len);
@@ -459,7 +459,7 @@
 	struct buffer_head **bh;
 	unsigned int amount = GFS2_EA_DATA_LEN(ea);
 	unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
-	uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea);
+	u64 *dataptrs = GFS2_EA2DATAPTRS(ea);
 	unsigned int x;
 	int error = 0;
 
@@ -601,7 +601,7 @@
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_ea_header *ea;
-	uint64_t block;
+	u64 block;
 
 	block = gfs2_alloc_meta(ip);
 
@@ -649,7 +649,7 @@
 		ea->ea_num_ptrs = 0;
 		memcpy(GFS2_EA2DATA(ea), er->er_data, er->er_data_len);
 	} else {
-		uint64_t *dataptr = GFS2_EA2DATAPTRS(ea);
+		u64 *dataptr = GFS2_EA2DATAPTRS(ea);
 		const char *data = er->er_data;
 		unsigned int data_len = er->er_data_len;
 		unsigned int copy;
@@ -658,7 +658,7 @@
 		ea->ea_num_ptrs = DIV_ROUND_UP(er->er_data_len, sdp->sd_jbsize);
 		for (x = 0; x < ea->ea_num_ptrs; x++) {
 			struct buffer_head *bh;
-			uint64_t block;
+			u64 block;
 			int mh_size = sizeof(struct gfs2_meta_header);
 
 			block = gfs2_alloc_meta(ip);
@@ -676,7 +676,7 @@
 				memset(bh->b_data + mh_size + copy, 0,
 				       sdp->sd_jbsize - copy);
 
-			*dataptr++ = cpu_to_be64((uint64_t)bh->b_blocknr);
+			*dataptr++ = cpu_to_be64((u64)bh->b_blocknr);
 			data += copy;
 			data_len -= copy;
 
@@ -792,10 +792,10 @@
 
 static struct gfs2_ea_header *ea_split_ea(struct gfs2_ea_header *ea)
 {
-	uint32_t ea_size = GFS2_EA_SIZE(ea);
+	u32 ea_size = GFS2_EA_SIZE(ea);
 	struct gfs2_ea_header *new = (struct gfs2_ea_header *)((char *)ea +
 				     ea_size);
-	uint32_t new_size = GFS2_EA_REC_LEN(ea) - ea_size;
+	u32 new_size = GFS2_EA_REC_LEN(ea) - ea_size;
 	int last = ea->ea_flags & GFS2_EAFLAG_LAST;
 
 	ea->ea_rec_len = cpu_to_be32(ea_size);
@@ -812,7 +812,7 @@
 {
 	struct gfs2_ea_header *ea = el->el_ea;
 	struct gfs2_ea_header *prev = el->el_prev;
-	uint32_t len;
+	u32 len;
 
 	gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
 
@@ -953,12 +953,12 @@
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct buffer_head *indbh, *newbh;
-	uint64_t *eablk;
+	u64 *eablk;
 	int error;
 	int mh_size = sizeof(struct gfs2_meta_header);
 
 	if (ip->i_di.di_flags & GFS2_DIF_EA_INDIRECT) {
-		uint64_t *end;
+		u64 *end;
 
 		error = gfs2_meta_read(ip->i_gl, ip->i_di.di_eattr,
 				       DIO_START | DIO_WAIT, &indbh);
@@ -970,7 +970,7 @@
 			goto out;
 		}
 
-		eablk = (uint64_t *)(indbh->b_data + mh_size);
+		eablk = (u64 *)(indbh->b_data + mh_size);
 		end = eablk + sdp->sd_inptrs;
 
 		for (; eablk < end; eablk++)
@@ -984,7 +984,7 @@
 
 		gfs2_trans_add_bh(ip->i_gl, indbh, 1);
 	} else {
-		uint64_t blk;
+		u64 blk;
 
 		blk = gfs2_alloc_meta(ip);
 
@@ -993,7 +993,7 @@
 		gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN);
 		gfs2_buffer_clear_tail(indbh, mh_size);
 
-		eablk = (uint64_t *)(indbh->b_data + mh_size);
+		eablk = (u64 *)(indbh->b_data + mh_size);
 		*eablk = cpu_to_be64(ip->i_di.di_eattr);
 		ip->i_di.di_eattr = blk;
 		ip->i_di.di_flags |= GFS2_DIF_EA_INDIRECT;
@@ -1006,7 +1006,7 @@
 	if (error)
 		goto out;
 
-	*eablk = cpu_to_be64((uint64_t)newbh->b_blocknr);
+	*eablk = cpu_to_be64((u64)newbh->b_blocknr);
 	error = ea_write(ip, GFS2_EA_BH2FIRST(newbh), er);
 	brelse(newbh);
 	if (error)
@@ -1140,7 +1140,7 @@
 	gfs2_trans_add_bh(ip->i_gl, el->el_bh, 1);
 
 	if (prev) {
-		uint32_t len;
+		u32 len;
 
 		len = GFS2_EA_REC_LEN(prev) + GFS2_EA_REC_LEN(ea);
 		prev->ea_rec_len = cpu_to_be32(len);
@@ -1225,7 +1225,7 @@
 	struct buffer_head **bh;
 	unsigned int amount = GFS2_EA_DATA_LEN(ea);
 	unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
-	uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea);
+	u64 *dataptrs = GFS2_EA2DATAPTRS(ea);
 	unsigned int x;
 	int error;
 
@@ -1325,9 +1325,9 @@
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_rgrp_list rlist;
 	struct buffer_head *indbh, *dibh;
-	uint64_t *eablk, *end;
+	u64 *eablk, *end;
 	unsigned int rg_blocks = 0;
-	uint64_t bstart = 0;
+	u64 bstart = 0;
 	unsigned int blen = 0;
 	unsigned int blks = 0;
 	unsigned int x;
@@ -1345,11 +1345,11 @@
 		goto out;
 	}
 
-	eablk = (uint64_t *)(indbh->b_data + sizeof(struct gfs2_meta_header));
+	eablk = (u64 *)(indbh->b_data + sizeof(struct gfs2_meta_header));
 	end = eablk + sdp->sd_inptrs;
 
 	for (; eablk < end; eablk++) {
-		uint64_t bn;
+		u64 bn;
 
 		if (!*eablk)
 			break;
@@ -1390,12 +1390,12 @@
 
 	gfs2_trans_add_bh(ip->i_gl, indbh, 1);
 
-	eablk = (uint64_t *)(indbh->b_data + sizeof(struct gfs2_meta_header));
+	eablk = (u64 *)(indbh->b_data + sizeof(struct gfs2_meta_header));
 	bstart = 0;
 	blen = 0;
 
 	for (; eablk < end; eablk++) {
-		uint64_t bn;
+		u64 bn;
 
 		if (!*eablk)
 			break;
diff --git a/fs/gfs2/eattr.h b/fs/gfs2/eattr.h
index 7b0291f..85c70c3 100644
--- a/fs/gfs2/eattr.h
+++ b/fs/gfs2/eattr.h
@@ -16,7 +16,7 @@
 #define GFS2_EA_SIZE(ea) \
 ALIGN(sizeof(struct gfs2_ea_header) + (ea)->ea_name_len + \
       ((GFS2_EA_IS_STUFFED(ea)) ? GFS2_EA_DATA_LEN(ea) : \
-                                  (sizeof(uint64_t) * (ea)->ea_num_ptrs)), 8)
+                                  (sizeof(u64) * (ea)->ea_num_ptrs)), 8)
 
 #define GFS2_EA_IS_STUFFED(ea) (!(ea)->ea_num_ptrs)
 #define GFS2_EA_IS_LAST(ea) ((ea)->ea_flags & GFS2_EAFLAG_LAST)
@@ -26,13 +26,13 @@
 
 #define GFS2_EAREQ_SIZE_UNSTUFFED(sdp, er) \
 ALIGN(sizeof(struct gfs2_ea_header) + (er)->er_name_len + \
-      sizeof(uint64_t) * DIV_ROUND_UP((er)->er_data_len, (sdp)->sd_jbsize), 8)
+      sizeof(u64) * DIV_ROUND_UP((er)->er_data_len, (sdp)->sd_jbsize), 8)
 
 #define GFS2_EA2NAME(ea) ((char *)((struct gfs2_ea_header *)(ea) + 1))
 #define GFS2_EA2DATA(ea) (GFS2_EA2NAME(ea) + (ea)->ea_name_len)
 
 #define GFS2_EA2DATAPTRS(ea) \
-((uint64_t *)(GFS2_EA2NAME(ea) + ALIGN((ea)->ea_name_len, 8)))
+((u64 *)(GFS2_EA2NAME(ea) + ALIGN((ea)->ea_name_len, 8)))
 
 #define GFS2_EA2NEXT(ea) \
 ((struct gfs2_ea_header *)((char *)(ea) + GFS2_EA_REC_LEN(ea)))
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 1c916fe..f2edc8b 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -87,7 +87,7 @@
 {
 	unsigned int h;
 
-	h = jhash(&name->ln_number, sizeof(uint64_t), 0);
+	h = jhash(&name->ln_number, sizeof(u64), 0);
 	h = jhash(&name->ln_type, sizeof(unsigned int), h);
 	h &= GFS2_GL_HASH_MASK;
 
@@ -255,7 +255,7 @@
  * Returns: errno
  */
 
-int gfs2_glock_get(struct gfs2_sbd *sdp, uint64_t number,
+int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
 		   const struct gfs2_glock_operations *glops, int create,
 		   struct gfs2_glock **glp)
 {
@@ -1415,7 +1415,7 @@
  * Returns: errno
  */
 
-int gfs2_glock_nq_num(struct gfs2_sbd *sdp, uint64_t number,
+int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number,
 		      const struct gfs2_glock_operations *glops,
 		      unsigned int state, int flags, struct gfs2_holder *gh)
 {
@@ -1613,7 +1613,7 @@
  * Returns: errno
  */
 
-void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, uint64_t number,
+void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, u64 number,
 			     const struct gfs2_glock_operations *glops,
 			     unsigned int state, int flags)
 {
diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h
index 1a90a19..4762cdb0 100644
--- a/fs/gfs2/glock.h
+++ b/fs/gfs2/glock.h
@@ -74,7 +74,7 @@
 }
 
 int gfs2_glock_get(struct gfs2_sbd *sdp,
-		   uint64_t number, const struct gfs2_glock_operations *glops,
+		   u64 number, const struct gfs2_glock_operations *glops,
 		   int create, struct gfs2_glock **glp);
 void gfs2_glock_hold(struct gfs2_glock *gl);
 int gfs2_glock_put(struct gfs2_glock *gl);
@@ -96,14 +96,14 @@
 
 void gfs2_glock_dq_uninit(struct gfs2_holder *gh);
 int gfs2_glock_nq_num(struct gfs2_sbd *sdp,
-		      uint64_t number, const struct gfs2_glock_operations *glops,
+		      u64 number, const struct gfs2_glock_operations *glops,
 		      unsigned int state, int flags, struct gfs2_holder *gh);
 
 int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs);
 void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs);
 void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs);
 
-void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, uint64_t number,
+void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, u64 number,
 			     const struct gfs2_glock_operations *glops,
 			     unsigned int state, int flags);
 void gfs2_glock_inode_squish(struct inode *inode);
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index 06f5ec6..407afd1 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -60,9 +60,9 @@
 struct gfs2_bitmap {
 	struct buffer_head *bi_bh;
 	char *bi_clone;
-	uint32_t bi_offset;
-	uint32_t bi_start;
-	uint32_t bi_len;
+	u32 bi_offset;
+	u32 bi_start;
+	u32 bi_len;
 };
 
 struct gfs2_rgrpd {
@@ -72,14 +72,14 @@
 	struct gfs2_glock *rd_gl;	/* Glock for this rgrp */
 	struct gfs2_rindex rd_ri;
 	struct gfs2_rgrp rd_rg;
-	uint64_t rd_rg_vn;
+	u64 rd_rg_vn;
 	struct gfs2_bitmap *rd_bits;
 	unsigned int rd_bh_count;
 	struct mutex rd_mutex;
-	uint32_t rd_free_clone;
+	u32 rd_free_clone;
 	struct gfs2_log_element rd_le;
-	uint32_t rd_last_alloc_data;
-	uint32_t rd_last_alloc_meta;
+	u32 rd_last_alloc_data;
+	u32 rd_last_alloc_meta;
 	struct gfs2_sbd *rd_sbd;
 };
 
@@ -185,7 +185,7 @@
 	char *gl_lvb;
 	atomic_t gl_lvb_count;
 
-	uint64_t gl_vn;
+	u64 gl_vn;
 	unsigned long gl_stamp;
 	void *gl_object;
 
@@ -232,14 +232,14 @@
 
 	unsigned long i_flags;		/* GIF_... */
 
-	uint64_t i_vn;
+	u64 i_vn;
 	struct gfs2_dinode i_di; /* To be replaced by ref to block */
 
 	struct gfs2_glock *i_gl; /* Move into i_gh? */
 	struct gfs2_holder i_iopen_gh;
 	struct gfs2_holder i_gh; /* for prepare/commit_write only */
 	struct gfs2_alloc i_alloc;
-	uint64_t i_last_rg_alloc;
+	u64 i_last_rg_alloc;
 
 	spinlock_t i_spin;
 	struct rw_semaphore i_rw_mutex;
@@ -277,12 +277,12 @@
 
 struct gfs2_revoke {
 	struct gfs2_log_element rv_le;
-	uint64_t rv_blkno;
+	u64 rv_blkno;
 };
 
 struct gfs2_revoke_replay {
 	struct list_head rr_list;
-	uint64_t rr_blkno;
+	u64 rr_blkno;
 	unsigned int rr_where;
 };
 
@@ -304,11 +304,11 @@
 	struct list_head qd_list;
 	unsigned int qd_count;
 
-	uint32_t qd_id;
+	u32 qd_id;
 	unsigned long qd_flags;		/* QDF_... */
 
-	int64_t qd_change;
-	int64_t qd_change_sync;
+	s64 qd_change;
+	s64 qd_change_sync;
 
 	unsigned int qd_slot;
 	unsigned int qd_slot_count;
@@ -320,7 +320,7 @@
 	struct gfs2_glock *qd_gl;
 	struct gfs2_quota_lvb qd_qb;
 
-	uint64_t qd_sync_gen;
+	u64 qd_sync_gen;
 	unsigned long qd_last_warn;
 	unsigned long qd_last_touched;
 };
@@ -358,7 +358,7 @@
 	struct list_head ai_ail1_list;
 	struct list_head ai_ail2_list;
 
-	uint64_t ai_sync_gen;
+	u64 ai_sync_gen;
 };
 
 struct gfs2_jdesc {
@@ -466,20 +466,20 @@
 
 	/* Constants computed on mount */
 
-	uint32_t sd_fsb2bb;
-	uint32_t sd_fsb2bb_shift;
-	uint32_t sd_diptrs;	/* Number of pointers in a dinode */
-	uint32_t sd_inptrs;	/* Number of pointers in a indirect block */
-	uint32_t sd_jbsize;	/* Size of a journaled data block */
-	uint32_t sd_hash_bsize;	/* sizeof(exhash block) */
-	uint32_t sd_hash_bsize_shift;
-	uint32_t sd_hash_ptrs;	/* Number of pointers in a hash block */
-	uint32_t sd_qc_per_block;
-	uint32_t sd_max_dirres;	/* Max blocks needed to add a directory entry */
-	uint32_t sd_max_height;	/* Max height of a file's metadata tree */
-	uint64_t sd_heightsize[GFS2_MAX_META_HEIGHT];
-	uint32_t sd_max_jheight; /* Max height of journaled file's meta tree */
-	uint64_t sd_jheightsize[GFS2_MAX_META_HEIGHT];
+	u32 sd_fsb2bb;
+	u32 sd_fsb2bb_shift;
+	u32 sd_diptrs;	/* Number of pointers in a dinode */
+	u32 sd_inptrs;	/* Number of pointers in a indirect block */
+	u32 sd_jbsize;	/* Size of a journaled data block */
+	u32 sd_hash_bsize;	/* sizeof(exhash block) */
+	u32 sd_hash_bsize_shift;
+	u32 sd_hash_ptrs;	/* Number of pointers in a hash block */
+	u32 sd_qc_per_block;
+	u32 sd_max_dirres;	/* Max blocks needed to add a directory entry */
+	u32 sd_max_height;	/* Max height of a file's metadata tree */
+	u64 sd_heightsize[GFS2_MAX_META_HEIGHT];
+	u32 sd_max_jheight; /* Max height of journaled file's meta tree */
+	u64 sd_jheightsize[GFS2_MAX_META_HEIGHT];
 
 	struct gfs2_args sd_args;	/* Mount arguments */
 	struct gfs2_tune sd_tune;	/* Filesystem tuning structure */
@@ -522,7 +522,7 @@
 
 	/* Resource group stuff */
 
-	uint64_t sd_rindex_vn;
+	u64 sd_rindex_vn;
 	spinlock_t sd_rindex_spin;
 	struct mutex sd_rindex_mutex;
 	struct list_head sd_rindex_list;
@@ -567,7 +567,7 @@
 	unsigned int sd_quota_chunks;
 	unsigned char **sd_quota_bitmap;
 
-	uint64_t sd_quota_sync_gen;
+	u64 sd_quota_sync_gen;
 	unsigned long sd_quota_sync_time;
 
 	/* Log stuff */
@@ -595,7 +595,7 @@
 	unsigned int sd_log_blks_free;
 	struct mutex sd_log_reserve_mutex;
 
-	uint64_t sd_log_sequence;
+	u64 sd_log_sequence;
 	unsigned int sd_log_head;
 	unsigned int sd_log_tail;
 	int sd_log_idle;
@@ -605,11 +605,11 @@
 	struct list_head sd_log_flush_list;
 
 	unsigned int sd_log_flush_head;
-	uint64_t sd_log_flush_wrapped;
+	u64 sd_log_flush_wrapped;
 
 	struct list_head sd_ail1_list;
 	struct list_head sd_ail2_list;
-	uint64_t sd_ail_sync_gen;
+	u64 sd_ail_sync_gen;
 
 	/* Replay stuff */
 
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index 1aaaaa1..f683a40 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -311,7 +311,7 @@
 {
 	struct gfs2_sbd *sdp = ip->i_inode.i_sb->s_fs_info;
 	struct buffer_head *dibh;
-	uint32_t nlink;
+	u32 nlink;
 	int error;
 
 	BUG_ON(ip->i_di.di_nlink != ip->i_inode.i_nlink);
@@ -428,7 +428,7 @@
 	return inode;
 }
 
-static int pick_formal_ino_1(struct gfs2_sbd *sdp, uint64_t *formal_ino)
+static int pick_formal_ino_1(struct gfs2_sbd *sdp, u64 *formal_ino)
 {
 	struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode);
 	struct buffer_head *bh;
@@ -469,7 +469,7 @@
 	return 1;
 }
 
-static int pick_formal_ino_2(struct gfs2_sbd *sdp, uint64_t *formal_ino)
+static int pick_formal_ino_2(struct gfs2_sbd *sdp, u64 *formal_ino)
 {
 	struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode);
 	struct gfs2_inode *m_ip = GFS2_I(sdp->sd_inum_inode);
@@ -495,13 +495,13 @@
 
 	if (!ir.ir_length) {
 		struct buffer_head *m_bh;
-		uint64_t x, y;
+		u64 x, y;
 
 		error = gfs2_meta_inode_buffer(m_ip, &m_bh);
 		if (error)
 			goto out_brelse;
 
-		x = *(uint64_t *)(m_bh->b_data + sizeof(struct gfs2_dinode));
+		x = *(u64 *)(m_bh->b_data + sizeof(struct gfs2_dinode));
 		x = y = be64_to_cpu(x);
 		ir.ir_start = x;
 		ir.ir_length = GFS2_INUM_QUANTUM;
@@ -510,7 +510,7 @@
 			gfs2_consist_inode(m_ip);
 		x = cpu_to_be64(x);
 		gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
-		*(uint64_t *)(m_bh->b_data + sizeof(struct gfs2_dinode)) = x;
+		*(u64 *)(m_bh->b_data + sizeof(struct gfs2_dinode)) = x;
 
 		brelse(m_bh);
 	}
@@ -531,7 +531,7 @@
 	return error;
 }
 
-static int pick_formal_ino(struct gfs2_sbd *sdp, uint64_t *inum)
+static int pick_formal_ino(struct gfs2_sbd *sdp, u64 *inum)
 {
 	int error;
 
@@ -577,9 +577,9 @@
 		return error;
 	}
 
-	if (dip->i_di.di_entries == (uint32_t)-1)
+	if (dip->i_di.di_entries == (u32)-1)
 		return -EFBIG;
-	if (S_ISDIR(mode) && dip->i_di.di_nlink == (uint32_t)-1)
+	if (S_ISDIR(mode) && dip->i_di.di_nlink == (u32)-1)
 		return -EMLINK;
 
 	return 0;
@@ -1131,7 +1131,7 @@
 	struct gfs2_glock *gl = gh->gh_gl;
 	struct gfs2_sbd *sdp = gl->gl_sbd;
 	struct gfs2_inode *ip = gl->gl_object;
-	int64_t curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum);
+	s64 curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum);
 	unsigned int state;
 	int flags;
 	int error;
diff --git a/fs/gfs2/lm_interface.h b/fs/gfs2/lm_interface.h
index 0bf4c27..e2dfc3d 100644
--- a/fs/gfs2/lm_interface.h
+++ b/fs/gfs2/lm_interface.h
@@ -160,7 +160,7 @@
 
 
 struct lm_lockname {
-	uint64_t ln_number;
+	u64 ln_number;
 	unsigned int ln_type;
 };
 
diff --git a/fs/gfs2/locking/dlm/lock.c b/fs/gfs2/locking/dlm/lock.c
index 1f15b6e..dceea41 100644
--- a/fs/gfs2/locking/dlm/lock.c
+++ b/fs/gfs2/locking/dlm/lock.c
@@ -61,7 +61,7 @@
 
 /* convert gfs lock-state to dlm lock-mode */
 
-static int16_t make_mode(int16_t lmstate)
+static s16 make_mode(s16 lmstate)
 {
 	switch (lmstate) {
 	case LM_ST_UNLOCKED:
@@ -79,7 +79,7 @@
 
 /* convert dlm lock-mode to gfs lock-state */
 
-int16_t gdlm_make_lmstate(int16_t dlmmode)
+s16 gdlm_make_lmstate(s16 dlmmode)
 {
 	switch (dlmmode) {
 	case DLM_LOCK_IV:
@@ -101,14 +101,14 @@
 
 static void check_cur_state(struct gdlm_lock *lp, unsigned int cur_state)
 {
-	int16_t cur = make_mode(cur_state);
+	s16 cur = make_mode(cur_state);
 	if (lp->cur != DLM_LOCK_IV)
 		gdlm_assert(lp->cur == cur, "%d, %d", lp->cur, cur);
 }
 
 static inline unsigned int make_flags(struct gdlm_lock *lp,
 				      unsigned int gfs_flags,
-				      int16_t cur, int16_t req)
+				      s16 cur, s16 req)
 {
 	unsigned int lkf = 0;
 
diff --git a/fs/gfs2/locking/dlm/lock_dlm.h b/fs/gfs2/locking/dlm/lock_dlm.h
index 9410634..c7b6e37 100644
--- a/fs/gfs2/locking/dlm/lock_dlm.h
+++ b/fs/gfs2/locking/dlm/lock_dlm.h
@@ -56,7 +56,7 @@
 };
 
 struct gdlm_ls {
-	uint32_t		id;
+	u32		id;
 	int			jid;
 	int			first;
 	int			first_done;
@@ -77,7 +77,7 @@
 	struct list_head	delayed;
 	struct list_head	submit;
 	struct list_head	all_locks;
-	uint32_t		all_locks_count;
+	u32		all_locks_count;
 	wait_queue_head_t	wait_control;
 	struct task_struct	*thread1;
 	struct task_struct	*thread2;
@@ -109,10 +109,10 @@
 	char			*lvb;
 	struct dlm_lksb		lksb;
 
-	int16_t			cur;
-	int16_t			req;
-	int16_t			prev_req;
-	uint32_t		lkf;		/* dlm flags DLM_LKF_ */
+	s16			cur;
+	s16			req;
+	s16			prev_req;
+	u32		lkf;		/* dlm flags DLM_LKF_ */
 	unsigned long		flags;		/* lock_dlm flags LFL_ */
 
 	int			bast_mode;	/* protected by async_lock */
@@ -158,7 +158,7 @@
 
 /* lock.c */
 
-int16_t gdlm_make_lmstate(int16_t);
+s16 gdlm_make_lmstate(s16);
 void gdlm_queue_delayed(struct gdlm_lock *);
 void gdlm_submit_delayed(struct gdlm_ls *);
 int gdlm_release_all_locks(struct gdlm_ls *);
diff --git a/fs/gfs2/locking/dlm/thread.c b/fs/gfs2/locking/dlm/thread.c
index a782246..d4895ec 100644
--- a/fs/gfs2/locking/dlm/thread.c
+++ b/fs/gfs2/locking/dlm/thread.c
@@ -48,7 +48,7 @@
 {
 	struct gdlm_ls *ls = lp->ls;
 	struct lm_async_cb acb;
-	int16_t prev_mode = lp->cur;
+	s16 prev_mode = lp->cur;
 
 	memset(&acb, 0, sizeof(acb));
 
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 45ea3ec..5713890 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -62,7 +62,7 @@
 void gfs2_ail1_start(struct gfs2_sbd *sdp, int flags)
 {
 	struct list_head *head = &sdp->sd_ail1_list;
-	uint64_t sync_gen;
+	u64 sync_gen;
 	struct list_head *first, *tmp;
 	struct gfs2_ail *first_ai, *ai;
 
@@ -205,10 +205,10 @@
 	up_read(&sdp->sd_log_flush_lock);
 }
 
-static uint64_t log_bmap(struct gfs2_sbd *sdp, unsigned int lbn)
+static u64 log_bmap(struct gfs2_sbd *sdp, unsigned int lbn)
 {
 	int new = 0;
-	uint64_t dbn;
+	u64 dbn;
 	int error;
 	int bdy;
 
@@ -287,7 +287,7 @@
 
 struct buffer_head *gfs2_log_get_buf(struct gfs2_sbd *sdp)
 {
-	uint64_t blkno = log_bmap(sdp, sdp->sd_log_flush_head);
+	u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head);
 	struct gfs2_log_buf *lb;
 	struct buffer_head *bh;
 
@@ -317,7 +317,7 @@
 struct buffer_head *gfs2_log_fake_buf(struct gfs2_sbd *sdp,
 				      struct buffer_head *real)
 {
-	uint64_t blkno = log_bmap(sdp, sdp->sd_log_flush_head);
+	u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head);
 	struct gfs2_log_buf *lb;
 	struct buffer_head *bh;
 
@@ -361,13 +361,13 @@
  * Returns: the initialized log buffer descriptor
  */
 
-static void log_write_header(struct gfs2_sbd *sdp, uint32_t flags, int pull)
+static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull)
 {
-	uint64_t blkno = log_bmap(sdp, sdp->sd_log_flush_head);
+	u64 blkno = log_bmap(sdp, sdp->sd_log_flush_head);
 	struct buffer_head *bh;
 	struct gfs2_log_header *lh;
 	unsigned int tail;
-	uint32_t hash;
+	u32 hash;
 
 	/* printk(KERN_INFO "log write header start (flags=%08x, pull=%d)\n", flags, pull); */
 
@@ -523,7 +523,7 @@
 		reserved += sdp->sd_log_commited_buf;
 	if (sdp->sd_log_commited_revoke)
 		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke,
-					    sizeof(uint64_t));
+					    sizeof(u64));
 	if (reserved)
 		reserved++;
 
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
index e2c2582..456d6ad 100644
--- a/fs/gfs2/lops.c
+++ b/fs/gfs2/lops.c
@@ -202,7 +202,7 @@
 	struct gfs2_glock *gl = ip->i_gl;
 	unsigned int blks = be32_to_cpu(ld->ld_data1);
 	struct buffer_head *bh_log, *bh_ip;
-	uint64_t blkno;
+	u64 blkno;
 	int error = 0;
 
 	if (pass != 1 || be32_to_cpu(ld->ld_type) != GFS2_LOG_DESC_METADATA)
@@ -294,7 +294,7 @@
 	ld->ld_header.mh_format = cpu_to_be32(GFS2_FORMAT_LD);
 	ld->ld_type = cpu_to_be32(GFS2_LOG_DESC_REVOKE);
 	ld->ld_length = cpu_to_be32(gfs2_struct2blk(sdp, sdp->sd_log_num_revoke,
-						    sizeof(uint64_t)));
+						    sizeof(u64)));
 	ld->ld_data1 = cpu_to_be32(sdp->sd_log_num_revoke);
 	ld->ld_data2 = cpu_to_be32(0);
 	memset(ld->ld_reserved, 0, sizeof(ld->ld_reserved));
@@ -305,7 +305,7 @@
 		list_del_init(&rv->rv_le.le_list);
 		sdp->sd_log_num_revoke--;
 
-		if (offset + sizeof(uint64_t) > sdp->sd_sb.sb_bsize) {
+		if (offset + sizeof(u64) > sdp->sd_sb.sb_bsize) {
 			set_buffer_dirty(bh);
 			ll_rw_block(WRITE, 1, &bh);
 
@@ -320,7 +320,7 @@
 		*(__be64 *)(bh->b_data + offset) = cpu_to_be64(rv->rv_blkno);
 		kfree(rv);
 
-		offset += sizeof(uint64_t);
+		offset += sizeof(u64);
 	}
 	gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke);
 
@@ -349,7 +349,7 @@
 	unsigned int revokes = be32_to_cpu(ld->ld_data1);
 	struct buffer_head *bh;
 	unsigned int offset;
-	uint64_t blkno;
+	u64 blkno;
 	int first = 1;
 	int error;
 
@@ -366,7 +366,7 @@
 		if (!first)
 			gfs2_metatype_check(sdp, bh, GFS2_METATYPE_LB);
 
-		while (offset + sizeof(uint64_t) <= sdp->sd_sb.sb_bsize) {
+		while (offset + sizeof(u64) <= sdp->sd_sb.sb_bsize) {
 			blkno = be64_to_cpu(*(__be64 *)(bh->b_data + offset));
 
 			error = gfs2_revoke_add(sdp, blkno, start);
@@ -377,7 +377,7 @@
 
 			if (!--revokes)
 				break;
-			offset += sizeof(uint64_t);
+			offset += sizeof(u64);
 		}
 
 		brelse(bh);
@@ -677,8 +677,8 @@
 	struct gfs2_glock *gl = ip->i_gl;
 	unsigned int blks = be32_to_cpu(ld->ld_data1);
 	struct buffer_head *bh_log, *bh_ip;
-	uint64_t blkno;
-	uint64_t esc;
+	u64 blkno;
+	u64 esc;
 	int error = 0;
 
 	if (pass != 1 || be32_to_cpu(ld->ld_type) != GFS2_LOG_DESC_JDATA)
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c
index 3f6da00..5b10379 100644
--- a/fs/gfs2/meta_io.c
+++ b/fs/gfs2/meta_io.c
@@ -213,7 +213,7 @@
 	struct list_head *head = &gl->gl_ail_list;
 	struct gfs2_bufdata *bd;
 	struct buffer_head *bh;
-	uint64_t blkno;
+	u64 blkno;
 	int error;
 
 	blocks = atomic_read(&gl->gl_ail_count);
@@ -303,7 +303,7 @@
  */
 
 static struct buffer_head *getbuf(struct gfs2_sbd *sdp, struct inode *aspace,
-				  uint64_t blkno, int create)
+				  u64 blkno, int create)
 {
 	struct page *page;
 	struct buffer_head *bh;
@@ -366,7 +366,7 @@
  * Returns: The buffer
  */
 
-struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, uint64_t blkno)
+struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno)
 {
 	struct buffer_head *bh;
 	bh = getbuf(gl->gl_sbd, gl->gl_aspace, blkno, CREATE);
@@ -384,7 +384,7 @@
  * Returns: errno
  */
 
-int gfs2_meta_read(struct gfs2_glock *gl, uint64_t blkno, int flags,
+int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags,
 		   struct buffer_head **bhp)
 {
 	int error;
@@ -549,7 +549,7 @@
  *
  */
 
-void gfs2_meta_wipe(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
+void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct inode *aspace = ip->i_gl->gl_aspace;
@@ -573,7 +573,7 @@
 			if (bd) {
 				gfs2_log_lock(sdp);
 				if (bd->bd_ail) {
-					uint64_t blkno = bh->b_blocknr;
+					u64 blkno = bh->b_blocknr;
 					bd->bd_ail = NULL;
 					list_del(&bd->bd_ail_st_list);
 					list_del(&bd->bd_ail_gl_list);
@@ -637,7 +637,7 @@
  * Returns: errno
  */
 
-int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, uint64_t num,
+int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
 			      int new, struct buffer_head **bhp)
 {
 	struct buffer_head *bh, **bh_slot = ip->i_cache + height;
@@ -711,12 +711,12 @@
  *
  */
 
-void gfs2_meta_ra(struct gfs2_glock *gl, uint64_t dblock, uint32_t extlen)
+void gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen)
 {
 	struct gfs2_sbd *sdp = gl->gl_sbd;
 	struct inode *aspace = gl->gl_aspace;
 	struct buffer_head *first_bh, *bh;
-	uint32_t max_ra = gfs2_tune_get(sdp, gt_max_readahead) >>
+	u32 max_ra = gfs2_tune_get(sdp, gt_max_readahead) >>
 			  sdp->sd_sb.sb_bsize_shift;
 	int error;
 
diff --git a/fs/gfs2/meta_io.h b/fs/gfs2/meta_io.h
index 4ddc936..9a9acc9 100644
--- a/fs/gfs2/meta_io.h
+++ b/fs/gfs2/meta_io.h
@@ -44,8 +44,8 @@
 void gfs2_meta_inval(struct gfs2_glock *gl);
 void gfs2_meta_sync(struct gfs2_glock *gl, int flags);
 
-struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, uint64_t blkno);
-int gfs2_meta_read(struct gfs2_glock *gl, uint64_t blkno,
+struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno);
+int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno,
 		   int flags, struct buffer_head **bhp);
 int gfs2_meta_reread(struct gfs2_sbd *sdp, struct buffer_head *bh, int flags);
 
@@ -55,10 +55,10 @@
 void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh,
 		struct gfs2_ail *ai);
 
-void gfs2_meta_wipe(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen);
+void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen);
 
 void gfs2_meta_cache_flush(struct gfs2_inode *ip);
-int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, uint64_t num,
+int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
 			      int new, struct buffer_head **bhp);
 
 static inline int gfs2_meta_inode_buffer(struct gfs2_inode *ip,
@@ -67,7 +67,7 @@
 	return gfs2_meta_indirect_buffer(ip, 0, ip->i_num.no_addr, 0, bhp);
 }
 
-void gfs2_meta_ra(struct gfs2_glock *gl, uint64_t dblock, uint32_t extlen);
+void gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen);
 void gfs2_meta_syncfs(struct gfs2_sbd *sdp);
 
 #endif /* __DIO_DOT_H__ */
diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
index 21ae9e4..ae9c46e 100644
--- a/fs/gfs2/ops_address.c
+++ b/fs/gfs2/ops_address.c
@@ -66,7 +66,7 @@
 	           struct buffer_head *bh_result, int create)
 {
 	int new = create;
-	uint64_t dblock;
+	u64 dblock;
 	int error;
 	int boundary;
 
@@ -100,7 +100,7 @@
 			     struct buffer_head *bh_result, int create)
 {
 	int new = 0;
-	uint64_t dblock;
+	u64 dblock;
 	int error;
 	int boundary;
 
@@ -510,10 +510,10 @@
 	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 
 	if (gfs2_is_stuffed(ip)) {
-		uint64_t file_size;
+		u64 file_size;
 		void *kaddr;
 
-		file_size = ((uint64_t)page->index << PAGE_CACHE_SHIFT) + to;
+		file_size = ((u64)page->index << PAGE_CACHE_SHIFT) + to;
 
 		kaddr = kmap_atomic(page, KM_USER0);
 		memcpy(dibh->b_data + sizeof(struct gfs2_dinode) + from,
diff --git a/fs/gfs2/ops_export.c b/fs/gfs2/ops_export.c
index c94cbc8..cf82689 100644
--- a/fs/gfs2/ops_export.c
+++ b/fs/gfs2/ops_export.c
@@ -46,15 +46,15 @@
 
 	switch (fh_type) {
 	case 10:
-		parent.no_formal_ino = ((uint64_t)be32_to_cpu(fh[4])) << 32;
+		parent.no_formal_ino = ((u64)be32_to_cpu(fh[4])) << 32;
 		parent.no_formal_ino |= be32_to_cpu(fh[5]);
-		parent.no_addr = ((uint64_t)be32_to_cpu(fh[6])) << 32;
+		parent.no_addr = ((u64)be32_to_cpu(fh[6])) << 32;
 		parent.no_addr |= be32_to_cpu(fh[7]);
 		fh_obj.imode = be32_to_cpu(fh[8]);
 	case 4:
-		this->no_formal_ino = ((uint64_t)be32_to_cpu(fh[0])) << 32;
+		this->no_formal_ino = ((u64)be32_to_cpu(fh[0])) << 32;
 		this->no_formal_ino |= be32_to_cpu(fh[1]);
-		this->no_addr = ((uint64_t)be32_to_cpu(fh[2])) << 32;
+		this->no_addr = ((u64)be32_to_cpu(fh[2])) << 32;
 		this->no_addr |= be32_to_cpu(fh[3]);
 		break;
 	default:
@@ -118,7 +118,7 @@
 };
 
 static int get_name_filldir(void *opaque, const char *name, unsigned int length,
-			    uint64_t offset, struct gfs2_inum *inum,
+			    u64 offset, struct gfs2_inum *inum,
 			    unsigned int type)
 {
 	struct get_name_filldir *gnfd = (struct get_name_filldir *)opaque;
@@ -140,7 +140,7 @@
 	struct gfs2_inode *dip, *ip;
 	struct get_name_filldir gnfd;
 	struct gfs2_holder gh;
-	uint64_t offset = 0;
+	u64 offset = 0;
 	int error;
 
 	if (!dir)
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index 53ce781..f5ddd49 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -47,7 +47,7 @@
 struct filldir_bad_entry {
 	char *fbe_name;
 	unsigned int fbe_length;
-	uint64_t fbe_offset;
+	u64 fbe_offset;
 	struct gfs2_inum fbe_inum;
 	unsigned int fbe_type;
 };
@@ -161,7 +161,7 @@
  */
 
 static int filldir_reg_func(void *opaque, const char *name, unsigned int length,
-			    uint64_t offset, struct gfs2_inum *inum,
+			    u64 offset, struct gfs2_inum *inum,
 			    unsigned int type)
 {
 	struct filldir_reg *fdr = (struct filldir_reg *)opaque;
@@ -200,7 +200,7 @@
 	struct gfs2_inode *dip = GFS2_I(dir);
 	struct filldir_reg fdr;
 	struct gfs2_holder d_gh;
-	uint64_t offset = file->f_pos;
+	u64 offset = file->f_pos;
 	int error;
 
 	fdr.fdr_sbd = GFS2_SB(dir);
@@ -239,7 +239,7 @@
  */
 
 static int filldir_bad_func(void *opaque, const char *name, unsigned int length,
-			    uint64_t offset, struct gfs2_inum *inum,
+			    u64 offset, struct gfs2_inum *inum,
 			    unsigned int type)
 {
 	struct filldir_bad *fdb = (struct filldir_bad *)opaque;
@@ -293,7 +293,7 @@
 	unsigned int entries, size;
 	struct filldir_bad *fdb;
 	struct gfs2_holder d_gh;
-	uint64_t offset = file->f_pos;
+	u64 offset = file->f_pos;
 	unsigned int x;
 	struct filldir_bad_entry *fbe;
 	int error;
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c
index bd9b995..c680f05 100644
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -172,7 +172,7 @@
 	if (!dip->i_di.di_nlink)
 		goto out_gunlock;
 	error = -EFBIG;
-	if (dip->i_di.di_entries == (uint32_t)-1)
+	if (dip->i_di.di_entries == (u32)-1)
 		goto out_gunlock;
 	error = -EPERM;
 	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
@@ -181,7 +181,7 @@
 	if (!ip->i_di.di_nlink)
 		goto out_gunlock;
 	error = -EMLINK;
-	if (ip->i_di.di_nlink == (uint32_t)-1)
+	if (ip->i_di.di_nlink == (u32)-1)
 		goto out_gunlock;
 
 	alloc_required = error = gfs2_diradd_alloc_required(dir, &dentry->d_name);
@@ -509,7 +509,7 @@
 	struct gfs2_holder ghs[2];
 	struct inode *inode;
 	struct buffer_head *dibh;
-	uint32_t major = 0, minor = 0;
+	u32 major = 0, minor = 0;
 	int error;
 
 	switch (mode & S_IFMT) {
@@ -670,12 +670,12 @@
 				error = -EINVAL;
 				goto out_gunlock;
 			}
-			if (ndip->i_di.di_entries == (uint32_t)-1) {
+			if (ndip->i_di.di_entries == (u32)-1) {
 				error = -EFBIG;
 				goto out_gunlock;
 			}
 			if (S_ISDIR(ip->i_di.di_mode) &&
-			    ndip->i_di.di_nlink == (uint32_t)-1) {
+			    ndip->i_di.di_nlink == (u32)-1) {
 				error = -EMLINK;
 				goto out_gunlock;
 			}
@@ -911,7 +911,7 @@
 	struct gfs2_inode *ip = GFS2_I(inode);
 	struct gfs2_sbd *sdp = GFS2_SB(inode);
 	struct buffer_head *dibh;
-	uint32_t ouid, ogid, nuid, ngid;
+	u32 ouid, ogid, nuid, ngid;
 	int error;
 
 	ouid = ip->i_di.di_uid;
diff --git a/fs/gfs2/ops_vm.c b/fs/gfs2/ops_vm.c
index 32ec857..3b34631 100644
--- a/fs/gfs2/ops_vm.c
+++ b/fs/gfs2/ops_vm.c
@@ -62,7 +62,7 @@
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	unsigned long index = page->index;
-	uint64_t lblock = index << (PAGE_CACHE_SHIFT -
+	u64 lblock = index << (PAGE_CACHE_SHIFT -
 				    sdp->sd_sb.sb_bsize_shift);
 	unsigned int blocks = PAGE_CACHE_SIZE >> sdp->sd_sb.sb_bsize_shift;
 	struct gfs2_alloc *al;
@@ -101,7 +101,7 @@
 	}
 
 	for (x = 0; x < blocks; ) {
-		uint64_t dblock;
+		u64 dblock;
 		unsigned int extlen;
 		int new = 1;
 
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index 572b92e..f5830be 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -65,17 +65,17 @@
 #define QUOTA_USER 1
 #define QUOTA_GROUP 0
 
-static uint64_t qd2offset(struct gfs2_quota_data *qd)
+static u64 qd2offset(struct gfs2_quota_data *qd)
 {
-	uint64_t offset;
+	u64 offset;
 
-	offset = 2 * (uint64_t)qd->qd_id + !test_bit(QDF_USER, &qd->qd_flags);
+	offset = 2 * (u64)qd->qd_id + !test_bit(QDF_USER, &qd->qd_flags);
 	offset *= sizeof(struct gfs2_quota);
 
 	return offset;
 }
 
-static int qd_alloc(struct gfs2_sbd *sdp, int user, uint32_t id,
+static int qd_alloc(struct gfs2_sbd *sdp, int user, u32 id,
 		    struct gfs2_quota_data **qdp)
 {
 	struct gfs2_quota_data *qd;
@@ -91,7 +91,7 @@
 		set_bit(QDF_USER, &qd->qd_flags);
 	qd->qd_slot = -1;
 
-	error = gfs2_glock_get(sdp, 2 * (uint64_t)id + !user,
+	error = gfs2_glock_get(sdp, 2 * (u64)id + !user,
 			      &gfs2_quota_glops, CREATE, &qd->qd_gl);
 	if (error)
 		goto fail;
@@ -110,7 +110,7 @@
 	return error;
 }
 
-static int qd_get(struct gfs2_sbd *sdp, int user, uint32_t id, int create,
+static int qd_get(struct gfs2_sbd *sdp, int user, u32 id, int create,
 		  struct gfs2_quota_data **qdp)
 {
 	struct gfs2_quota_data *qd = NULL, *new_qd = NULL;
@@ -248,7 +248,7 @@
 	struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
 	struct gfs2_inode *ip = GFS2_I(sdp->sd_qc_inode);
 	unsigned int block, offset;
-	uint64_t dblock;
+	u64 dblock;
 	int new = 0;
 	struct buffer_head *bh;
 	int error;
@@ -405,7 +405,7 @@
 	qd_put(qd);
 }
 
-static int qdsb_get(struct gfs2_sbd *sdp, int user, uint32_t id, int create,
+static int qdsb_get(struct gfs2_sbd *sdp, int user, u32 id, int create,
 		    struct gfs2_quota_data **qdp)
 {
 	int error;
@@ -438,7 +438,7 @@
 	qd_put(qd);
 }
 
-int gfs2_quota_hold(struct gfs2_inode *ip, uint32_t uid, uint32_t gid)
+int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_alloc *al = &ip->i_alloc;
@@ -523,12 +523,12 @@
 	return ret;
 }
 
-static void do_qc(struct gfs2_quota_data *qd, int64_t change)
+static void do_qc(struct gfs2_quota_data *qd, s64 change)
 {
 	struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
 	struct gfs2_inode *ip = GFS2_I(sdp->sd_qc_inode);
 	struct gfs2_quota_change *qc = qd->qd_bh_qc;
-	int64_t x;
+	s64 x;
 
 	mutex_lock(&sdp->sd_quota_mutex);
 	gfs2_trans_add_bh(ip->i_gl, qd->qd_bh, 1);
@@ -571,7 +571,7 @@
  * in turn mostly borrowed from ext3
  */
 static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
-			     int64_t change, struct gfs2_quota_data *qd)
+			     s64 change, struct gfs2_quota_data *qd)
 {
 	struct inode *inode = &ip->i_inode;
 	struct address_space *mapping = inode->i_mapping;
@@ -811,7 +811,7 @@
 	return error;
 }
 
-int gfs2_quota_lock(struct gfs2_inode *ip, uint32_t uid, uint32_t gid)
+int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_alloc *al = &ip->i_alloc;
@@ -848,7 +848,7 @@
 {
 	struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
 	struct gfs2_tune *gt = &sdp->sd_tune;
-	int64_t value;
+	s64 value;
 	unsigned int num, den;
 	int do_sync = 1;
 
@@ -873,7 +873,7 @@
 		value *= gfs2_jindex_size(sdp) * num;
 		do_div(value, den);
 		value += (s64)be64_to_cpu(qd->qd_qb.qb_value);
-		if (value < (int64_t)be64_to_cpu(qd->qd_qb.qb_limit))
+		if (value < (s64)be64_to_cpu(qd->qd_qb.qb_limit))
 			do_sync = 0;
 	}
 
@@ -927,12 +927,12 @@
 	return 0;
 }
 
-int gfs2_quota_check(struct gfs2_inode *ip, uint32_t uid, uint32_t gid)
+int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
 {
 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 	struct gfs2_alloc *al = &ip->i_alloc;
 	struct gfs2_quota_data *qd;
-	int64_t value;
+	s64 value;
 	unsigned int x;
 	int error = 0;
 
@@ -954,12 +954,12 @@
 		value += qd->qd_change;
 		spin_unlock(&sdp->sd_quota_spin);
 
-		if (be64_to_cpu(qd->qd_qb.qb_limit) && (int64_t)be64_to_cpu(qd->qd_qb.qb_limit) < value) {
+		if (be64_to_cpu(qd->qd_qb.qb_limit) && (s64)be64_to_cpu(qd->qd_qb.qb_limit) < value) {
 			print_message(qd, "exceeded");
 			error = -EDQUOT;
 			break;
 		} else if (be64_to_cpu(qd->qd_qb.qb_warn) &&
-			   (int64_t)be64_to_cpu(qd->qd_qb.qb_warn) < value &&
+			   (s64)be64_to_cpu(qd->qd_qb.qb_warn) < value &&
 			   time_after_eq(jiffies, qd->qd_last_warn +
 					 gfs2_tune_get(sdp,
 						gt_quota_warn_period) * HZ)) {
@@ -971,8 +971,8 @@
 	return error;
 }
 
-void gfs2_quota_change(struct gfs2_inode *ip, int64_t change,
-		       uint32_t uid, uint32_t gid)
+void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
+		       u32 uid, u32 gid)
 {
 	struct gfs2_alloc *al = &ip->i_alloc;
 	struct gfs2_quota_data *qd;
@@ -1038,7 +1038,7 @@
 	return error;
 }
 
-int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, uint32_t id)
+int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, u32 id)
 {
 	struct gfs2_quota_data *qd;
 	struct gfs2_holder q_gh;
@@ -1058,7 +1058,7 @@
 }
 
 #if 0
-int gfs2_quota_read(struct gfs2_sbd *sdp, int user, uint32_t id,
+int gfs2_quota_read(struct gfs2_sbd *sdp, int user, u32 id,
 		    struct gfs2_quota *q)
 {
 	struct gfs2_quota_data *qd;
@@ -1100,8 +1100,8 @@
 	unsigned int blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift;
 	unsigned int x, slot = 0;
 	unsigned int found = 0;
-	uint64_t dblock;
-	uint32_t extlen = 0;
+	u64 dblock;
+	u32 extlen = 0;
 	int error;
 
 	if (!ip->i_di.di_size ||
diff --git a/fs/gfs2/quota.h b/fs/gfs2/quota.h
index 6702a56..d93c61c 100644
--- a/fs/gfs2/quota.h
+++ b/fs/gfs2/quota.h
@@ -10,20 +10,20 @@
 #ifndef __QUOTA_DOT_H__
 #define __QUOTA_DOT_H__
 
-#define NO_QUOTA_CHANGE ((uint32_t)-1)
+#define NO_QUOTA_CHANGE ((u32)-1)
 
-int gfs2_quota_hold(struct gfs2_inode *ip, uint32_t uid, uint32_t gid);
+int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid);
 void gfs2_quota_unhold(struct gfs2_inode *ip);
 
-int gfs2_quota_lock(struct gfs2_inode *ip, uint32_t uid, uint32_t gid);
+int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid);
 void gfs2_quota_unlock(struct gfs2_inode *ip);
 
-int gfs2_quota_check(struct gfs2_inode *ip, uint32_t uid, uint32_t gid);
-void gfs2_quota_change(struct gfs2_inode *ip, int64_t change,
-		       uint32_t uid, uint32_t gid);
+int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid);
+void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
+		       u32 uid, u32 gid);
 
 int gfs2_quota_sync(struct gfs2_sbd *sdp);
-int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, uint32_t id);
+int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, u32 id);
 
 int gfs2_quota_init(struct gfs2_sbd *sdp);
 void gfs2_quota_scan(struct gfs2_sbd *sdp);
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
index acafe4b..ab55191 100644
--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -35,8 +35,8 @@
 	struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
 	struct gfs2_glock *gl = ip->i_gl;
 	int new = 0;
-	uint64_t dblock;
-	uint32_t extlen;
+	u64 dblock;
+	u32 extlen;
 	int error;
 
 	error = gfs2_extent_map(&ip->i_inode, blk, &new, &dblock, &extlen);
@@ -53,7 +53,7 @@
 	return error;
 }
 
-int gfs2_revoke_add(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
+int gfs2_revoke_add(struct gfs2_sbd *sdp, u64 blkno, unsigned int where)
 {
 	struct list_head *head = &sdp->sd_revoke_list;
 	struct gfs2_revoke_replay *rr;
@@ -82,7 +82,7 @@
 	return 1;
 }
 
-int gfs2_revoke_check(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
+int gfs2_revoke_check(struct gfs2_sbd *sdp, u64 blkno, unsigned int where)
 {
 	struct gfs2_revoke_replay *rr;
 	int wrap, a, b, revoke;
@@ -137,7 +137,7 @@
 {
 	struct buffer_head *bh;
 	struct gfs2_log_header lh;
-	uint32_t hash;
+	u32 hash;
 	int error;
 
 	error = gfs2_replay_read_block(jd, blk, &bh);
@@ -249,7 +249,7 @@
 int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header *head)
 {
 	struct gfs2_log_header lh_1, lh_m;
-	uint32_t blk_1, blk_2, blk_m;
+	u32 blk_1, blk_2, blk_m;
 	int error;
 
 	blk_1 = 0;
@@ -370,9 +370,9 @@
 	struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode);
 	unsigned int lblock;
 	int new = 0;
-	uint64_t dblock;
+	u64 dblock;
 	struct gfs2_log_header *lh;
-	uint32_t hash;
+	u32 hash;
 	struct buffer_head *bh;
 	int error;
 	int boundary;
diff --git a/fs/gfs2/recovery.h b/fs/gfs2/recovery.h
index bed1a78..1b35516 100644
--- a/fs/gfs2/recovery.h
+++ b/fs/gfs2/recovery.h
@@ -19,8 +19,8 @@
 int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
 			   struct buffer_head **bh);
 
-int gfs2_revoke_add(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where);
-int gfs2_revoke_check(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where);
+int gfs2_revoke_add(struct gfs2_sbd *sdp, u64 blkno, unsigned int where);
+int gfs2_revoke_check(struct gfs2_sbd *sdp, u64 blkno, unsigned int where);
 void gfs2_revoke_clean(struct gfs2_sbd *sdp);
 
 int gfs2_find_jhead(struct gfs2_jdesc *jd,
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 62d0a84..af49c8b 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -60,7 +60,7 @@
  */
 
 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 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 @@
  * 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 @@
  * 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 @@
 	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 @@
 {
 	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,10 +253,10 @@
 
 }
 
-static inline int rgrp_contains_block(struct gfs2_rindex *ri, uint64_t block)
+static inline int rgrp_contains_block(struct gfs2_rindex *ri, u64 block)
 {
-	uint64_t first = ri->ri_data0;
-	uint64_t last = first + ri->ri_data;
+	u64 first = ri->ri_data0;
+	u64 last = first + ri->ri_data;
 	return !!(first <= block && block < last);
 }
 
@@ -268,7 +268,7 @@
  * 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 @@
 {
 	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)
@@ -444,7 +444,7 @@
 	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))) {
@@ -741,7 +741,7 @@
  */
 
 static struct gfs2_rgrpd *recent_rgrp_first(struct gfs2_sbd *sdp,
-					    uint64_t rglast)
+					    u64 rglast)
 {
 	struct gfs2_rgrpd *rgd = NULL;
 
@@ -1037,10 +1037,10 @@
  * 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 +1083,12 @@
  * 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 +1148,12 @@
  * 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 +1206,8 @@
 	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;
@@ -1250,8 +1250,8 @@
 	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;
@@ -1332,7 +1332,7 @@
  *
  */
 
-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,7 +1349,7 @@
 	gfs2_trans_add_rg(rgd);
 
 	gfs2_statfs_change(sdp, 0, +blen, 0);
-	gfs2_quota_change(ip, -(int64_t)blen,
+	gfs2_quota_change(ip, -(s64)blen,
 			 ip->i_di.di_uid, ip->i_di.di_gid);
 }
 
@@ -1361,7 +1361,7 @@
  *
  */
 
-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 +1378,7 @@
 	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_di.di_uid, ip->i_di.di_gid);
 	gfs2_meta_wipe(ip, bstart, blen);
 }
 
@@ -1397,7 +1397,7 @@
 	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;
@@ -1440,7 +1440,7 @@
  */
 
 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;
diff --git a/fs/gfs2/rgrp.h b/fs/gfs2/rgrp.h
index f94761b..3d6ae37 100644
--- a/fs/gfs2/rgrp.h
+++ b/fs/gfs2/rgrp.h
@@ -12,7 +12,7 @@
 
 void gfs2_rgrp_verify(struct gfs2_rgrpd *rgd);
 
-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 *gfs2_rgrpd_get_first(struct gfs2_sbd *sdp);
 struct gfs2_rgrpd *gfs2_rgrpd_get_next(struct gfs2_rgrpd *rgd);
 
@@ -35,14 +35,14 @@
 
 void gfs2_inplace_release(struct gfs2_inode *ip);
 
-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);
 
 u64 gfs2_alloc_data(struct gfs2_inode *ip);
 u64 gfs2_alloc_meta(struct gfs2_inode *ip);
 u64 gfs2_alloc_di(struct gfs2_inode *ip, u64 *generation);
 
-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_data(struct gfs2_inode *ip, u64 bstart, u32 blen);
+void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen);
 void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip);
 void gfs2_unlink_di(struct inode *inode);
 
@@ -54,7 +54,7 @@
 };
 
 void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist,
-		    uint64_t block);
+		    u64 block);
 void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, unsigned int state,
 		      int flags);
 void gfs2_rlist_free(struct gfs2_rgrp_list *rlist);
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index 520266c..f1d07d9 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -33,11 +33,11 @@
 #include "trans.h"
 #include "util.h"
 
-static const uint32_t gfs2_old_fs_formats[] = {
+static const u32 gfs2_old_fs_formats[] = {
         0
 };
 
-static const uint32_t gfs2_old_multihost_formats[] = {
+static const u32 gfs2_old_multihost_formats[] = {
         0
 };
 
@@ -225,8 +225,8 @@
 
 int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent)
 {
-	uint32_t hash_blocks, ind_blocks, leaf_blocks;
-	uint32_t tmp_blocks;
+	u32 hash_blocks, ind_blocks, leaf_blocks;
+	u32 tmp_blocks;
 	unsigned int x;
 	int error;
 	struct page *page;
@@ -251,20 +251,20 @@
 			       GFS2_BASIC_BLOCK_SHIFT;
 	sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift;
 	sdp->sd_diptrs = (sdp->sd_sb.sb_bsize -
-			  sizeof(struct gfs2_dinode)) / sizeof(uint64_t);
+			  sizeof(struct gfs2_dinode)) / sizeof(u64);
 	sdp->sd_inptrs = (sdp->sd_sb.sb_bsize -
-			  sizeof(struct gfs2_meta_header)) / sizeof(uint64_t);
+			  sizeof(struct gfs2_meta_header)) / sizeof(u64);
 	sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
 	sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2;
 	sdp->sd_hash_bsize_shift = sdp->sd_sb.sb_bsize_shift - 1;
-	sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(uint64_t);
+	sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(u64);
 	sdp->sd_qc_per_block = (sdp->sd_sb.sb_bsize -
 				sizeof(struct gfs2_meta_header)) /
 			        sizeof(struct gfs2_quota_change);
 
 	/* Compute maximum reservation required to add a entry to a directory */
 
-	hash_blocks = DIV_ROUND_UP(sizeof(uint64_t) * (1 << GFS2_DIR_MAX_DEPTH),
+	hash_blocks = DIV_ROUND_UP(sizeof(u64) * (1 << GFS2_DIR_MAX_DEPTH),
 			     sdp->sd_jbsize);
 
 	ind_blocks = 0;
@@ -281,8 +281,8 @@
 				sizeof(struct gfs2_dinode);
 	sdp->sd_heightsize[1] = sdp->sd_sb.sb_bsize * sdp->sd_diptrs;
 	for (x = 2;; x++) {
-		uint64_t space, d;
-		uint32_t m;
+		u64 space, d;
+		u32 m;
 
 		space = sdp->sd_heightsize[x - 1] * sdp->sd_inptrs;
 		d = space;
@@ -299,8 +299,8 @@
 				 sizeof(struct gfs2_dinode);
 	sdp->sd_jheightsize[1] = sdp->sd_jbsize * sdp->sd_diptrs;
 	for (x = 2;; x++) {
-		uint64_t space, d;
-		uint32_t m;
+		u64 space, d;
+		u32 m;
 
 		space = sdp->sd_jheightsize[x - 1] * sdp->sd_inptrs;
 		d = space;
@@ -630,8 +630,8 @@
 	return 0;
 }
 
-void gfs2_statfs_change(struct gfs2_sbd *sdp, int64_t total, int64_t free,
-			int64_t dinodes)
+void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
+			s64 dinodes)
 {
 	struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 	struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local;
diff --git a/fs/gfs2/super.h b/fs/gfs2/super.h
index 4a6ce95..b073300 100644
--- a/fs/gfs2/super.h
+++ b/fs/gfs2/super.h
@@ -40,7 +40,7 @@
 
 int gfs2_statfs_init(struct gfs2_sbd *sdp);
 void gfs2_statfs_change(struct gfs2_sbd *sdp,
-			int64_t total, int64_t free, int64_t dinodes);
+			s64 total, s64 free, s64 dinodes);
 int gfs2_statfs_sync(struct gfs2_sbd *sdp);
 int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change *sc);
 int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change *sc);
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c
index 7919973..8aefda2 100644
--- a/fs/gfs2/sys.c
+++ b/fs/gfs2/sys.c
@@ -138,7 +138,7 @@
 static ssize_t quota_refresh_user_store(struct gfs2_sbd *sdp, const char *buf,
 					size_t len)
 {
-	uint32_t id;
+	u32 id;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EACCES;
@@ -152,7 +152,7 @@
 static ssize_t quota_refresh_group_store(struct gfs2_sbd *sdp, const char *buf,
 					 size_t len)
 {
-	uint32_t id;
+	u32 id;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EACCES;
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
index 8e18e63..acf8401 100644
--- a/fs/gfs2/trans.c
+++ b/fs/gfs2/trans.c
@@ -46,7 +46,7 @@
 		tr->tr_reserved += 6 + blocks;
 	if (revokes)
 		tr->tr_reserved += gfs2_struct2blk(sdp, revokes,
-						   sizeof(uint64_t));
+						   sizeof(u64));
 	INIT_LIST_HEAD(&tr->tr_list_buf);
 
 	gfs2_holder_init(sdp->sd_trans_gl, LM_ST_SHARED, 0, &tr->tr_t_gh);
@@ -142,7 +142,7 @@
 	lops_add(sdp, &bd->bd_le);
 }
 
-void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, uint64_t blkno)
+void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, u64 blkno)
 {
 	struct gfs2_revoke *rv = kmalloc(sizeof(struct gfs2_revoke),
 					 GFP_NOFS | __GFP_NOFAIL);
@@ -151,7 +151,7 @@
 	lops_add(sdp, &rv->rv_le);
 }
 
-void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, uint64_t blkno)
+void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, u64 blkno)
 {
 	struct gfs2_revoke *rv;
 	int found = 0;
diff --git a/fs/gfs2/trans.h b/fs/gfs2/trans.h
index 9e3ce84..6550d3d 100644
--- a/fs/gfs2/trans.h
+++ b/fs/gfs2/trans.h
@@ -27,8 +27,8 @@
 
 void gfs2_trans_add_gl(struct gfs2_glock *gl);
 void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta);
-void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, uint64_t blkno);
-void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, uint64_t blkno);
+void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, u64 blkno);
+void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, u64 blkno);
 void gfs2_trans_add_rg(struct gfs2_rgrpd *rgd);
 
 #endif /* __TRANS_DOT_H__ */
diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c
index 2852431..d72eb8a 100644
--- a/fs/gfs2/util.c
+++ b/fs/gfs2/util.c
@@ -171,7 +171,7 @@
  */
 
 int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
-			   uint16_t type, uint16_t t, const char *function,
+			   u16 type, u16 t, const char *function,
 			   char *file, unsigned int line)
 {
 	int me;
diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
index 60b3703..204fdb8 100644
--- a/fs/gfs2/util.h
+++ b/fs/gfs2/util.h
@@ -82,7 +82,7 @@
 				    char *file, unsigned int line)
 {
 	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
-	uint32_t magic = mh->mh_magic;
+	u32 magic = mh->mh_magic;
 	magic = be32_to_cpu(magic);
 	if (unlikely(magic != GFS2_MAGIC))
 		return gfs2_meta_check_ii(sdp, bh, "magic number", function,
@@ -95,19 +95,19 @@
 
 
 int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
-			   uint16_t type, uint16_t t,
+			   u16 type, u16 t,
 			   const char *function,
 			   char *file, unsigned int line);
 
 static inline int gfs2_metatype_check_i(struct gfs2_sbd *sdp,
 					struct buffer_head *bh,
-					uint16_t type,
+					u16 type,
 					const char *function,
 					char *file, unsigned int line)
 {
 	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
-	uint32_t magic = mh->mh_magic;
-	uint16_t t = be32_to_cpu(mh->mh_type);
+	u32 magic = mh->mh_magic;
+	u16 t = be32_to_cpu(mh->mh_type);
 	magic = be32_to_cpu(magic);
 	if (unlikely(magic != GFS2_MAGIC))
 		return gfs2_meta_check_ii(sdp, bh, "magic number", function,
@@ -121,8 +121,8 @@
 #define gfs2_metatype_check(sdp, bh, type) \
 gfs2_metatype_check_i((sdp), (bh), (type), __FUNCTION__, __FILE__, __LINE__)
 
-static inline void gfs2_metatype_set(struct buffer_head *bh, uint16_t type,
-				     uint16_t format)
+static inline void gfs2_metatype_set(struct buffer_head *bh, u16 type,
+				     u16 format)
 {
 	struct gfs2_meta_header *mh;
 	mh = (struct gfs2_meta_header *)bh->b_data;
