public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [Ext2-devel] [PATCH 2/2] ext2/3: Support2^32-1blocks(e2fsprogs)
@ 2006-03-25 13:33 sho
  2006-03-26 22:37 ` Badari Pulavarty
  2006-03-27 18:45 ` Mingming Cao
  0 siblings, 2 replies; 51+ messages in thread
From: sho @ 2006-03-25 13:33 UTC (permalink / raw)
  To: pbadari; +Cc: linux-kernel, Ext2-devel

Hi,

>More information. I ran the test with "-onoreservation" thinking that
>the patch didn't address "reservation code" issues and I still ran
>into block allocation problems. Hope this helps.

As you said, the previous patches were broken because of my mailer,
and part of them would be rejected.
I'm re-sending them;  I have not changed them other than the mailer.
Could you try new patches and check what happened?
I have run fsx with these patches several times and the problems
weren't reproduced.

Signed-off-by: Takashi Sato sho@tnes.nec.co.jp
---
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/balloc.c linux-2.6.16-rc6-4g/fs/e
xt2/balloc.c
--- linux-2.6.16-rc6.org/fs/ext2/balloc.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/balloc.c	2006-03-14 09:29:01.000000000 +0900
@@ -99,14 +99,14 @@ error_out:
  * Set sb->s_dirt here because the superblock was "logically" altered.  We
  * need to recalculate its free blocks count and flush it out.
  */
-static int reserve_blocks(struct super_block *sb, int count)
+static unsigned int reserve_blocks(struct super_block *sb, unsigned int count)
 {
 	struct ext2_sb_info *sbi = EXT2_SB(sb);
 	struct ext2_super_block *es = sbi->s_es;
-	unsigned free_blocks;
+	unsigned int free_blocks;
 	unsigned root_blocks;
 
-	free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
+	free_blocks = percpu_llcounter_read_positive(&sbi->s_freeblocks_counter);
 	root_blocks = le32_to_cpu(es->s_r_blocks_count);
 
 	if (free_blocks < count)
@@ -125,23 +125,23 @@ static int reserve_blocks(struct super_b
 			return 0;
 	}
 
-	percpu_counter_mod(&sbi->s_freeblocks_counter, -count);
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter, -count);
 	sb->s_dirt = 1;
 	return count;
 }
 
-static void release_blocks(struct super_block *sb, int count)
+static void release_blocks(struct super_block *sb, unsigned int count)
 {
 	if (count) {
 		struct ext2_sb_info *sbi = EXT2_SB(sb);
 
-		percpu_counter_mod(&sbi->s_freeblocks_counter, count);
+		percpu_llcounter_mod(&sbi->s_freeblocks_counter, count);
 		sb->s_dirt = 1;
 	}
 }
 
-static int group_reserve_blocks(struct ext2_sb_info *sbi, int group_no,
-	struct ext2_group_desc *desc, struct buffer_head *bh, int count)
+static unsigned int group_reserve_blocks(struct ext2_sb_info *sbi, int group_no,
+	struct ext2_group_desc *desc, struct buffer_head *bh, unsigned int count)
 {
 	unsigned free_blocks;
 
@@ -159,7 +159,7 @@ static int group_reserve_blocks(struct e
 }
 
 static void group_release_blocks(struct super_block *sb, int group_no,
-	struct ext2_group_desc *desc, struct buffer_head *bh, int count)
+	struct ext2_group_desc *desc, struct buffer_head *bh, unsigned int count)
 {
 	if (count) {
 		struct ext2_sb_info *sbi = EXT2_SB(sb);
@@ -324,7 +324,7 @@ got_it:
  * bitmap, and then for any free bit if that fails.
  * This function also updates quota and i_blocks field.
  */
-int ext2_new_block(struct inode *inode, unsigned long goal,
+unsigned int ext2_new_block(struct inode *inode, unsigned long goal,
 			u32 *prealloc_count, u32 *prealloc_block, int *err)
 {
 	struct buffer_head *bitmap_bh = NULL;
@@ -333,8 +333,8 @@ int ext2_new_block(struct inode *inode, 
 	int group_no;			/* i */
 	int ret_block;			/* j */
 	int group_idx;			/* k */
-	int target_block;		/* tmp */
-	int block = 0;
+	unsigned int target_block;	/* tmp */
+	unsigned int block = 0;
 	struct super_block *sb = inode->i_sb;
 	struct ext2_sb_info *sbi = EXT2_SB(sb);
 	struct ext2_super_block *es = sbi->s_es;
@@ -447,7 +447,6 @@ retry:
 		group_alloc = 0;
 		goto retry;
 	}
-
 got_block:
 	ext2_debug("using block group %d(%d)\n",
 		group_no, desc->bg_free_blocks_count);
@@ -465,7 +464,7 @@ got_block:
 
 	if (target_block >= le32_to_cpu(es->s_blocks_count)) {
 		ext2_error (sb, "ext2_new_block",
-			    "block(%d) >= blocks count(%d) - "
+			    "block(%d) >= blocks count(%u) - "
 			    "block_group = %d, es == %p ", ret_block,
 			le32_to_cpu(es->s_blocks_count), group_no, es);
 		goto io_error;
@@ -504,7 +503,7 @@ got_block:
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		sync_dirty_buffer(bitmap_bh);
 
-	ext2_debug ("allocating block %d. ", block);
+	ext2_debug ("allocating block %u. ", block);
 
 	*err = 0;
 out_release:
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/ext2.h linux-2.6.16-rc6-4g/fs/ext
2/ext2.h
--- linux-2.6.16-rc6.org/fs/ext2/ext2.h	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/ext2.h	2006-03-14 09:29:01.000000000 +0900
@@ -91,7 +91,7 @@ static inline struct ext2_inode_info *EX
 /* balloc.c */
 extern int ext2_bg_has_super(struct super_block *sb, int group);
 extern unsigned long ext2_bg_num_gdb(struct super_block *sb, int group);
-extern int ext2_new_block (struct inode *, unsigned long,
+extern unsigned int ext2_new_block (struct inode *, unsigned long,
 			   __u32 *, __u32 *, int *);
 extern void ext2_free_blocks (struct inode *, unsigned long,
 			      unsigned long);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/ialloc.c linux-2.6.16-rc6-4g/fs/e
xt2/ialloc.c
--- linux-2.6.16-rc6.org/fs/ext2/ialloc.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/ialloc.c	2006-03-14 09:29:01.000000000 +0900
@@ -83,7 +83,7 @@ static void ext2_release_inode(struct su
 			cpu_to_le16(le16_to_cpu(desc->bg_used_dirs_count) - 1);
 	spin_unlock(sb_bgl_lock(EXT2_SB(sb), group));
 	if (dir)
-		percpu_counter_dec(&EXT2_SB(sb)->s_dirs_counter);
+		percpu_llcounter_dec(&EXT2_SB(sb)->s_dirs_counter);
 	sb->s_dirt = 1;
 	mark_buffer_dirty(bh);
 }
@@ -276,22 +276,20 @@ static int find_group_orlov(struct super
 	struct ext2_super_block *es = sbi->s_es;
 	int ngroups = sbi->s_groups_count;
 	int inodes_per_group = EXT2_INODES_PER_GROUP(sb);
-	int freei;
+	unsigned long freei, free_blocks, ndirs;
 	int avefreei;
-	int free_blocks;
 	int avefreeb;
 	int blocks_per_dir;
-	int ndirs;
 	int max_debt, max_dirs, min_blocks, min_inodes;
 	int group = -1, i;
 	struct ext2_group_desc *desc;
 	struct buffer_head *bh;
 
-	freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter);
+	freei = percpu_llcounter_read_positive(&sbi->s_freeinodes_counter);
 	avefreei = freei / ngroups;
-	free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
+	free_blocks = percpu_llcounter_read_positive(&sbi->s_freeblocks_counter);
 	avefreeb = free_blocks / ngroups;
-	ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter);
+	ndirs = percpu_llcounter_read_positive(&sbi->s_dirs_counter);
 
 	if ((parent == sb->s_root->d_inode) ||
 	    (EXT2_I(parent)->i_flags & EXT2_TOPDIR_FL)) {
@@ -328,7 +326,7 @@ static int find_group_orlov(struct super
 	}
 
 	if (ndirs == 0)
-		ndirs = 1;	/* percpu_counters are approximate... */
+		ndirs = 1;	/* percpu_llcounters are approximate... */
 
 	blocks_per_dir = (le32_to_cpu(es->s_blocks_count)-free_blocks) / ndirs;
 
@@ -543,9 +541,9 @@ got:
 		goto fail;
 	}
 
-	percpu_counter_mod(&sbi->s_freeinodes_counter, -1);
+	percpu_llcounter_mod(&sbi->s_freeinodes_counter, -1);
 	if (S_ISDIR(mode))
-		percpu_counter_inc(&sbi->s_dirs_counter);
+		percpu_llcounter_inc(&sbi->s_dirs_counter);
 
 	spin_lock(sb_bgl_lock(sbi, group));
 	gdp->bg_free_inodes_count =
@@ -670,7 +668,7 @@ unsigned long ext2_count_free_inodes (st
 	}
 	brelse(bitmap_bh);
 	printk("ext2_count_free_inodes: stored = %lu, computed = %lu, %lu\n",
-		percpu_counter_read(&EXT2_SB(sb)->s_freeinodes_counter),
+		percpu_llcounter_read(&EXT2_SB(sb)->s_freeinodes_counter),
 		desc_count, bitmap_count);
 	unlock_super(sb);
 	return desc_count;
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/inode.c linux-2.6.16-rc6-4g/fs/ex
t2/inode.c
--- linux-2.6.16-rc6.org/fs/ext2/inode.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/inode.c	2006-03-15 21:16:51.000000000 +0900
@@ -107,7 +107,7 @@ void ext2_discard_prealloc (struct inode
 #endif
 }
 
-static int ext2_alloc_block (struct inode * inode, unsigned long goal, int *err)
+static unsigned int ext2_alloc_block (struct inode * inode, unsigned int goal, int *err)
 {
 #ifdef EXT2FS_DEBUG
 	static unsigned long alloc_hits, alloc_attempts;
@@ -193,8 +193,8 @@ static inline int verify_chain(Indirect 
  * get there at all.
  */
 
-static int ext2_block_to_path(struct inode *inode,
-			long i_block, int offsets[4], int *boundary)
+static int ext2_block_to_path(struct inode *inode, unsigned long i_block, 
+				unsigned int offsets[4], int *boundary)
 {
 	int ptrs = EXT2_ADDR_PER_BLOCK(inode->i_sb);
 	int ptrs_bits = EXT2_ADDR_PER_BLOCK_BITS(inode->i_sb);
@@ -263,7 +263,7 @@ static int ext2_block_to_path(struct ino
  */
 static Indirect *ext2_get_branch(struct inode *inode,
 				 int depth,
-				 int *offsets,
+				 unsigned int *offsets,
 				 Indirect chain[4],
 				 int *err)
 {
@@ -363,7 +363,7 @@ static unsigned long ext2_find_near(stru
  */
 
 static inline int ext2_find_goal(struct inode *inode,
-				 long block,
+				 unsigned long block,
 				 Indirect chain[4],
 				 Indirect *partial,
 				 unsigned long *goal)
@@ -418,20 +418,20 @@ static inline int ext2_find_goal(struct 
 static int ext2_alloc_branch(struct inode *inode,
 			     int num,
 			     unsigned long goal,
-			     int *offsets,
+			     unsigned int *offsets,
 			     Indirect *branch)
 {
 	int blocksize = inode->i_sb->s_blocksize;
 	int n = 0;
 	int err;
 	int i;
-	int parent = ext2_alloc_block(inode, goal, &err);
+	unsigned int parent = ext2_alloc_block(inode, goal, &err);
 
 	branch[0].key = cpu_to_le32(parent);
 	if (parent) for (n = 1; n < num; n++) {
 		struct buffer_head *bh;
 		/* Allocate the next block */
-		int nr = ext2_alloc_block(inode, parent, &err);
+		unsigned int nr = ext2_alloc_block(inode, parent, &err);
 		if (!nr)
 			break;
 		branch[n].key = cpu_to_le32(nr);
@@ -489,7 +489,7 @@ static int ext2_alloc_branch(struct inod
  */
 
 static inline int ext2_splice_branch(struct inode *inode,
-				     long block,
+				     unsigned long block,
 				     Indirect chain[4],
 				     Indirect *where,
 				     int num)
@@ -547,7 +547,7 @@ changed:
 int ext2_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create)
 {
 	int err = -EIO;
-	int offsets[4];
+	unsigned int offsets[4];
 	Indirect chain[4];
 	Indirect *partial;
 	unsigned long goal;
@@ -776,7 +776,7 @@ static inline int all_zeroes(__le32 *p, 
 
 static Indirect *ext2_find_shared(struct inode *inode,
 				int depth,
-				int offsets[4],
+				unsigned int offsets[4],
 				Indirect chain[4],
 				__le32 *top)
 {
@@ -892,7 +892,7 @@ static void ext2_free_branches(struct in
 			 */ 
 			if (!bh) {
 				ext2_error(inode->i_sb, "ext2_free_branches",
-					"Read failure, inode=%ld, block=%ld",
+					"Read failure, inode=%lu, block=%lu",
 					inode->i_ino, nr);
 				continue;
 			}
@@ -912,12 +912,12 @@ void ext2_truncate (struct inode * inode
 {
 	__le32 *i_data = EXT2_I(inode)->i_data;
 	int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
-	int offsets[4];
+	unsigned int offsets[4];
 	Indirect chain[4];
 	Indirect *partial;
 	__le32 nr = 0;
 	int n;
-	long iblock;
+	unsigned long iblock;
 	unsigned blocksize;
 
 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/super.c linux-2.6.16-rc6-4g/fs/ex
t2/super.c
--- linux-2.6.16-rc6.org/fs/ext2/super.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/super.c	2006-03-14 09:29:01.000000000 +0900
@@ -126,9 +126,9 @@ static void ext2_put_super (struct super
 			brelse (sbi->s_group_desc[i]);
 	kfree(sbi->s_group_desc);
 	kfree(sbi->s_debts);
-	percpu_counter_destroy(&sbi->s_freeblocks_counter);
-	percpu_counter_destroy(&sbi->s_freeinodes_counter);
-	percpu_counter_destroy(&sbi->s_dirs_counter);
+	percpu_llcounter_destroy(&sbi->s_freeblocks_counter);
+	percpu_llcounter_destroy(&sbi->s_freeinodes_counter);
+	percpu_llcounter_destroy(&sbi->s_dirs_counter);
 	brelse (sbi->s_sbh);
 	sb->s_fs_info = NULL;
 	kfree(sbi);
@@ -836,9 +836,9 @@ static int ext2_fill_super(struct super_
 		printk ("EXT2-fs: not enough memory\n");
 		goto failed_mount;
 	}
-	percpu_counter_init(&sbi->s_freeblocks_counter);
-	percpu_counter_init(&sbi->s_freeinodes_counter);
-	percpu_counter_init(&sbi->s_dirs_counter);
+	percpu_llcounter_init(&sbi->s_freeblocks_counter);
+	percpu_llcounter_init(&sbi->s_freeinodes_counter);
+	percpu_llcounter_init(&sbi->s_dirs_counter);
 	bgl_lock_init(&sbi->s_blockgroup_lock);
 	sbi->s_debts = kmalloc(sbi->s_groups_count * sizeof(*sbi->s_debts),
 			       GFP_KERNEL);
@@ -888,11 +888,11 @@ static int ext2_fill_super(struct super_
 		ext2_warning(sb, __FUNCTION__,
 			"mounting ext3 filesystem as ext2");
 	ext2_setup_super (sb, es, sb->s_flags & MS_RDONLY);
-	percpu_counter_mod(&sbi->s_freeblocks_counter,
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter,
 				ext2_count_free_blocks(sb));
-	percpu_counter_mod(&sbi->s_freeinodes_counter,
+	percpu_llcounter_mod(&sbi->s_freeinodes_counter,
 				ext2_count_free_inodes(sb));
-	percpu_counter_mod(&sbi->s_dirs_counter,
+	percpu_llcounter_mod(&sbi->s_dirs_counter,
 				ext2_count_dirs(sb));
 	return 0;
 
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/xattr.c linux-2.6.16-rc6-4g/fs/ex
t2/xattr.c
--- linux-2.6.16-rc6.org/fs/ext2/xattr.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/xattr.c	2006-03-14 09:29:01.000000000 +0900
@@ -71,7 +71,7 @@
 
 #ifdef EXT2_XATTR_DEBUG
 # define ea_idebug(inode, f...) do { \
-		printk(KERN_DEBUG "inode %s:%ld: ", \
+		printk(KERN_DEBUG "inode %s:%lu: ", \
 			inode->i_sb->s_id, inode->i_ino); \
 		printk(f); \
 		printk("\n"); \
@@ -164,7 +164,7 @@ ext2_xattr_get(struct inode *inode, int 
 	error = -ENODATA;
 	if (!EXT2_I(inode)->i_file_acl)
 		goto cleanup;
-	ea_idebug(inode, "reading block %d", EXT2_I(inode)->i_file_acl);
+	ea_idebug(inode, "reading block %u", EXT2_I(inode)->i_file_acl);
 	bh = sb_bread(inode->i_sb, EXT2_I(inode)->i_file_acl);
 	error = -EIO;
 	if (!bh)
@@ -175,7 +175,7 @@ ext2_xattr_get(struct inode *inode, int 
 	if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
 	    HDR(bh)->h_blocks != cpu_to_le32(1)) {
 bad_block:	ext2_error(inode->i_sb, "ext2_xattr_get",
-			"inode %ld: bad block %d", inode->i_ino,
+			"inode %lu: bad block %u", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		error = -EIO;
 		goto cleanup;
@@ -264,7 +264,7 @@ ext2_xattr_list(struct inode *inode, cha
 	error = 0;
 	if (!EXT2_I(inode)->i_file_acl)
 		goto cleanup;
-	ea_idebug(inode, "reading block %d", EXT2_I(inode)->i_file_acl);
+	ea_idebug(inode, "reading block %u", EXT2_I(inode)->i_file_acl);
 	bh = sb_bread(inode->i_sb, EXT2_I(inode)->i_file_acl);
 	error = -EIO;
 	if (!bh)
@@ -275,7 +275,7 @@ ext2_xattr_list(struct inode *inode, cha
 	if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
 	    HDR(bh)->h_blocks != cpu_to_le32(1)) {
 bad_block:	ext2_error(inode->i_sb, "ext2_xattr_list",
-			"inode %ld: bad block %d", inode->i_ino,
+			"inode %lu: bad block %u", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		error = -EIO;
 		goto cleanup;
@@ -411,7 +411,7 @@ ext2_xattr_set(struct inode *inode, int 
 		if (header->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
 		    header->h_blocks != cpu_to_le32(1)) {
 bad_block:		ext2_error(sb, "ext2_xattr_set",
-				"inode %ld: bad block %d", inode->i_ino, 
+				"inode %lu: bad block %u", inode->i_ino,
 				   EXT2_I(inode)->i_file_acl);
 			error = -EIO;
 			goto cleanup;
@@ -664,15 +664,15 @@ ext2_xattr_set2(struct inode *inode, str
 			ext2_xattr_cache_insert(new_bh);
 		} else {
 			/* We need to allocate a new block */
-			int goal = le32_to_cpu(EXT2_SB(sb)->s_es->
+			unsigned int goal = le32_to_cpu(EXT2_SB(sb)->s_es->
 						           s_first_data_block) +
 				   EXT2_I(inode)->i_block_group *
 				   EXT2_BLOCKS_PER_GROUP(sb);
-			int block = ext2_new_block(inode, goal,
+			unsigned int block = ext2_new_block(inode, goal,
 						   NULL, NULL, &error);
 			if (error)
 				goto cleanup;
-			ea_idebug(inode, "creating block %d", block);
+			ea_idebug(inode, "creating block %u", block);
 
 			new_bh = sb_getblk(sb, block);
 			if (!new_bh) {
@@ -772,7 +772,7 @@ ext2_xattr_delete_inode(struct inode *in
 	bh = sb_bread(inode->i_sb, EXT2_I(inode)->i_file_acl);
 	if (!bh) {
 		ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-			"inode %ld: block %d read error", inode->i_ino,
+			"inode %lu: block %u read error", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		goto cleanup;
 	}
@@ -780,7 +780,7 @@ ext2_xattr_delete_inode(struct inode *in
 	if (HDR(bh)->h_magic != cpu_to_le32(EXT2_XATTR_MAGIC) ||
 	    HDR(bh)->h_blocks != cpu_to_le32(1)) {
 		ext2_error(inode->i_sb, "ext2_xattr_delete_inode",
-			"inode %ld: bad block %d", inode->i_ino,
+			"inode %lu: bad block %u", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		goto cleanup;
 	}
@@ -931,13 +931,13 @@ again:
 		bh = sb_bread(inode->i_sb, ce->e_block);
 		if (!bh) {
 			ext2_error(inode->i_sb, "ext2_xattr_cache_find",
-				"inode %ld: block %ld read error",
+				"inode %lu: block %lu read error",
 				inode->i_ino, (unsigned long) ce->e_block);
 		} else {
 			lock_buffer(bh);
 			if (le32_to_cpu(HDR(bh)->h_refcount) >
 				   EXT2_XATTR_REFCOUNT_MAX) {
-				ea_idebug(inode, "block %ld refcount %d>%d",
+				ea_idebug(inode, "block %lu refcount %d>%d",
 					  (unsigned long) ce->e_block,
 					  le32_to_cpu(HDR(bh)->h_refcount),
 					  EXT2_XATTR_REFCOUNT_MAX);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext2/xip.c linux-2.6.16-rc6-4g/fs/ext2
/xip.c
--- linux-2.6.16-rc6.org/fs/ext2/xip.c	2006-01-03 12:21:10.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext2/xip.c	2006-03-14 09:29:01.000000000 +0900
@@ -44,8 +44,8 @@ __ext2_get_sector(struct inode *inode, s
 	return rc;
 }
 
-int
-ext2_clear_xip_target(struct inode *inode, int block)
+unsigned int
+ext2_clear_xip_target(struct inode *inode, unsigned int block)
 {
 	sector_t sector = block * (PAGE_SIZE/512);
 	unsigned long data;
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/balloc.c linux-2.6.16-rc6-4g/fs/e
xt3/balloc.c
--- linux-2.6.16-rc6.org/fs/ext3/balloc.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/balloc.c	2006-03-14 09:29:01.000000000 +0900
@@ -36,7 +36,6 @@
  * when a file system is mounted (see ext3_read_super).
  */
 
-
 #define in_range(b, first, len)	((b) >= (first) && (b) <= (first) + (len) - 1)
 
 struct ext3_group_desc * ext3_get_group_desc(struct super_block * sb,
@@ -467,7 +466,7 @@ do_more:
 		cpu_to_le16(le16_to_cpu(desc->bg_free_blocks_count) +
 			group_freed);
 	spin_unlock(sb_bgl_lock(sbi, block_group));
-	percpu_counter_mod(&sbi->s_freeblocks_counter, count);
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter, count);
 
 	/* We dirtied the bitmap block */
 	BUFFER_TRACE(bitmap_bh, "dirtied bitmap block");
@@ -1118,9 +1117,10 @@ out:
 
 static int ext3_has_free_blocks(struct ext3_sb_info *sbi)
 {
-	int free_blocks, root_blocks;
+	unsigned long free_blocks;
+	int  root_blocks;
 
-	free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
+	free_blocks = percpu_llcounter_read_positive(&sbi->s_freeblocks_counter);
 	root_blocks = le32_to_cpu(sbi->s_es->s_r_blocks_count);
 	if (free_blocks < root_blocks + 1 && !capable(CAP_SYS_RESOURCE) &&
 		sbi->s_resuid != current->fsuid &&
@@ -1154,19 +1154,20 @@ int ext3_should_retry_alloc(struct super
  * bitmap, and then for any free bit if that fails.
  * This function also updates quota and i_blocks field.
  */
-int ext3_new_block(handle_t *handle, struct inode *inode,
+unsigned int ext3_new_block(handle_t *handle, struct inode *inode,
 			unsigned long goal, int *errp)
 {
 	struct buffer_head *bitmap_bh = NULL;
 	struct buffer_head *gdp_bh;
 	int group_no;
 	int goal_group;
-	int ret_block;
+	unsigned int ret_block;
 	int bgi;			/* blockgroup iteration index */
-	int target_block;
+	unsigned int target_block;
 	int fatal = 0, err;
 	int performed_allocation = 0;
 	int free_blocks;
+	int group_block;
 	struct super_block *sb;
 	struct ext3_group_desc *gdp;
 	struct ext3_super_block *es;
@@ -1238,17 +1239,19 @@ retry:
 		my_rsv = NULL;
 
 	if (free_blocks > 0) {
-		ret_block = ((goal - le32_to_cpu(es->s_first_data_block)) %
+		group_block = ((goal - le32_to_cpu(es->s_first_data_block)) %
 				EXT3_BLOCKS_PER_GROUP(sb));
 		bitmap_bh = read_block_bitmap(sb, group_no);
 		if (!bitmap_bh)
 			goto io_error;
-		ret_block = ext3_try_to_allocate_with_rsv(sb, handle, group_no,
-					bitmap_bh, ret_block, my_rsv, &fatal);
+		group_block = ext3_try_to_allocate_with_rsv(sb, handle, group_no,
+					bitmap_bh, group_block, my_rsv, &fatal);
 		if (fatal)
 			goto out;
-		if (ret_block >= 0)
+		if (group_block >= 0) {
+			ret_block = group_block;
 			goto allocated;
+		}
 	}
 
 	ngroups = EXT3_SB(sb)->s_groups_count;
@@ -1280,12 +1283,14 @@ retry:
 		bitmap_bh = read_block_bitmap(sb, group_no);
 		if (!bitmap_bh)
 			goto io_error;
-		ret_block = ext3_try_to_allocate_with_rsv(sb, handle, group_no,
+		group_block = ext3_try_to_allocate_with_rsv(sb, handle, group_no,
 					bitmap_bh, -1, my_rsv, &fatal);
 		if (fatal)
 			goto out;
-		if (ret_block >= 0) 
+		if (group_block >= 0) {
+			ret_block = group_block;
 			goto allocated;
+		}
 	}
 	/*
 	 * We may end up a bogus ealier ENOSPC error due to
@@ -1347,7 +1352,7 @@ allocated:
 				"b_committed_data\n", __FUNCTION__);
 		}
 	}
-	ext3_debug("found bit %d\n", ret_block);
+	ext3_debug("found bit %u\n", ret_block);
 	spin_unlock(sb_bgl_lock(sbi, group_no));
 	jbd_unlock_bh_state(bitmap_bh);
 #endif
@@ -1357,8 +1362,8 @@ allocated:
 
 	if (ret_block >= le32_to_cpu(es->s_blocks_count)) {
 		ext3_error(sb, "ext3_new_block",
-			    "block(%d) >= blocks count(%d) - "
-			    "block_group = %d, es == %p ", ret_block,
+			    "block(%u) >= blocks count(%u) - "
+			    "block_group = %u, es == %p ", ret_block,
 			le32_to_cpu(es->s_blocks_count), group_no, es);
 		goto out;
 	}
@@ -1368,14 +1373,14 @@ allocated:
 	 * list of some description.  We don't know in advance whether
 	 * the caller wants to use it as metadata or data.
 	 */
-	ext3_debug("allocating block %d. Goal hits %d of %d.\n",
+	ext3_debug("allocating block %u. Goal hits %d of %d.\n",
 			ret_block, goal_hits, goal_attempts);
 
 	spin_lock(sb_bgl_lock(sbi, group_no));
 	gdp->bg_free_blocks_count =
 			cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) - 1);
 	spin_unlock(sb_bgl_lock(sbi, group_no));
-	percpu_counter_mod(&sbi->s_freeblocks_counter, -1);
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter, -1);
 
 	BUFFER_TRACE(gdp_bh, "journal_dirty_metadata for group descriptor");
 	err = ext3_journal_dirty_metadata(handle, gdp_bh);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/ialloc.c linux-2.6.16-rc6-4g/fs/e
xt3/ialloc.c
--- linux-2.6.16-rc6.org/fs/ext3/ialloc.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/ialloc.c	2006-03-14 09:29:01.000000000 +0900
@@ -170,9 +170,9 @@ void ext3_free_inode (handle_t *handle, 
 				gdp->bg_used_dirs_count = cpu_to_le16(
 				  le16_to_cpu(gdp->bg_used_dirs_count) - 1);
 			spin_unlock(sb_bgl_lock(sbi, block_group));
-			percpu_counter_inc(&sbi->s_freeinodes_counter);
+			percpu_llcounter_inc(&sbi->s_freeinodes_counter);
 			if (is_directory)
-				percpu_counter_dec(&sbi->s_dirs_counter);
+				percpu_llcounter_dec(&sbi->s_dirs_counter);
 
 		}
 		BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
@@ -202,12 +202,13 @@ error_return:
 static int find_group_dir(struct super_block *sb, struct inode *parent)
 {
 	int ngroups = EXT3_SB(sb)->s_groups_count;
-	int freei, avefreei;
+	unsigned long freei;
+	int avefreei;
 	struct ext3_group_desc *desc, *best_desc = NULL;
 	struct buffer_head *bh;
 	int group, best_group = -1;
 
-	freei = percpu_counter_read_positive(&EXT3_SB(sb)->s_freeinodes_counter);
+	freei = percpu_llcounter_read_positive(&EXT3_SB(sb)->s_freeinodes_counter);
 	avefreei = freei / ngroups;
 
 	for (group = 0; group < ngroups; group++) {
@@ -261,19 +262,20 @@ static int find_group_orlov(struct super
 	struct ext3_super_block *es = sbi->s_es;
 	int ngroups = sbi->s_groups_count;
 	int inodes_per_group = EXT3_INODES_PER_GROUP(sb);
-	int freei, avefreei;
-	int freeb, avefreeb;
-	int blocks_per_dir, ndirs;
+	unsigned long freei, freeb, ndirs;
+	int avefreei;
+	int avefreeb;
+	int blocks_per_dir;
 	int max_debt, max_dirs, min_blocks, min_inodes;
 	int group = -1, i;
 	struct ext3_group_desc *desc;
 	struct buffer_head *bh;
 
-	freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter);
+	freei = percpu_llcounter_read_positive(&sbi->s_freeinodes_counter);
 	avefreei = freei / ngroups;
-	freeb = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
+	freeb = percpu_llcounter_read_positive(&sbi->s_freeblocks_counter);
 	avefreeb = freeb / ngroups;
-	ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter);
+	ndirs = percpu_llcounter_read_positive(&sbi->s_dirs_counter);
 
 	if ((parent == sb->s_root->d_inode) ||
 	    (EXT3_I(parent)->i_flags & EXT3_TOPDIR_FL)) {
@@ -539,9 +541,9 @@ got:
 	err = ext3_journal_dirty_metadata(handle, bh2);
 	if (err) goto fail;
 
-	percpu_counter_dec(&sbi->s_freeinodes_counter);
+	percpu_llcounter_dec(&sbi->s_freeinodes_counter);
 	if (S_ISDIR(mode))
-		percpu_counter_inc(&sbi->s_dirs_counter);
+		percpu_llcounter_inc(&sbi->s_dirs_counter);
 	sb->s_dirt = 1;
 
 	inode->i_uid = current->fsuid;
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/inode.c linux-2.6.16-rc6-4g/fs/ex
t3/inode.c
--- linux-2.6.16-rc6.org/fs/ext3/inode.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/inode.c	2006-03-14 09:29:01.000000000 +0900
@@ -64,7 +64,7 @@ static inline int ext3_inode_is_fast_sym
 
 int ext3_forget(handle_t *handle, int is_metadata,
 		       struct inode *inode, struct buffer_head *bh,
-		       int blocknr)
+		       unsigned int blocknr)
 {
 	int err;
 
@@ -235,10 +235,10 @@ no_delete:
 	clear_inode(inode);	/* We must guarantee clearing of inode... */
 }
 
-static int ext3_alloc_block (handle_t *handle,
-			struct inode * inode, unsigned long goal, int *err)
+static unsigned int ext3_alloc_block (handle_t *handle,
+			struct inode * inode, unsigned int goal, int *err)
 {
-	unsigned long result;
+	unsigned int result;
 
 	result = ext3_new_block(handle, inode, goal, err);
 	return result;
@@ -296,7 +296,7 @@ static inline int verify_chain(Indirect 
  */
 
 static int ext3_block_to_path(struct inode *inode,
-			long i_block, int offsets[4], int *boundary)
+			unsigned long i_block, unsigned int offsets[4], int *boundary)
 {
 	int ptrs = EXT3_ADDR_PER_BLOCK(inode->i_sb);
 	int ptrs_bits = EXT3_ADDR_PER_BLOCK_BITS(inode->i_sb);
@@ -363,7 +363,7 @@ static int ext3_block_to_path(struct ino
  *	or when it reads all @depth-1 indirect blocks successfully and finds
  *	the whole chain, all way to the data (returns %NULL, *err == 0).
  */
-static Indirect *ext3_get_branch(struct inode *inode, int depth, int *offsets,
+static Indirect *ext3_get_branch(struct inode *inode, int depth, unsigned int *offsets,
 				 Indirect chain[4], int *err)
 {
 	struct super_block *sb = inode->i_sb;
@@ -460,7 +460,7 @@ static unsigned long ext3_find_near(stru
  *	stores it in *@goal and returns zero.
  */
 
-static unsigned long ext3_find_goal(struct inode *inode, long block,
+static unsigned long ext3_find_goal(struct inode *inode, unsigned long block,
 		Indirect chain[4], Indirect *partial)
 {
 	struct ext3_block_alloc_info *block_i =  EXT3_I(inode)->i_block_alloc_info;
@@ -505,21 +505,21 @@ static unsigned long ext3_find_goal(stru
 static int ext3_alloc_branch(handle_t *handle, struct inode *inode,
 			     int num,
 			     unsigned long goal,
-			     int *offsets,
+			     unsigned int *offsets,
 			     Indirect *branch)
 {
 	int blocksize = inode->i_sb->s_blocksize;
 	int n = 0, keys = 0;
 	int err = 0;
 	int i;
-	int parent = ext3_alloc_block(handle, inode, goal, &err);
+	unsigned int parent = ext3_alloc_block(handle, inode, goal, &err);
 
 	branch[0].key = cpu_to_le32(parent);
 	if (parent) {
 		for (n = 1; n < num; n++) {
 			struct buffer_head *bh;
 			/* Allocate the next block */
-			int nr = ext3_alloc_block(handle, inode, parent, &err);
+			unsigned int nr = ext3_alloc_block(handle, inode, parent, &err);
 			if (!nr)
 				break;
 			branch[n].key = cpu_to_le32(nr);
@@ -585,7 +585,7 @@ static int ext3_alloc_branch(handle_t *h
  *	chain to new block and return 0.
  */
 
-static int ext3_splice_branch(handle_t *handle, struct inode *inode, long block,
+static int ext3_splice_branch(handle_t *handle, struct inode *inode, unsigned long block,
 			      Indirect chain[4], Indirect *where, int num)
 {
 	int i;
@@ -676,7 +676,7 @@ ext3_get_block_handle(handle_t *handle, 
 		struct buffer_head *bh_result, int create, int extend_disksize)
 {
 	int err = -EIO;
-	int offsets[4];
+	unsigned int offsets[4];
 	Indirect chain[4];
 	Indirect *partial;
 	unsigned long goal;
@@ -852,7 +852,7 @@ get_block:
  * `handle' can be NULL if create is zero
  */
 struct buffer_head *ext3_getblk(handle_t *handle, struct inode * inode,
-				long block, int create, int * errp)
+				unsigned long block, int create, int * errp)
 {
 	struct buffer_head dummy;
 	int fatal = 0, err;
@@ -907,7 +907,7 @@ err:
 }
 
 struct buffer_head *ext3_bread(handle_t *handle, struct inode * inode,
-			       int block, int create, int *err)
+			       unsigned int block, int create, int *err)
 {
 	struct buffer_head * bh;
 
@@ -1754,7 +1754,7 @@ static inline int all_zeroes(__le32 *p, 
 
 static Indirect *ext3_find_shared(struct inode *inode,
 				int depth,
-				int offsets[4],
+				unsigned int offsets[4],
 				Indirect chain[4],
 				__le32 *top)
 {
@@ -1967,7 +1967,7 @@ static void ext3_free_branches(handle_t 
 			 */
 			if (!bh) {
 				ext3_error(inode->i_sb, "ext3_free_branches",
-					   "Read failure, inode=%ld, block=%ld",
+					   "Read failure, inode=%lu, block=%lu",
 					   inode->i_ino, nr);
 				continue;
 			}
@@ -2084,12 +2084,12 @@ void ext3_truncate(struct inode * inode)
 	__le32 *i_data = ei->i_data;
 	int addr_per_block = EXT3_ADDR_PER_BLOCK(inode->i_sb);
 	struct address_space *mapping = inode->i_mapping;
-	int offsets[4];
+	unsigned int offsets[4];
 	Indirect chain[4];
 	Indirect *partial;
 	__le32 nr = 0;
 	int n;
-	long last_block;
+	unsigned long last_block;
 	unsigned blocksize = inode->i_sb->s_blocksize;
 	struct page *page;
 
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/namei.c linux-2.6.16-rc6-4g/fs/ex
t3/namei.c
--- linux-2.6.16-rc6.org/fs/ext3/namei.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/namei.c	2006-03-14 09:29:01.000000000 +0900
@@ -816,7 +816,8 @@ static struct buffer_head * ext3_find_en
 	int ra_ptr = 0;		/* Current index into readahead
 				   buffer */
 	int num = 0;
-	int nblocks, i, err;
+	unsigned int nblocks;
+	int i, err;
 	struct inode *dir = dentry->d_parent->d_inode;
 	int namelen;
 	const u8 *name;
@@ -1910,8 +1911,8 @@ int ext3_orphan_add(handle_t *handle, st
 	if (!err)
 		list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
 
-	jbd_debug(4, "superblock will point to %ld\n", inode->i_ino);
-	jbd_debug(4, "orphan inode %ld will point to %d\n",
+	jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
+	jbd_debug(4, "orphan inode %lu will point to %d\n",
 			inode->i_ino, NEXT_ORPHAN(inode));
 out_unlock:
 	unlock_super(sb);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/resize.c linux-2.6.16-rc6-4g/fs/e
xt3/resize.c
--- linux-2.6.16-rc6.org/fs/ext3/resize.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/resize.c	2006-03-14 09:29:01.000000000 +0900
@@ -37,7 +37,7 @@ static int verify_group_input(struct sup
 		 le16_to_cpu(es->s_reserved_gdt_blocks)) : 0;
 	unsigned metaend = start + overhead;
 	struct buffer_head *bh = NULL;
-	int free_blocks_count;
+	long long free_blocks_count;
 	int err = -EINVAL;
 
 	input->free_blocks_count = free_blocks_count =
@@ -45,7 +45,7 @@ static int verify_group_input(struct sup
 
 	if (test_opt(sb, DEBUG))
 		printk(KERN_DEBUG "EXT3-fs: adding %s group %u: %u blocks "
-		       "(%d free, %u reserved)\n",
+		       "(%lld free, %u reserved)\n",
 		       ext3_bg_has_super(sb, input->group) ? "normal" :
 		       "no-super", input->group, input->blocks_count,
 		       free_blocks_count, input->reserved_blocks);
@@ -138,14 +138,14 @@ static struct buffer_head *bclean(handle
  * need to use it within a single byte (to ensure we get endianness right).
  * We can use memset for the rest of the bitmap as there are no other users.
  */
-static void mark_bitmap_end(int start_bit, int end_bit, char *bitmap)
+static void mark_bitmap_end(unsigned int start_bit, unsigned int end_bit, char *bitmap)
 {
-	int i;
+	unsigned int i;
 
 	if (start_bit >= end_bit)
 		return;
 
-	ext3_debug("mark end bits +%d through +%d used\n", start_bit, end_bit);
+	ext3_debug("mark end bits +%u through +%u used\n", start_bit, end_bit);
 	for (i = start_bit; i < ((start_bit + 7) & ~7UL); i++)
 		ext3_set_bit(i, bitmap);
 	if (i < end_bit)
@@ -340,7 +340,7 @@ static int verify_reserved_gdb(struct su
 	while ((grp = ext3_list_backups(sb, &three, &five, &seven)) < end) {
 		if (le32_to_cpu(*p++) != grp * EXT3_BLOCKS_PER_GROUP(sb) + blk){
 			ext3_warning(sb, __FUNCTION__,
-				     "reserved GDT %ld missing grp %d (%ld)",
+				     "reserved GDT %ld missing grp %d (%lu)",
 				     blk, grp,
 				     grp * EXT3_BLOCKS_PER_GROUP(sb) + blk);
 			return -EINVAL;
@@ -619,7 +619,7 @@ exit_free:
  * at this time.  The resize which changed s_groups_count will backup again.
  */
 static void update_backups(struct super_block *sb,
-			   int blk_off, char *data, int size)
+			   unsigned int blk_off, char *data, int size)
 {
 	struct ext3_sb_info *sbi = EXT3_SB(sb);
 	const unsigned long last = sbi->s_groups_count;
@@ -869,9 +869,9 @@ int ext3_group_add(struct super_block *s
 		input->reserved_blocks);
 
 	/* Update the free space counts */
-	percpu_counter_mod(&sbi->s_freeblocks_counter,
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter,
 			   input->free_blocks_count);
-	percpu_counter_mod(&sbi->s_freeinodes_counter,
+	percpu_llcounter_mod(&sbi->s_freeinodes_counter,
 			   EXT3_INODES_PER_GROUP(sb));
 
 	ext3_journal_dirty_metadata(handle, sbi->s_sbh);
@@ -990,10 +990,10 @@ int ext3_group_extend(struct super_block
 	ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
 	sb->s_dirt = 1;
 	unlock_super(sb);
-	ext3_debug("freeing blocks %ld through %ld\n", o_blocks_count,
+	ext3_debug("freeing blocks %lu through %lu\n", o_blocks_count,
 		   o_blocks_count + add);
 	ext3_free_blocks_sb(handle, sb, o_blocks_count, add, &freed_blocks);
-	ext3_debug("freed blocks %ld through %ld\n", o_blocks_count,
+	ext3_debug("freed blocks %lu through %lu\n", o_blocks_count,
 		   o_blocks_count + add);
 	if ((err = ext3_journal_stop(handle)))
 		goto exit_put;
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/super.c linux-2.6.16-rc6-4g/fs/ex
t3/super.c
--- linux-2.6.16-rc6.org/fs/ext3/super.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/super.c	2006-03-14 09:29:01.000000000 +0900
@@ -377,7 +377,7 @@ static void dump_orphan_list(struct supe
 	list_for_each(l, &sbi->s_orphan) {
 		struct inode *inode = orphan_list_entry(l);
 		printk(KERN_ERR "  "
-		       "inode %s:%ld at %p: mode %o, nlink %d, next %d\n",
+		       "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
 		       inode->i_sb->s_id, inode->i_ino, inode,
 		       inode->i_mode, inode->i_nlink, 
 		       NEXT_ORPHAN(inode));
@@ -403,9 +403,9 @@ static void ext3_put_super (struct super
 	for (i = 0; i < sbi->s_gdb_count; i++)
 		brelse(sbi->s_group_desc[i]);
 	kfree(sbi->s_group_desc);
-	percpu_counter_destroy(&sbi->s_freeblocks_counter);
-	percpu_counter_destroy(&sbi->s_freeinodes_counter);
-	percpu_counter_destroy(&sbi->s_dirs_counter);
+	percpu_llcounter_destroy(&sbi->s_freeblocks_counter);
+	percpu_llcounter_destroy(&sbi->s_freeinodes_counter);
+	percpu_llcounter_destroy(&sbi->s_dirs_counter);
 	brelse(sbi->s_sbh);
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
@@ -1253,17 +1253,17 @@ static void ext3_orphan_cleanup (struct 
 		DQUOT_INIT(inode);
 		if (inode->i_nlink) {
 			printk(KERN_DEBUG
-				"%s: truncating inode %ld to %Ld bytes\n",
+				"%s: truncating inode %lu to %Ld bytes\n",
 				__FUNCTION__, inode->i_ino, inode->i_size);
-			jbd_debug(2, "truncating inode %ld to %Ld bytes\n",
+			jbd_debug(2, "truncating inode %lu to %Ld bytes\n",
 				  inode->i_ino, inode->i_size);
 			ext3_truncate(inode);
 			nr_truncates++;
 		} else {
 			printk(KERN_DEBUG
-				"%s: deleting unreferenced inode %ld\n",
+				"%s: deleting unreferenced inode %lu\n",
 				__FUNCTION__, inode->i_ino);
-			jbd_debug(2, "deleting unreferenced inode %ld\n",
+			jbd_debug(2, "deleting unreferenced inode %lu\n",
 				  inode->i_ino);
 			nr_orphans++;
 		}
@@ -1578,9 +1578,9 @@ static int ext3_fill_super (struct super
 		goto failed_mount;
 	}
 
-	percpu_counter_init(&sbi->s_freeblocks_counter);
-	percpu_counter_init(&sbi->s_freeinodes_counter);
-	percpu_counter_init(&sbi->s_dirs_counter);
+	percpu_llcounter_init(&sbi->s_freeblocks_counter);
+	percpu_llcounter_init(&sbi->s_freeinodes_counter);
+	percpu_llcounter_init(&sbi->s_dirs_counter);
 	bgl_lock_init(&sbi->s_blockgroup_lock);
 
 	for (i = 0; i < db_count; i++) {
@@ -1728,11 +1728,11 @@ static int ext3_fill_super (struct super
 		test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
 		"writeback");
 
-	percpu_counter_mod(&sbi->s_freeblocks_counter,
+	percpu_llcounter_mod(&sbi->s_freeblocks_counter,
 		ext3_count_free_blocks(sb));
-	percpu_counter_mod(&sbi->s_freeinodes_counter,
+	percpu_llcounter_mod(&sbi->s_freeinodes_counter,
 		ext3_count_free_inodes(sb));
-	percpu_counter_mod(&sbi->s_dirs_counter,
+	percpu_llcounter_mod(&sbi->s_dirs_counter,
 		ext3_count_dirs(sb));
 
 	lock_kernel();
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/ext3/xattr.c linux-2.6.16-rc6-4g/fs/ex
t3/xattr.c
--- linux-2.6.16-rc6.org/fs/ext3/xattr.c	2006-03-14 09:09:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/ext3/xattr.c	2006-03-14 09:29:01.000000000 +0900
@@ -75,7 +75,7 @@
 
 #ifdef EXT3_XATTR_DEBUG
 # define ea_idebug(inode, f...) do { \
-		printk(KERN_DEBUG "inode %s:%ld: ", \
+		printk(KERN_DEBUG "inode %s:%lu: ", \
 			inode->i_sb->s_id, inode->i_ino); \
 		printk(f); \
 		printk("\n"); \
@@ -225,7 +225,7 @@ ext3_xattr_block_get(struct inode *inode
 	error = -ENODATA;
 	if (!EXT3_I(inode)->i_file_acl)
 		goto cleanup;
-	ea_idebug(inode, "reading block %d", EXT3_I(inode)->i_file_acl);
+	ea_idebug(inode, "reading block %u", EXT3_I(inode)->i_file_acl);
 	bh = sb_bread(inode->i_sb, EXT3_I(inode)->i_file_acl);
 	if (!bh)
 		goto cleanup;
@@ -233,7 +233,7 @@ ext3_xattr_block_get(struct inode *inode
 		atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
 	if (ext3_xattr_check_block(bh)) {
 bad_block:	ext3_error(inode->i_sb, __FUNCTION__,
-			   "inode %ld: bad block %d", inode->i_ino,
+			   "inode %lu: bad block %u", inode->i_ino,
 			   EXT3_I(inode)->i_file_acl);
 		error = -EIO;
 		goto cleanup;
@@ -366,7 +366,7 @@ ext3_xattr_block_list(struct inode *inod
 	error = 0;
 	if (!EXT3_I(inode)->i_file_acl)
 		goto cleanup;
-	ea_idebug(inode, "reading block %d", EXT3_I(inode)->i_file_acl);
+	ea_idebug(inode, "reading block %u", EXT3_I(inode)->i_file_acl);
 	bh = sb_bread(inode->i_sb, EXT3_I(inode)->i_file_acl);
 	error = -EIO;
 	if (!bh)
@@ -375,7 +375,7 @@ ext3_xattr_block_list(struct inode *inod
 		atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
 	if (ext3_xattr_check_block(bh)) {
 		ext3_error(inode->i_sb, __FUNCTION__,
-			   "inode %ld: bad block %d", inode->i_ino,
+			   "inode %lu: bad block %u", inode->i_ino,
 			   EXT3_I(inode)->i_file_acl);
 		error = -EIO;
 		goto cleanup;
@@ -647,7 +647,7 @@ ext3_xattr_block_find(struct inode *inod
 			le32_to_cpu(BHDR(bs->bh)->h_refcount));
 		if (ext3_xattr_check_block(bs->bh)) {
 			ext3_error(sb, __FUNCTION__,
-				"inode %ld: bad block %d", inode->i_ino,
+				"inode %lu: bad block %u", inode->i_ino,
 				EXT3_I(inode)->i_file_acl);
 			error = -EIO;
 			goto cleanup;
@@ -792,14 +792,14 @@ inserted:
 			get_bh(new_bh);
 		} else {
 			/* We need to allocate a new block */
-			int goal = le32_to_cpu(
+			unsigned int goal = le32_to_cpu(
 					EXT3_SB(sb)->s_es->s_first_data_block) +
 				EXT3_I(inode)->i_block_group *
 				EXT3_BLOCKS_PER_GROUP(sb);
-			int block = ext3_new_block(handle, inode, goal, &error);
+			unsigned int block = ext3_new_block(handle, inode, goal, &error);
 			if (error)
 				goto cleanup;
-			ea_idebug(inode, "creating block %d", block);
+			ea_idebug(inode, "creating block %u", block);
 
 			new_bh = sb_getblk(sb, block);
 			if (!new_bh) {
@@ -847,7 +847,7 @@ cleanup_dquot:
 
 bad_block:
 	ext3_error(inode->i_sb, __FUNCTION__,
-		   "inode %ld: bad block %d", inode->i_ino,
+		   "inode %lu: bad block %u", inode->i_ino,
 		   EXT3_I(inode)->i_file_acl);
 	goto cleanup;
 
@@ -1076,14 +1076,14 @@ ext3_xattr_delete_inode(handle_t *handle
 	bh = sb_bread(inode->i_sb, EXT3_I(inode)->i_file_acl);
 	if (!bh) {
 		ext3_error(inode->i_sb, __FUNCTION__,
-			"inode %ld: block %d read error", inode->i_ino,
+			"inode %lu: block %u read error", inode->i_ino,
 			EXT3_I(inode)->i_file_acl);
 		goto cleanup;
 	}
 	if (BHDR(bh)->h_magic != cpu_to_le32(EXT3_XATTR_MAGIC) ||
 	    BHDR(bh)->h_blocks != cpu_to_le32(1)) {
 		ext3_error(inode->i_sb, __FUNCTION__,
-			"inode %ld: bad block %d", inode->i_ino,
+			"inode %lu: bad block %u", inode->i_ino,
 			EXT3_I(inode)->i_file_acl);
 		goto cleanup;
 	}
@@ -1210,11 +1210,11 @@ again:
 		bh = sb_bread(inode->i_sb, ce->e_block);
 		if (!bh) {
 			ext3_error(inode->i_sb, __FUNCTION__,
-				"inode %ld: block %ld read error",
+				"inode %lu: block %lu read error",
 				inode->i_ino, (unsigned long) ce->e_block);
 		} else if (le32_to_cpu(BHDR(bh)->h_refcount) >=
 				EXT3_XATTR_REFCOUNT_MAX) {
-			ea_idebug(inode, "block %ld refcount %d>=%d",
+			ea_idebug(inode, "block %lu refcount %d>=%d",
 				  (unsigned long) ce->e_block,
 				  le32_to_cpu(BHDR(bh)->h_refcount),
 					  EXT3_XATTR_REFCOUNT_MAX);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/fs/jbd/journal.c linux-2.6.16-rc6-4g/fs/j
bd/journal.c
--- linux-2.6.16-rc6.org/fs/jbd/journal.c	2006-01-03 12:21:10.000000000 +0900
+++ linux-2.6.16-rc6-4g/fs/jbd/journal.c	2006-03-14 09:29:01.000000000 +0900
@@ -761,7 +761,7 @@ journal_t * journal_init_inode (struct i
 	journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev;
 	journal->j_inode = inode;
 	jbd_debug(1,
-		  "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n",
+		  "journal %p: inode %s/%u, size %Ld, bits %d, blksize %ld\n",
 		  journal, inode->i_sb->s_id, inode->i_ino, 
 		  (long long) inode->i_size,
 		  inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/include/linux/ext2_fs_sb.h linux-2.6.16-r
c6-4g/include/linux/ext2_fs_sb.h
--- linux-2.6.16-rc6.org/include/linux/ext2_fs_sb.h	2006-01-03 12:21:10.000000000 +0900
+++ linux-2.6.16-rc6-4g/include/linux/ext2_fs_sb.h	2006-03-14 12:06:21.000000000 +0900
@@ -17,7 +17,7 @@
 #define _LINUX_EXT2_FS_SB
 
 #include <linux/blockgroup_lock.h>
-#include <linux/percpu_counter.h>
+#include <linux/percpu_llcounter.h>
 
 /*
  * second extended-fs super-block data in memory
@@ -49,9 +49,9 @@ struct ext2_sb_info {
 	u32 s_next_generation;
 	unsigned long s_dir_count;
 	u8 *s_debts;
-	struct percpu_counter s_freeblocks_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
+	struct percpu_llcounter s_freeblocks_counter;
+	struct percpu_llcounter s_freeinodes_counter;
+	struct percpu_llcounter s_dirs_counter;
 	struct blockgroup_lock s_blockgroup_lock;
 };
 
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/include/linux/ext3_fs.h linux-2.6.16-rc6-
4g/include/linux/ext3_fs.h
--- linux-2.6.16-rc6.org/include/linux/ext3_fs.h	2006-01-03 12:21:10.000000000 +0900
+++ linux-2.6.16-rc6-4g/include/linux/ext3_fs.h	2006-03-14 09:29:01.000000000 +0900
@@ -731,7 +731,7 @@ struct dir_private_info {
 /* balloc.c */
 extern int ext3_bg_has_super(struct super_block *sb, int group);
 extern unsigned long ext3_bg_num_gdb(struct super_block *sb, int group);
-extern int ext3_new_block (handle_t *, struct inode *, unsigned long, int *);
+extern unsigned int ext3_new_block (handle_t *, struct inode *, unsigned long, int *);
 extern void ext3_free_blocks (handle_t *, struct inode *, unsigned long,
 			      unsigned long);
 extern void ext3_free_blocks_sb (handle_t *, struct super_block *,
@@ -761,7 +761,6 @@ extern int ext3_sync_file (struct file *
 extern int ext3fs_dirhash(const char *name, int len, struct
 			  dx_hash_info *hinfo);
 
-/* ialloc.c */
 extern struct inode * ext3_new_inode (handle_t *, struct inode *, int);
 extern void ext3_free_inode (handle_t *, struct inode *);
 extern struct inode * ext3_orphan_get (struct super_block *, unsigned long);
@@ -772,9 +771,9 @@ extern unsigned long ext3_count_free (st
 
 
 /* inode.c */
-extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int);
-extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
-extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
+extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, unsigned int);
+extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, unsigned long, int, int *);
+extern struct buffer_head * ext3_bread (handle_t *, struct inode *, unsigned int, int, int *);
 
 extern void ext3_read_inode (struct inode *);
 extern int  ext3_write_inode (struct inode *, int);
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/include/linux/ext3_fs_sb.h linux-2.6.16-r
c6-4g/include/linux/ext3_fs_sb.h
--- linux-2.6.16-rc6.org/include/linux/ext3_fs_sb.h	2006-01-03 12:21:10.000000000 +0900
+++ linux-2.6.16-rc6-4g/include/linux/ext3_fs_sb.h	2006-03-14 12:06:35.000000000 +0900
@@ -20,7 +20,7 @@
 #include <linux/timer.h>
 #include <linux/wait.h>
 #include <linux/blockgroup_lock.h>
-#include <linux/percpu_counter.h>
+#include <linux/percpu_llcounter.h>
 #endif
 #include <linux/rbtree.h>
 
@@ -54,9 +54,9 @@ struct ext3_sb_info {
 	u32 s_next_generation;
 	u32 s_hash_seed[4];
 	int s_def_hash_version;
-	struct percpu_counter s_freeblocks_counter;
-	struct percpu_counter s_freeinodes_counter;
-	struct percpu_counter s_dirs_counter;
+	struct percpu_llcounter s_freeblocks_counter;
+	struct percpu_llcounter s_freeinodes_counter;
+	struct percpu_llcounter s_dirs_counter;
 	struct blockgroup_lock s_blockgroup_lock;
 
 	/* root of the per fs reservation window tree */
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/include/linux/percpu_llcounter.h linux-2.
6.16-rc6-4g/include/linux/percpu_llcounter.h
--- linux-2.6.16-rc6.org/include/linux/percpu_llcounter.h	1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.16-rc6-4g/include/linux/percpu_llcounter.h	2006-03-14 13:50:54.000000000 +0900
@@ -0,0 +1,113 @@
+#ifndef _LINUX_LLPERCPU_COUNTER_H
+#define _LINUX_LLPERCPU_COUNTER_H
+/*
+ * A simple "approximate counter" for use in ext2 and ext3 superblocks.
+ *
+ * WARNING: these things are HUGE.  4 kbytes per counter on 32-way P4.
+ */
+
+#include <linux/config.h>
+#include <linux/spinlock.h>
+#include <linux/smp.h>
+#include <linux/threads.h>
+#include <linux/percpu.h>
+
+#ifdef CONFIG_SMP
+
+struct percpu_llcounter {
+	spinlock_t lock;
+	long long count;
+	long long *counters;
+};
+
+#if NR_CPUS >= 16
+#define FBC_BATCH	(NR_CPUS*2)
+#else
+#define FBC_BATCH	(NR_CPUS*4)
+#endif
+
+static inline void percpu_llcounter_init(struct percpu_llcounter *fbc)
+{
+	spin_lock_init(&fbc->lock);
+	fbc->count = 0;
+	fbc->counters = alloc_percpu(long long);
+}
+
+static inline void percpu_llcounter_destroy(struct percpu_llcounter *fbc)
+{
+	free_percpu(fbc->counters);
+}
+
+void percpu_llcounter_mod(struct percpu_llcounter *fbc, long long amount);
+long long percpu_llcounter_sum(struct percpu_llcounter *fbc);
+
+static inline long long percpu_llcounter_read(struct percpu_llcounter *fbc)
+{
+	return fbc->count;
+}
+
+/*
+ * It is possible for the percpu_llcounter_read() to return a small negative
+ * number for some counter which should never be negative.
+ */
+static inline long long percpu_llcounter_read_positive(struct percpu_llcounter *fbc)
+{
+	long long ret = fbc->count;
+
+	barrier();		/* Prevent reloads of fbc->count */
+	if (ret > 0)
+		return ret;
+	return 1;
+}
+
+#else
+
+struct percpu_llcounter {
+	long long count;
+};
+
+static inline void percpu_llcounter_init(struct percpu_llcounter *fbc)
+{
+	fbc->count = 0;
+}
+
+static inline void percpu_llcounter_destroy(struct percpu_llcounter *fbc)
+{
+}
+
+static inline void
+percpu_llcounter_mod(struct percpu_llcounter *fbc, long long amount)
+{
+	preempt_disable();
+	fbc->count += amount;
+	preempt_enable();
+}
+
+static inline long long percpu_llcounter_read(struct percpu_llcounter *fbc)
+{
+	return fbc->count;
+}
+
+static inline long long percpu_llcounter_read_positive(struct percpu_llcounter *fbc)
+{
+	return fbc->count;
+}
+
+static inline long long percpu_llcounter_sum(struct percpu_llcounter *fbc)
+{
+	return percpu_llcounter_read_positive(fbc);
+}
+
+#endif	/* CONFIG_SMP */
+
+static inline void percpu_llcounter_inc(struct percpu_llcounter *fbc)
+{
+	percpu_llcounter_mod(fbc, 1);
+}
+
+static inline void percpu_llcounter_dec(struct percpu_llcounter *fbc)
+{
+	percpu_llcounter_mod(fbc, -1);
+}
+
+#endif /* _LINUX_LLPERCPU_COUNTER_H */
diff -uprN -X linux-2.6.16-rc6.org/Documentation/dontdiff linux-2.6.16-rc6.org/mm/swap.c linux-2.6.16-rc6-4g/mm/swap.c
--- linux-2.6.16-rc6.org/mm/swap.c	2006-03-14 09:09:07.000000000 +0900
+++ linux-2.6.16-rc6-4g/mm/swap.c	2006-03-14 13:47:18.000000000 +0900
@@ -26,6 +26,7 @@
 #include <linux/buffer_head.h>	/* for try_to_release_page() */
 #include <linux/module.h>
 #include <linux/percpu_counter.h>
+#include <linux/percpu_llcounter.h>
 #include <linux/percpu.h>
 #include <linux/cpu.h>
 #include <linux/notifier.h>
@@ -498,6 +499,27 @@ void percpu_counter_mod(struct percpu_co
 }
 EXPORT_SYMBOL(percpu_counter_mod);
 
+void percpu_llcounter_mod(struct percpu_llcounter *fbc, long long amount)
+{
+	long long count;
+	long long *pcount;
+	int cpu = get_cpu();
+
+	pcount = per_cpu_ptr(fbc->counters, cpu);
+	count = *pcount + amount;
+	if (count >= FBC_BATCH || count <= -FBC_BATCH) {
+		spin_lock(&fbc->lock);
+		fbc->count += count;
+		*pcount = 0;
+		spin_unlock(&fbc->lock);
+	} else {
+		*pcount = count;
+	}
+	put_cpu();
+}
+EXPORT_SYMBOL(percpu_llcounter_mod);
+
+
 /*
  * Add up all the per-cpu counts, return the result.  This is a more accurate
  * but much slower version of percpu_counter_read_positive()
@@ -517,6 +539,26 @@ long percpu_counter_sum(struct percpu_co
 	return ret < 0 ? 0 : ret;
 }
 EXPORT_SYMBOL(percpu_counter_sum);
+
+/*
+ * Add up all the per-cpu counts, return the result.  This is a more accurate
+ * but much slower version of percpu_llcounter_read_positive()
+ */
+long long percpu_llcounter_sum(struct percpu_llcounter *fbc)
+{
+	long long ret;
+	int cpu;
+
+	spin_lock(&fbc->lock);
+	ret = fbc->count;
+	for_each_cpu(cpu) {
+		long long *pcount = per_cpu_ptr(fbc->counters, cpu);
+		ret += *pcount;
+	}
+	spin_unlock(&fbc->lock);
+	return ret < 0 ? 0 : ret;
+}
+EXPORT_SYMBOL(percpu_llcounter_sum);
 #endif
 
 /*


^ permalink raw reply	[flat|nested] 51+ messages in thread
* Re: [Ext2-devel] [PATCH 2/2] ext2/3: Support2^32-1blocks(e2fsprogs)
@ 2006-03-25 13:34 sho
  0 siblings, 0 replies; 51+ messages in thread
From: sho @ 2006-03-25 13:34 UTC (permalink / raw)
  To: pbadari; +Cc: linux-kernel, Ext2-devel


>Hi,
>
>>More information. I ran the test with "-onoreservation" thinking that
>>the patch didn't address "reservation code" issues and I still ran
>>into block allocation problems. Hope this helps.
>
>As you said, my patches were corrupted because of my poor mailer.
>So, I resend it.
>I ran fsx with them, it wasn't reproduced.

Here is the patch for e2fsprogs.

Signed-off-by: Takashi Sato sho@tnes.nec.co.jp
---
diff -uprN e2fsprogs-1.38.org/debugfs/debugfs.c e2fsprogs-1.38-4g/debugfs/debugfs.c
--- e2fsprogs-1.38.org/debugfs/debugfs.c	2005-05-06 22:04:36.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/debugfs.c	2006-02-25 19:42:22.000000000 +0900
@@ -301,9 +301,9 @@ void do_show_super_stats(int argc, char 
 	
 	gdp = &current_fs->group_desc[0];
 	for (i = 0; i < current_fs->group_desc_count; i++, gdp++)
-		fprintf(out, " Group %2d: block bitmap at %d, "
-		        "inode bitmap at %d, "
-		        "inode table at %d\n"
+		fprintf(out, " Group %2d: block bitmap at %u, "
+		        "inode bitmap at %u, "
+		        "inode table at %u\n"
 		        "           %d free %s, "
 		        "%d free %s, "
 		        "%d used %s\n",
@@ -351,9 +351,9 @@ static void finish_range(struct list_blo
 	else
 		fprintf(lb->f, ", ");
 	if (lb->first_block == lb->last_block)
-		fprintf(lb->f, "(%lld):%d", lb->first_bcnt, lb->first_block);
+		fprintf(lb->f, "(%lld):%u", lb->first_bcnt, lb->first_block);
 	else
-		fprintf(lb->f, "(%lld-%lld):%d-%d", lb->first_bcnt,
+		fprintf(lb->f, "(%lld-%lld):%u-%u", lb->first_bcnt,
 			lb->last_bcnt, lb->first_block, lb->last_block);
 	lb->first_block = 0;
 }
@@ -395,11 +395,11 @@ static int list_blocks_proc(ext2_filsys 
 	else
 		fprintf(lb->f, ", ");
 	if (blockcnt == -1)
-		fprintf(lb->f, "(IND):%d", *blocknr);
+		fprintf(lb->f, "(IND):%u", *blocknr);
 	else if (blockcnt == -2)
-		fprintf(lb->f, "(DIND):%d", *blocknr);
+		fprintf(lb->f, "(DIND):%u", *blocknr);
 	else if (blockcnt == -3)
-		fprintf(lb->f, "(TIND):%d", *blocknr);
+		fprintf(lb->f, "(TIND):%u", *blocknr);
 	return 0;
 }
 
@@ -431,7 +431,7 @@ void internal_dump_inode_extra(FILE *out
 	int storage_size;
 	int i;
 
-	fprintf(out, "Size of extra inode fields: %d\n", inode->i_extra_isize);
+	fprintf(out, "Size of extra inode fields: %u\n", inode->i_extra_isize);
 	if (inode->i_extra_isize > EXT2_INODE_SIZE(current_fs->super) -
 			EXT2_GOOD_OLD_INODE_SIZE) {
 		fprintf(stderr, "invalid inode->i_extra_isize (%u)\n",
@@ -462,7 +462,7 @@ void internal_dump_inode_extra(FILE *out
 			fprintf(out, " = \"");
 			dump_xattr_string(out, start + entry->e_value_offs,
 						entry->e_value_size);
-			fprintf(out, "\" (%d)\n", entry->e_value_size);
+			fprintf(out, "\" (%u)\n", entry->e_value_size);
 			entry = next;
 		}
 	}
@@ -525,7 +525,7 @@ void internal_dump_inode(FILE *out, cons
 		fprintf(out, "%sFile ACL: %d    Directory ACL: %d\n",
 			prefix,
 			inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0);
-	fprintf(out, "%sLinks: %d   Blockcount: %d\n", 
+	fprintf(out, "%sLinks: %d   Blockcount: %u\n", 
 		prefix, inode->i_links_count, inode->i_blocks);
 	switch (os) {
 	    case EXT2_OS_LINUX:
@@ -704,7 +704,7 @@ void do_freeb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (!ext2fs_test_block_bitmap(current_fs->block_map,block))
-			com_err(argv[0], 0, "Warning: block %d already clear",
+			com_err(argv[0], 0, "Warning: block %u already clear",
 				block);
 		ext2fs_unmark_block_bitmap(current_fs->block_map,block);
 		block++;
@@ -723,7 +723,7 @@ void do_setb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (ext2fs_test_block_bitmap(current_fs->block_map,block))
-			com_err(argv[0], 0, "Warning: block %d already set",
+			com_err(argv[0], 0, "Warning: block %u already set",
 				block);
 		ext2fs_mark_block_bitmap(current_fs->block_map,block);
 		block++;
@@ -740,9 +740,9 @@ void do_testb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (ext2fs_test_block_bitmap(current_fs->block_map,block))
-			printf("Block %d marked in use\n", block);
+			printf("Block %u marked in use\n", block);
 		else
-			printf("Block %d not in use\n", block);
+			printf("Block %u not in use\n", block);
 		block++;
 	}
 }
@@ -822,6 +822,7 @@ void do_modify_inode(int argc, char *arg
 	const char	*hex_format = "0x%x";
 	const char	*octal_format = "0%o";
 	const char	*decimal_format = "%d";
+	const char	*unsignedlong_format = "%lu";
 	
 	if (common_inode_args_process(argc, argv, &inode_num, CHECK_FS_RW))
 		return;
@@ -834,13 +835,13 @@ void do_modify_inode(int argc, char *arg
 	modify_u16(argv[0], "Mode", octal_format, &inode.i_mode);
 	modify_u16(argv[0], "User ID", decimal_format, &inode.i_uid);
 	modify_u16(argv[0], "Group ID", decimal_format, &inode.i_gid);
-	modify_u32(argv[0], "Size", decimal_format, &inode.i_size);
+	modify_u32(argv[0], "Size", unsignedlong_format, &inode.i_size);
 	modify_u32(argv[0], "Creation time", decimal_format, &inode.i_ctime);
 	modify_u32(argv[0], "Modification time", decimal_format, &inode.i_mtime);
 	modify_u32(argv[0], "Access time", decimal_format, &inode.i_atime);
 	modify_u32(argv[0], "Deletion time", decimal_format, &inode.i_dtime);
 	modify_u16(argv[0], "Link count", decimal_format, &inode.i_links_count);
-	modify_u32(argv[0], "Block count", decimal_format, &inode.i_blocks);
+	modify_u32(argv[0], "Block count", unsignedlong_format, &inode.i_blocks);
 	modify_u32(argv[0], "File flags", hex_format, &inode.i_flags);
 	modify_u32(argv[0], "Generation", hex_format, &inode.i_generation);
 #if 0
@@ -1151,7 +1152,7 @@ void do_find_free_block(int argc, char *
 			com_err("ext2fs_new_block", retval, "");
 			return;
 		} else
-			printf("%d ", free_blk);
+			printf("%u ", free_blk);
 	}
  	printf("\n");
 }
@@ -1660,10 +1661,10 @@ void do_bmap(int argc, char *argv[])
 	errcode = ext2fs_bmap(current_fs, ino, 0, 0, 0, blk, &pblk);
 	if (errcode) {
 		com_err("argv[0]", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}
-	printf("%d\n", pblk);
+	printf("%u\n", pblk);
 }
 
 void do_imap(int argc, char *argv[])
diff -uprN e2fsprogs-1.38.org/debugfs/htree.c e2fsprogs-1.38-4g/debugfs/htree.c
--- e2fsprogs-1.38.org/debugfs/htree.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/htree.c	2006-02-25 19:41:29.000000000 +0900
@@ -43,14 +43,14 @@ static void htree_dump_leaf_node(ext2_fi
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}
 
 	errcode = ext2fs_read_dir_block2(current_fs, pblk, buf, 0);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
-			"while 	reading block %d\n", blk);
+			"while 	reading block %u\n", blk);
 		return;
 	}
 
@@ -60,7 +60,7 @@ static void htree_dump_leaf_node(ext2_fi
 		    (dirent->rec_len < 8) ||
 		    ((dirent->rec_len % 4) != 0) ||
 		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
-			fprintf(pager, "Corrupted directory block (%d)!\n", blk);
+			fprintf(pager, "Corrupted directory block (%u)!\n", blk);
 			break;
 		}
 		thislen = ((dirent->name_len & 0xFF) < EXT2_NAME_LEN) ?
@@ -124,7 +124,7 @@ static void htree_dump_int_node(ext2_fil
 	for (i=0; i < limit.count; i++) {
 		e.hash = ext2fs_le32_to_cpu(ent[i].hash);
 		e.block = ext2fs_le32_to_cpu(ent[i].block);
-		fprintf(pager, "Entry #%d: Hash 0x%08x, block %d\n", i,
+		fprintf(pager, "Entry #%d: Hash 0x%08x, block %u\n", i,
 		       i ? e.hash : 0, e.block);
 		if (level)
 			htree_dump_int_block(fs, ino, inode, rootnode,
@@ -155,14 +155,14 @@ static void htree_dump_int_block(ext2_fi
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_int_block", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}
 
 	errcode = io_channel_read_blk(current_fs->io, pblk, 1, buf);
 	if (errcode) {
 		com_err("htree_dump_int_block", errcode,
-			"while 	reading block %d\n", blk);
+			"while 	reading block %u\n", blk);
 		return;
 	}
 
@@ -241,7 +241,7 @@ void do_htree_dump(int argc, char *argv[
 	rootnode = (struct ext2_dx_root_info *) (buf + 24);
 
 	fprintf(pager, "Root node dump:\n");
-	fprintf(pager, "\t Reserved zero: %d\n", rootnode->reserved_zero);
+	fprintf(pager, "\t Reserved zero: %u\n", rootnode->reserved_zero);
 	fprintf(pager, "\t Hash Version: %d\n", rootnode->hash_version);
 	fprintf(pager, "\t Info length: %d\n", rootnode->info_length);
 	fprintf(pager, "\t Indirect levels: %d\n", rootnode->indirect_levels);
@@ -372,9 +372,9 @@ static int search_dir_block(ext2_filsys 
 		    strncmp(p->search_name, dirent->name,
 			    p->len) == 0) {
 			printf("Entry found at logical block %lld, "
-			       "phys %d, offset %d\n", blockcnt,
+			       "phys %u, offset %u\n", blockcnt,
 			       *blocknr, offset);
-			printf("offset %d\n", offset);
+			printf("offset %u\n", offset);
 			return BLOCK_ABORT;
 		}
 		offset += dirent->rec_len;
diff -uprN e2fsprogs-1.38.org/debugfs/unused.c e2fsprogs-1.38-4g/debugfs/unused.c
--- e2fsprogs-1.38.org/debugfs/unused.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/unused.c	2006-02-25 19:41:29.000000000 +0900
@@ -45,7 +45,7 @@ void do_dump_unused(int argc EXT2FS_ATTR
 				break;
 		if (i >= current_fs->blocksize)
 			continue;
-		printf("\nUnused block %ld contains non-zero data:\n\n",
+		printf("\nUnused block %lu contains non-zero data:\n\n",
 		       blk);
 		for (i=0; i < current_fs->blocksize; i++)
 			fputc(buf[i], stdout);
diff -uprN e2fsprogs-1.38.org/e2fsck/emptydir.c e2fsprogs-1.38-4g/e2fsck/emptydir.c
--- e2fsprogs-1.38.org/e2fsck/emptydir.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/emptydir.c	2006-02-25 19:41:29.000000000 +0900
@@ -94,7 +94,7 @@ void add_empty_dirblock(empty_dir_info e
 	if (db->ino == 11)
 		return;		/* Inode number 11 is usually lost+found */
 
-	printf(_("Empty directory block %d (#%d) in inode %d\n"),
+	printf(_("Empty directory block %u (#%d) in inode %d\n"),
 	       db->blk, db->blockcnt, db->ino);
 
 	ext2fs_mark_block_bitmap(edi->empty_dir_blocks, db->blk);
diff -uprN e2fsprogs-1.38.org/e2fsck/message.c e2fsprogs-1.38-4g/e2fsck/message.c
--- e2fsprogs-1.38.org/e2fsck/message.c	2005-06-19 22:41:08.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/message.c	2006-02-25 19:41:29.000000000 +0900
@@ -418,7 +418,7 @@ static _INLINE_ void expand_percent_expr
 		print_pathname(fs, ctx->dir, ctx->ino);
 		break;
 	case 'S':
-		printf("%d", get_backup_sb(NULL, fs, NULL, NULL));
+		printf("%u", get_backup_sb(NULL, fs, NULL, NULL));
 		break;
 	case 's':
 		printf("%s", ctx->str ? ctx->str : "NULL");
diff -uprN e2fsprogs-1.38.org/e2fsck/pass1b.c e2fsprogs-1.38-4g/e2fsck/pass1b.c
--- e2fsprogs-1.38.org/e2fsck/pass1b.c	2005-04-15 06:10:12.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/pass1b.c	2006-02-25 19:41:29.000000000 +0900
@@ -555,7 +555,7 @@ static int delete_file_block(ext2_filsys
 			decrement_badcount(ctx, *block_nr, p);
 		} else
 			com_err("delete_file_block", 0,
-			    _("internal error; can't find dup_blk for %d\n"),
+			    _("internal error; can't find dup_blk for %u\n"),
 				*block_nr);
 	} else {
 		ext2fs_unmark_block_bitmap(ctx->block_found_map, *block_nr);
@@ -692,7 +692,7 @@ static int clone_file_block(ext2_filsys 
 			return BLOCK_CHANGED;
 		} else
 			com_err("clone_file_block", 0,
-			    _("internal error; can't find dup_blk for %d\n"),
+			    _("internal error; can't find dup_blk for %u\n"),
 				*block_nr);
 	}
 	return 0;
diff -uprN e2fsprogs-1.38.org/e2fsck/pass2.c e2fsprogs-1.38-4g/e2fsck/pass2.c
--- e2fsprogs-1.38.org/e2fsck/pass2.c	2005-04-15 03:06:09.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/pass2.c	2006-02-25 19:41:29.000000000 +0900
@@ -543,7 +543,7 @@ static void parse_int_node(ext2_filsys f
 		
 #ifdef DX_DEBUG
 		printf("Root node dump:\n");
-		printf("\t Reserved zero: %d\n", root->reserved_zero);
+		printf("\t Reserved zero: %u\n", root->reserved_zero);
 		printf("\t Hash Version: %d\n", root->hash_version);
 		printf("\t Info length: %d\n", root->info_length);
 		printf("\t Indirect levels: %d\n", root->indirect_levels);
@@ -582,7 +582,7 @@ static void parse_int_node(ext2_filsys f
 		prev_hash = hash;
 		hash = i ? (ext2fs_le32_to_cpu(ent[i].hash) & ~1) : 0;
 #ifdef DX_DEBUG
-		printf("Entry #%d: Hash 0x%08x, block %d\n", i,
+		printf("Entry #%d: Hash 0x%08x, block %u\n", i,
 		       hash, ext2fs_le32_to_cpu(ent[i].block));
 #endif
 		blk = ext2fs_le32_to_cpu(ent[i].block) & 0x0ffffff;
diff -uprN e2fsprogs-1.38.org/e2fsck/recovery.c e2fsprogs-1.38-4g/e2fsck/recovery.c
--- e2fsprogs-1.38.org/e2fsck/recovery.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/recovery.c	2006-02-25 19:41:29.000000000 +0900
@@ -435,7 +435,7 @@ static int do_one_pass(journal_t *journa
 					success = err;
 					printk (KERN_ERR 
 						"JBD: IO error %d recovering "
-						"block %ld in log\n",
+						"block %lu in log\n",
 						err, io_block);
 				} else {
 					unsigned long blocknr;
diff -uprN e2fsprogs-1.38.org/e2fsck/unix.c e2fsprogs-1.38-4g/e2fsck/unix.c
--- e2fsprogs-1.38.org/e2fsck/unix.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/unix.c	2006-02-25 19:41:29.000000000 +0900
@@ -98,7 +98,8 @@ static void usage(e2fsck_t ctx)
 static void show_stats(e2fsck_t	ctx)
 {
 	ext2_filsys fs = ctx->fs;
-	int inodes, inodes_used, blocks, blocks_used;
+	int inodes, inodes_used;
+	blk_t blocks, blocks_used;
 	int dir_links;
 	int num_files, num_links;
 	int frag_percent;
@@ -117,7 +118,7 @@ static void show_stats(e2fsck_t	ctx)
 	frag_percent = (frag_percent + 5) / 10;
 	
 	if (!verbose) {
-		printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %d/%d blocks\n"),
+		printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %u/%u blocks\n"),
 		       ctx->device_name, inodes_used, inodes,
 		       frag_percent / 10, frag_percent % 10,
 		       blocks_used, blocks);
@@ -131,7 +132,7 @@ static void show_stats(e2fsck_t	ctx)
 		ctx->fs_fragmented, frag_percent / 10, frag_percent % 10);
 	printf (_("         # of inodes with ind/dind/tind blocks: %d/%d/%d\n"),
 		ctx->fs_ind_count, ctx->fs_dind_count, ctx->fs_tind_count);
-	printf (P_("%8d block used (%d%%)\n", "%8d blocks used (%d%%)\n",
+	printf (P_("%8u block used (%d%%)\n", "%8u blocks used (%d%%)\n",
 		   blocks_used),
 		blocks_used, (int) ((long long) 100 * blocks_used / blocks));
 	printf (P_("%8d bad block\n", "%8d bad blocks\n",
@@ -289,7 +290,7 @@ static void check_if_skip(e2fsck_t ctx)
 		fputs(_(", check forced.\n"), stdout);
 		return;
 	}
-	printf(_("%s: clean, %d/%d files, %d/%d blocks"), ctx->device_name,
+	printf(_("%s: clean, %d/%d files, %u/%u blocks"), ctx->device_name,
 	       fs->super->s_inodes_count - fs->super->s_free_inodes_count,
 	       fs->super->s_inodes_count,
 	       fs->super->s_blocks_count - fs->super->s_free_blocks_count,
diff -uprN e2fsprogs-1.38.org/lib/ext2fs/bitops.h e2fsprogs-1.38-4g/lib/ext2fs/bitops.h
--- e2fsprogs-1.38.org/lib/ext2fs/bitops.h	2005-07-01 08:40:17.000000000 +0900
+++ e2fsprogs-1.38-4g/lib/ext2fs/bitops.h	2006-02-25 19:41:29.000000000 +0900
@@ -130,6 +130,7 @@ extern int ext2fs_unmark_generic_bitmap(
 #endif
 #endif
 
+#define _EXT2_USE_C_VERSIONS_
 #if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
      (defined(__i386__) || defined(__i486__) || defined(__i586__)))
 
@@ -264,7 +265,7 @@ _INLINE_ __u16 ext2fs_swab16(__u16 val)
 
 #endif	/* i386 */
 
-#ifdef __mc68000__
+#if (defined(__mc68000__) && !defined(_EXT2_USE_C_VERSIONS_))
 
 #define _EXT2_HAVE_ASM_BITOPS_
 
diff -uprN e2fsprogs-1.38.org/misc/dumpe2fs.c e2fsprogs-1.38-4g/misc/dumpe2fs.c
--- e2fsprogs-1.38.org/misc/dumpe2fs.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/dumpe2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -244,12 +244,12 @@ static void print_journal_information(ex
 		exit(1);
 	}
 
-	printf(_("\nJournal block size:       %d\n"
-		 "Journal length:           %d\n"
-		 "Journal first block:      %d\n"
+	printf(_("\nJournal block size:       %u\n"
+		 "Journal length:           %u\n"
+		 "Journal first block:      %u\n"
 		 "Journal sequence:         0x%08x\n"
-		 "Journal start:            %d\n"
-		 "Journal number of users:  %d\n"),
+		 "Journal start:            %u\n"
+		 "Journal number of users:  %lu\n"),
 	       ntohl(jsb->s_blocksize),  ntohl(jsb->s_maxlen),
 	       ntohl(jsb->s_first), ntohl(jsb->s_sequence),
 	       ntohl(jsb->s_start), ntohl(jsb->s_nr_users));
diff -uprN e2fsprogs-1.38.org/misc/e2image.c e2fsprogs-1.38-4g/misc/e2image.c
--- e2fsprogs-1.38.org/misc/e2image.c	2005-01-27 01:37:46.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/e2image.c	2006-02-25 19:41:29.000000000 +0900
@@ -329,7 +329,7 @@ static void write_block(int fd, char *bu
 				err = errno;
 			else
 				err = 0;
-			com_err(program_name, err, "error writing block %d", 
+			com_err(program_name, err, "error writing block %u", 
 				block);
 		}
 	}
diff -uprN e2fsprogs-1.38.org/misc/findsuper.c e2fsprogs-1.38-4g/misc/findsuper.c
--- e2fsprogs-1.38.org/misc/findsuper.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/findsuper.c	2006-02-25 19:41:29.000000000 +0900
@@ -182,15 +182,15 @@ int main(int argc, char *argv[])
 		if (ext2.s_magic != EXT2_SUPER_MAGIC)
 			continue;
 		if (ext2.s_log_block_size > 4)
-			WHY("log block size > 4 (%d)\n", ext2.s_log_block_size);
+			WHY("log block size > 4 (%u)\n", ext2.s_log_block_size);
 		if (ext2.s_r_blocks_count > ext2.s_blocks_count)
-			WHY("r_blocks_count > blocks_count (%d > %d)\n",
+			WHY("r_blocks_count > blocks_count (%u > %u)\n",
 			    ext2.s_r_blocks_count, ext2.s_blocks_count);
 		if (ext2.s_free_blocks_count > ext2.s_blocks_count)
-			WHY("free_blocks_count > blocks_count\n (%d > %d)\n",
+			WHY("free_blocks_count > blocks_count\n (%u > %u)\n",
 			    ext2.s_free_blocks_count, ext2.s_blocks_count);
 		if (ext2.s_free_inodes_count > ext2.s_inodes_count)
-			WHY("free_inodes_count > inodes_count (%d > %d)\n",
+			WHY("free_inodes_count > inodes_count (%u > %u)\n",
 			    ext2.s_free_inodes_count, ext2.s_inodes_count);
 
 		tm = ext2.s_mtime;
diff -uprN e2fsprogs-1.38.org/misc/mke2fs.c e2fsprogs-1.38-4g/misc/mke2fs.c
--- e2fsprogs-1.38.org/misc/mke2fs.c	2005-07-01 09:00:40.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/mke2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -302,7 +302,7 @@ static void handle_bad_blocks(ext2_filsy
 		if (ext2fs_badblocks_list_test(bb_list, i)) {
 			fprintf(stderr, _("Block %d in primary "
 				"superblock/group descriptor area bad.\n"), i);
-			fprintf(stderr, _("Blocks %d through %d must be good "
+			fprintf(stderr, _("Blocks %u through %d must be good "
 				"in order to build a filesystem.\n"),
 				fs->super->s_first_data_block, must_be_good);
 			fputs(_("Aborting....\n"), stderr);
@@ -325,7 +325,7 @@ static void handle_bad_blocks(ext2_filsy
 						       group_block + j)) {
 				if (!group_bad) 
 					fprintf(stderr,
-_("Warning: the backup superblock/group descriptors at block %d contain\n"
+_("Warning: the backup superblock/group descriptors at block %u contain\n"
 "	bad blocks.\n\n"),
 						group_block);
 				group_bad++;
@@ -489,7 +489,7 @@ static void write_inode_tables(ext2_fils
 		retval = zero_blocks(fs, blk, num, 0, &blk, &num);
 		if (retval) {
 			fprintf(stderr, _("\nCould not write %d blocks "
-				"in inode table starting at %d: %s\n"),
+				"in inode table starting at %u: %s\n"),
 				num, blk, error_message(retval));
 			exit(1);
 		}
@@ -692,7 +692,7 @@ static void show_stats(ext2_filsys fs)
 	int			need, col_left;
 	
 	if (param.s_blocks_count != s->s_blocks_count)
-		fprintf(stderr, _("warning: %d blocks unused.\n\n"),
+		fprintf(stderr, _("warning: %u blocks unused.\n\n"),
 		       param.s_blocks_count - s->s_blocks_count);
 
 	memset(buf, 0, sizeof(buf));
diff -uprN e2fsprogs-1.38.org/resize/main.c e2fsprogs-1.38-4g/resize/main.c
--- e2fsprogs-1.38.org/resize/main.c	2005-05-10 05:22:17.000000000 +0900
+++ e2fsprogs-1.38-4g/resize/main.c	2006-02-25 19:41:29.000000000 +0900
@@ -276,13 +276,13 @@ int main (int argc, char ** argv)
 	}
 	if (!force && (new_size > max_size)) {
 		fprintf(stderr, _("The containing partition (or device)"
-			" is only %d (%dk) blocks.\nYou requested a new size"
-			" of %d blocks.\n\n"), max_size,
+			" is only %u (%dk) blocks.\nYou requested a new size"
+			" of %u blocks.\n\n"), max_size,
 			fs->blocksize / 1024, new_size);
 		exit(1);
 	}
 	if (new_size == fs->super->s_blocks_count) {
-		fprintf(stderr, _("The filesystem is already %d blocks "
+		fprintf(stderr, _("The filesystem is already %u blocks "
 			"long.  Nothing to do!\n\n"), new_size);
 		exit(0);
 	}
@@ -293,7 +293,7 @@ int main (int argc, char ** argv)
 			device_name);
 		exit(1);
 	}
-	printf("Resizing the filesystem on %s to %d (%dk) blocks.\n",
+	printf("Resizing the filesystem on %s to %u (%dk) blocks.\n",
 	       device_name, new_size, fs->blocksize / 1024);
 	retval = resize_fs(fs, &new_size, flags,
 			   ((flags & RESIZE_PERCENT_COMPLETE) ?
@@ -304,7 +304,7 @@ int main (int argc, char ** argv)
 		ext2fs_close (fs);
 		exit(1);
 	}
-	printf(_("The filesystem on %s is now %d blocks long.\n\n"),
+	printf(_("The filesystem on %s is now %u blocks long.\n\n"),
 	       device_name, new_size);
 	return (0);
 }
diff -uprN e2fsprogs-1.38.org/resize/resize2fs.c e2fsprogs-1.38-4g/resize/resize2fs.c
--- e2fsprogs-1.38.org/resize/resize2fs.c	2005-05-10 05:22:17.000000000 +0900
+++ e2fsprogs-1.38-4g/resize/resize2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -108,7 +108,7 @@ errcode_t resize_fs(ext2_filsys fs, blk_
 
 #ifdef RESIZE2FS_DEBUG
 	if (rfs->flags & RESIZE_DEBUG_BMOVE)
-		printf("Number of free blocks: %d/%d, Needed: %d\n",
+		printf("Number of free blocks: %u/%u, Needed: %d\n",
 		       rfs->old_fs->super->s_free_blocks_count,
 		       rfs->new_fs->super->s_free_blocks_count,
 		       rfs->needed_blocks);


^ permalink raw reply	[flat|nested] 51+ messages in thread
* [PATCH 2/2] ext2/3: Support 2^32-1 blocks(e2fsprogs)
@ 2006-03-15 12:39 Takashi Sato
  2006-03-17 21:19 ` [Ext2-devel] " Badari Pulavarty
  0 siblings, 1 reply; 51+ messages in thread
From: Takashi Sato @ 2006-03-15 12:39 UTC (permalink / raw)
  To: ext2-devel, linux-kernel

This makes it possible to make ext2/3 with 4G-1(2^32-1) blocks by mke2fs
in e2fsprogs-1.38.

Signed-off-by: Takashi Sato sho@tnes.nec.co.jp
---
diff -uprN e2fsprogs-1.38.org/debugfs/debugfs.c e2fsprogs-1.38-4g/debugfs/debugfs.c
--- e2fsprogs-1.38.org/debugfs/debugfs.c	2005-05-06 22:04:36.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/debugfs.c	2006-02-25 19:42:22.000000000 +0900
@@ -301,9 +301,9 @@ void do_show_super_stats(int argc, char

 	gdp = &current_fs->group_desc[0];
 	for (i = 0; i < current_fs->group_desc_count; i++, gdp++)
-		fprintf(out, " Group %2d: block bitmap at %d, "
-		        "inode bitmap at %d, "
-		        "inode table at %d\n"
+		fprintf(out, " Group %2d: block bitmap at %u, "
+		        "inode bitmap at %u, "
+		        "inode table at %u\n"
 		        "           %d free %s, "
 		        "%d free %s, "
 		        "%d used %s\n",
@@ -351,9 +351,9 @@ static void finish_range(struct list_blo
 	else
 		fprintf(lb->f, ", ");
 	if (lb->first_block == lb->last_block)
-		fprintf(lb->f, "(%lld):%d", lb->first_bcnt, lb->first_block);
+		fprintf(lb->f, "(%lld):%u", lb->first_bcnt, lb->first_block);
 	else
-		fprintf(lb->f, "(%lld-%lld):%d-%d", lb->first_bcnt,
+		fprintf(lb->f, "(%lld-%lld):%u-%u", lb->first_bcnt,
 			lb->last_bcnt, lb->first_block, lb->last_block);
 	lb->first_block = 0;
 }
@@ -395,11 +395,11 @@ static int list_blocks_proc(ext2_filsys
 	else
 		fprintf(lb->f, ", ");
 	if (blockcnt == -1)
-		fprintf(lb->f, "(IND):%d", *blocknr);
+		fprintf(lb->f, "(IND):%u", *blocknr);
 	else if (blockcnt == -2)
-		fprintf(lb->f, "(DIND):%d", *blocknr);
+		fprintf(lb->f, "(DIND):%u", *blocknr);
 	else if (blockcnt == -3)
-		fprintf(lb->f, "(TIND):%d", *blocknr);
+		fprintf(lb->f, "(TIND):%u", *blocknr);
 	return 0;
 }

@@ -431,7 +431,7 @@ void internal_dump_inode_extra(FILE *out
 	int storage_size;
 	int i;

-	fprintf(out, "Size of extra inode fields: %d\n", inode->i_extra_isize);
+	fprintf(out, "Size of extra inode fields: %u\n", inode->i_extra_isize);
 	if (inode->i_extra_isize > EXT2_INODE_SIZE(current_fs->super) -
 			EXT2_GOOD_OLD_INODE_SIZE) {
 		fprintf(stderr, "invalid inode->i_extra_isize (%u)\n",
@@ -462,7 +462,7 @@ void internal_dump_inode_extra(FILE *out
 			fprintf(out, " = \"");
 			dump_xattr_string(out, start + entry->e_value_offs,
 						entry->e_value_size);
-			fprintf(out, "\" (%d)\n", entry->e_value_size);
+			fprintf(out, "\" (%u)\n", entry->e_value_size);
 			entry = next;
 		}
 	}
@@ -525,7 +525,7 @@ void internal_dump_inode(FILE *out, cons
 		fprintf(out, "%sFile ACL: %d    Directory ACL: %d\n",
 			prefix,
 			inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0);
-	fprintf(out, "%sLinks: %d   Blockcount: %d\n",
+	fprintf(out, "%sLinks: %d   Blockcount: %u\n",
 		prefix, inode->i_links_count, inode->i_blocks);
 	switch (os) {
 	    case EXT2_OS_LINUX:
@@ -704,7 +704,7 @@ void do_freeb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (!ext2fs_test_block_bitmap(current_fs->block_map,block))
-			com_err(argv[0], 0, "Warning: block %d already clear",
+			com_err(argv[0], 0, "Warning: block %u already clear",
 				block);
 		ext2fs_unmark_block_bitmap(current_fs->block_map,block);
 		block++;
@@ -723,7 +723,7 @@ void do_setb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (ext2fs_test_block_bitmap(current_fs->block_map,block))
-			com_err(argv[0], 0, "Warning: block %d already set",
+			com_err(argv[0], 0, "Warning: block %u already set",
 				block);
 		ext2fs_mark_block_bitmap(current_fs->block_map,block);
 		block++;
@@ -740,9 +740,9 @@ void do_testb(int argc, char *argv[])
 		return;
 	while (count-- > 0) {
 		if (ext2fs_test_block_bitmap(current_fs->block_map,block))
-			printf("Block %d marked in use\n", block);
+			printf("Block %u marked in use\n", block);
 		else
-			printf("Block %d not in use\n", block);
+			printf("Block %u not in use\n", block);
 		block++;
 	}
 }
@@ -822,6 +822,7 @@ void do_modify_inode(int argc, char *arg
 	const char	*hex_format = "0x%x";
 	const char	*octal_format = "0%o";
 	const char	*decimal_format = "%d";
+	const char	*unsignedlong_format = "%lu";

 	if (common_inode_args_process(argc, argv, &inode_num, CHECK_FS_RW))
 		return;
@@ -834,13 +835,13 @@ void do_modify_inode(int argc, char *arg
 	modify_u16(argv[0], "Mode", octal_format, &inode.i_mode);
 	modify_u16(argv[0], "User ID", decimal_format, &inode.i_uid);
 	modify_u16(argv[0], "Group ID", decimal_format, &inode.i_gid);
-	modify_u32(argv[0], "Size", decimal_format, &inode.i_size);
+	modify_u32(argv[0], "Size", unsignedlong_format, &inode.i_size);
 	modify_u32(argv[0], "Creation time", decimal_format, &inode.i_ctime);
 	modify_u32(argv[0], "Modification time", decimal_format, &inode.i_mtime);
 	modify_u32(argv[0], "Access time", decimal_format, &inode.i_atime);
 	modify_u32(argv[0], "Deletion time", decimal_format, &inode.i_dtime);
 	modify_u16(argv[0], "Link count", decimal_format, &inode.i_links_count);
-	modify_u32(argv[0], "Block count", decimal_format, &inode.i_blocks);
+	modify_u32(argv[0], "Block count", unsignedlong_format, &inode.i_blocks);
 	modify_u32(argv[0], "File flags", hex_format, &inode.i_flags);
 	modify_u32(argv[0], "Generation", hex_format, &inode.i_generation);
 #if 0
@@ -1151,7 +1152,7 @@ void do_find_free_block(int argc, char *
 			com_err("ext2fs_new_block", retval, "");
 			return;
 		} else
-			printf("%d ", free_blk);
+			printf("%u ", free_blk);
 	}
  	printf("\n");
 }
@@ -1660,10 +1661,10 @@ void do_bmap(int argc, char *argv[])
 	errcode = ext2fs_bmap(current_fs, ino, 0, 0, 0, blk, &pblk);
 	if (errcode) {
 		com_err("argv[0]", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}
-	printf("%d\n", pblk);
+	printf("%u\n", pblk);
 }

 void do_imap(int argc, char *argv[])
diff -uprN e2fsprogs-1.38.org/debugfs/htree.c e2fsprogs-1.38-4g/debugfs/htree.c
--- e2fsprogs-1.38.org/debugfs/htree.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/htree.c	2006-02-25 19:41:29.000000000 +0900
@@ -43,14 +43,14 @@ static void htree_dump_leaf_node(ext2_fi
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}

 	errcode = ext2fs_read_dir_block2(current_fs, pblk, buf, 0);
 	if (errcode) {
 		com_err("htree_dump_leaf_node", errcode,
-			"while 	reading block %d\n", blk);
+			"while 	reading block %u\n", blk);
 		return;
 	}

@@ -60,7 +60,7 @@ static void htree_dump_leaf_node(ext2_fi
 		    (dirent->rec_len < 8) ||
 		    ((dirent->rec_len % 4) != 0) ||
 		    (((dirent->name_len & 0xFF)+8) > dirent->rec_len)) {
-			fprintf(pager, "Corrupted directory block (%d)!\n", blk);
+			fprintf(pager, "Corrupted directory block (%u)!\n", blk);
 			break;
 		}
 		thislen = ((dirent->name_len & 0xFF) < EXT2_NAME_LEN) ?
@@ -124,7 +124,7 @@ static void htree_dump_int_node(ext2_fil
 	for (i=0; i < limit.count; i++) {
 		e.hash = ext2fs_le32_to_cpu(ent[i].hash);
 		e.block = ext2fs_le32_to_cpu(ent[i].block);
-		fprintf(pager, "Entry #%d: Hash 0x%08x, block %d\n", i,
+		fprintf(pager, "Entry #%d: Hash 0x%08x, block %u\n", i,
 		       i ? e.hash : 0, e.block);
 		if (level)
 			htree_dump_int_block(fs, ino, inode, rootnode,
@@ -155,14 +155,14 @@ static void htree_dump_int_block(ext2_fi
 	errcode = ext2fs_bmap(fs, ino, inode, buf, 0, blk, &pblk);
 	if (errcode) {
 		com_err("htree_dump_int_block", errcode,
-			"while mapping logical block %d\n", blk);
+			"while mapping logical block %u\n", blk);
 		return;
 	}

 	errcode = io_channel_read_blk(current_fs->io, pblk, 1, buf);
 	if (errcode) {
 		com_err("htree_dump_int_block", errcode,
-			"while 	reading block %d\n", blk);
+			"while 	reading block %u\n", blk);
 		return;
 	}

@@ -241,7 +241,7 @@ void do_htree_dump(int argc, char *argv[
 	rootnode = (struct ext2_dx_root_info *) (buf + 24);

 	fprintf(pager, "Root node dump:\n");
-	fprintf(pager, "\t Reserved zero: %d\n", rootnode->reserved_zero);
+	fprintf(pager, "\t Reserved zero: %u\n", rootnode->reserved_zero);
 	fprintf(pager, "\t Hash Version: %d\n", rootnode->hash_version);
 	fprintf(pager, "\t Info length: %d\n", rootnode->info_length);
 	fprintf(pager, "\t Indirect levels: %d\n", rootnode->indirect_levels);
@@ -372,9 +372,9 @@ static int search_dir_block(ext2_filsys
 		    strncmp(p->search_name, dirent->name,
 			    p->len) == 0) {
 			printf("Entry found at logical block %lld, "
-			       "phys %d, offset %d\n", blockcnt,
+			       "phys %u, offset %u\n", blockcnt,
 			       *blocknr, offset);
-			printf("offset %d\n", offset);
+			printf("offset %u\n", offset);
 			return BLOCK_ABORT;
 		}
 		offset += dirent->rec_len;
diff -uprN e2fsprogs-1.38.org/debugfs/unused.c e2fsprogs-1.38-4g/debugfs/unused.c
--- e2fsprogs-1.38.org/debugfs/unused.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/debugfs/unused.c	2006-02-25 19:41:29.000000000 +0900
@@ -45,7 +45,7 @@ void do_dump_unused(int argc EXT2FS_ATTR
 				break;
 		if (i >= current_fs->blocksize)
 			continue;
-		printf("\nUnused block %ld contains non-zero data:\n\n",
+		printf("\nUnused block %lu contains non-zero data:\n\n",
 		       blk);
 		for (i=0; i < current_fs->blocksize; i++)
 			fputc(buf[i], stdout);
diff -uprN e2fsprogs-1.38.org/e2fsck/emptydir.c e2fsprogs-1.38-4g/e2fsck/emptydir.c
--- e2fsprogs-1.38.org/e2fsck/emptydir.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/emptydir.c	2006-02-25 19:41:29.000000000 +0900
@@ -94,7 +94,7 @@ void add_empty_dirblock(empty_dir_info e
 	if (db->ino == 11)
 		return;		/* Inode number 11 is usually lost+found */

-	printf(_("Empty directory block %d (#%d) in inode %d\n"),
+	printf(_("Empty directory block %u (#%d) in inode %d\n"),
 	       db->blk, db->blockcnt, db->ino);

 	ext2fs_mark_block_bitmap(edi->empty_dir_blocks, db->blk);
diff -uprN e2fsprogs-1.38.org/e2fsck/message.c e2fsprogs-1.38-4g/e2fsck/message.c
--- e2fsprogs-1.38.org/e2fsck/message.c	2005-06-19 22:41:08.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/message.c	2006-02-25 19:41:29.000000000 +0900
@@ -418,7 +418,7 @@ static _INLINE_ void expand_percent_expr
 		print_pathname(fs, ctx->dir, ctx->ino);
 		break;
 	case 'S':
-		printf("%d", get_backup_sb(NULL, fs, NULL, NULL));
+		printf("%u", get_backup_sb(NULL, fs, NULL, NULL));
 		break;
 	case 's':
 		printf("%s", ctx->str ? ctx->str : "NULL");
diff -uprN e2fsprogs-1.38.org/e2fsck/pass1b.c e2fsprogs-1.38-4g/e2fsck/pass1b.c
--- e2fsprogs-1.38.org/e2fsck/pass1b.c	2005-04-15 06:10:12.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/pass1b.c	2006-02-25 19:41:29.000000000 +0900
@@ -555,7 +555,7 @@ static int delete_file_block(ext2_filsys
 			decrement_badcount(ctx, *block_nr, p);
 		} else
 			com_err("delete_file_block", 0,
-			    _("internal error; can't find dup_blk for %d\n"),
+			    _("internal error; can't find dup_blk for %u\n"),
 				*block_nr);
 	} else {
 		ext2fs_unmark_block_bitmap(ctx->block_found_map, *block_nr);
@@ -692,7 +692,7 @@ static int clone_file_block(ext2_filsys
 			return BLOCK_CHANGED;
 		} else
 			com_err("clone_file_block", 0,
-			    _("internal error; can't find dup_blk for %d\n"),
+			    _("internal error; can't find dup_blk for %u\n"),
 				*block_nr);
 	}
 	return 0;
diff -uprN e2fsprogs-1.38.org/e2fsck/pass2.c e2fsprogs-1.38-4g/e2fsck/pass2.c
--- e2fsprogs-1.38.org/e2fsck/pass2.c	2005-04-15 03:06:09.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/pass2.c	2006-02-25 19:41:29.000000000 +0900
@@ -543,7 +543,7 @@ static void parse_int_node(ext2_filsys f

 #ifdef DX_DEBUG
 		printf("Root node dump:\n");
-		printf("\t Reserved zero: %d\n", root->reserved_zero);
+		printf("\t Reserved zero: %u\n", root->reserved_zero);
 		printf("\t Hash Version: %d\n", root->hash_version);
 		printf("\t Info length: %d\n", root->info_length);
 		printf("\t Indirect levels: %d\n", root->indirect_levels);
@@ -582,7 +582,7 @@ static void parse_int_node(ext2_filsys f
 		prev_hash = hash;
 		hash = i ? (ext2fs_le32_to_cpu(ent[i].hash) & ~1) : 0;
 #ifdef DX_DEBUG
-		printf("Entry #%d: Hash 0x%08x, block %d\n", i,
+		printf("Entry #%d: Hash 0x%08x, block %u\n", i,
 		       hash, ext2fs_le32_to_cpu(ent[i].block));
 #endif
 		blk = ext2fs_le32_to_cpu(ent[i].block) & 0x0ffffff;
diff -uprN e2fsprogs-1.38.org/e2fsck/recovery.c e2fsprogs-1.38-4g/e2fsck/recovery.c
--- e2fsprogs-1.38.org/e2fsck/recovery.c	2003-12-08 02:11:38.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/recovery.c	2006-02-25 19:41:29.000000000 +0900
@@ -435,7 +435,7 @@ static int do_one_pass(journal_t *journa
 					success = err;
 					printk (KERN_ERR
 						"JBD: IO error %d recovering "
-						"block %ld in log\n",
+						"block %lu in log\n",
 						err, io_block);
 				} else {
 					unsigned long blocknr;
diff -uprN e2fsprogs-1.38.org/e2fsck/unix.c e2fsprogs-1.38-4g/e2fsck/unix.c
--- e2fsprogs-1.38.org/e2fsck/unix.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/e2fsck/unix.c	2006-02-25 19:41:29.000000000 +0900
@@ -98,7 +98,8 @@ static void usage(e2fsck_t ctx)
 static void show_stats(e2fsck_t	ctx)
 {
 	ext2_filsys fs = ctx->fs;
-	int inodes, inodes_used, blocks, blocks_used;
+	int inodes, inodes_used;
+	blk_t blocks, blocks_used;
 	int dir_links;
 	int num_files, num_links;
 	int frag_percent;
@@ -117,7 +118,7 @@ static void show_stats(e2fsck_t	ctx)
 	frag_percent = (frag_percent + 5) / 10;

 	if (!verbose) {
-		printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %d/%d blocks\n"),
+		printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %u/%u blocks\n"),
 		       ctx->device_name, inodes_used, inodes,
 		       frag_percent / 10, frag_percent % 10,
 		       blocks_used, blocks);
@@ -131,7 +132,7 @@ static void show_stats(e2fsck_t	ctx)
 		ctx->fs_fragmented, frag_percent / 10, frag_percent % 10);
 	printf (_("         # of inodes with ind/dind/tind blocks: %d/%d/%d\n"),
 		ctx->fs_ind_count, ctx->fs_dind_count, ctx->fs_tind_count);
-	printf (P_("%8d block used (%d%%)\n", "%8d blocks used (%d%%)\n",
+	printf (P_("%8u block used (%d%%)\n", "%8u blocks used (%d%%)\n",
 		   blocks_used),
 		blocks_used, (int) ((long long) 100 * blocks_used / blocks));
 	printf (P_("%8d bad block\n", "%8d bad blocks\n",
@@ -289,7 +290,7 @@ static void check_if_skip(e2fsck_t ctx)
 		fputs(_(", check forced.\n"), stdout);
 		return;
 	}
-	printf(_("%s: clean, %d/%d files, %d/%d blocks"), ctx->device_name,
+	printf(_("%s: clean, %d/%d files, %u/%u blocks"), ctx->device_name,
 	       fs->super->s_inodes_count - fs->super->s_free_inodes_count,
 	       fs->super->s_inodes_count,
 	       fs->super->s_blocks_count - fs->super->s_free_blocks_count,
diff -uprN e2fsprogs-1.38.org/lib/ext2fs/bitops.h e2fsprogs-1.38-4g/lib/ext2fs/bitops.h
--- e2fsprogs-1.38.org/lib/ext2fs/bitops.h	2005-07-01 08:40:17.000000000 +0900
+++ e2fsprogs-1.38-4g/lib/ext2fs/bitops.h	2006-02-25 19:41:29.000000000 +0900
@@ -130,6 +130,7 @@ extern int ext2fs_unmark_generic_bitmap(
 #endif
 #endif

+#define _EXT2_USE_C_VERSIONS_
 #if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
      (defined(__i386__) || defined(__i486__) || defined(__i586__)))

@@ -264,7 +265,7 @@ _INLINE_ __u16 ext2fs_swab16(__u16 val)

 #endif	/* i386 */

-#ifdef __mc68000__
+#if (defined(__mc68000__) && !defined(_EXT2_USE_C_VERSIONS_))

 #define _EXT2_HAVE_ASM_BITOPS_

diff -uprN e2fsprogs-1.38.org/misc/dumpe2fs.c e2fsprogs-1.38-4g/misc/dumpe2fs.c
--- e2fsprogs-1.38.org/misc/dumpe2fs.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/dumpe2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -244,12 +244,12 @@ static void print_journal_information(ex
 		exit(1);
 	}

-	printf(_("\nJournal block size:       %d\n"
-		 "Journal length:           %d\n"
-		 "Journal first block:      %d\n"
+	printf(_("\nJournal block size:       %u\n"
+		 "Journal length:           %u\n"
+		 "Journal first block:      %u\n"
 		 "Journal sequence:         0x%08x\n"
-		 "Journal start:            %d\n"
-		 "Journal number of users:  %d\n"),
+		 "Journal start:            %u\n"
+		 "Journal number of users:  %lu\n"),
 	       ntohl(jsb->s_blocksize),  ntohl(jsb->s_maxlen),
 	       ntohl(jsb->s_first), ntohl(jsb->s_sequence),
 	       ntohl(jsb->s_start), ntohl(jsb->s_nr_users));
diff -uprN e2fsprogs-1.38.org/misc/e2image.c e2fsprogs-1.38-4g/misc/e2image.c
--- e2fsprogs-1.38.org/misc/e2image.c	2005-01-27 01:37:46.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/e2image.c	2006-02-25 19:41:29.000000000 +0900
@@ -329,7 +329,7 @@ static void write_block(int fd, char *bu
 				err = errno;
 			else
 				err = 0;
-			com_err(program_name, err, "error writing block %d",
+			com_err(program_name, err, "error writing block %u",
 				block);
 		}
 	}
diff -uprN e2fsprogs-1.38.org/misc/findsuper.c e2fsprogs-1.38-4g/misc/findsuper.c
--- e2fsprogs-1.38.org/misc/findsuper.c	2005-06-20 21:35:27.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/findsuper.c	2006-02-25 19:41:29.000000000 +0900
@@ -182,15 +182,15 @@ int main(int argc, char *argv[])
 		if (ext2.s_magic != EXT2_SUPER_MAGIC)
 			continue;
 		if (ext2.s_log_block_size > 4)
-			WHY("log block size > 4 (%d)\n", ext2.s_log_block_size);
+			WHY("log block size > 4 (%u)\n", ext2.s_log_block_size);
 		if (ext2.s_r_blocks_count > ext2.s_blocks_count)
-			WHY("r_blocks_count > blocks_count (%d > %d)\n",
+			WHY("r_blocks_count > blocks_count (%u > %u)\n",
 			    ext2.s_r_blocks_count, ext2.s_blocks_count);
 		if (ext2.s_free_blocks_count > ext2.s_blocks_count)
-			WHY("free_blocks_count > blocks_count\n (%d > %d)\n",
+			WHY("free_blocks_count > blocks_count\n (%u > %u)\n",
 			    ext2.s_free_blocks_count, ext2.s_blocks_count);
 		if (ext2.s_free_inodes_count > ext2.s_inodes_count)
-			WHY("free_inodes_count > inodes_count (%d > %d)\n",
+			WHY("free_inodes_count > inodes_count (%u > %u)\n",
 			    ext2.s_free_inodes_count, ext2.s_inodes_count);

 		tm = ext2.s_mtime;
diff -uprN e2fsprogs-1.38.org/misc/mke2fs.c e2fsprogs-1.38-4g/misc/mke2fs.c
--- e2fsprogs-1.38.org/misc/mke2fs.c	2005-07-01 09:00:40.000000000 +0900
+++ e2fsprogs-1.38-4g/misc/mke2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -302,7 +302,7 @@ static void handle_bad_blocks(ext2_filsy
 		if (ext2fs_badblocks_list_test(bb_list, i)) {
 			fprintf(stderr, _("Block %d in primary "
 				"superblock/group descriptor area bad.\n"), i);
-			fprintf(stderr, _("Blocks %d through %d must be good "
+			fprintf(stderr, _("Blocks %u through %d must be good "
 				"in order to build a filesystem.\n"),
 				fs->super->s_first_data_block, must_be_good);
 			fputs(_("Aborting....\n"), stderr);
@@ -325,7 +325,7 @@ static void handle_bad_blocks(ext2_filsy
 						       group_block + j)) {
 				if (!group_bad)
 					fprintf(stderr,
-_("Warning: the backup superblock/group descriptors at block %d contain\n"
+_("Warning: the backup superblock/group descriptors at block %u contain\n"
 "	bad blocks.\n\n"),
 						group_block);
 				group_bad++;
@@ -489,7 +489,7 @@ static void write_inode_tables(ext2_fils
 		retval = zero_blocks(fs, blk, num, 0, &blk, &num);
 		if (retval) {
 			fprintf(stderr, _("\nCould not write %d blocks "
-				"in inode table starting at %d: %s\n"),
+				"in inode table starting at %u: %s\n"),
 				num, blk, error_message(retval));
 			exit(1);
 		}
@@ -692,7 +692,7 @@ static void show_stats(ext2_filsys fs)
 	int			need, col_left;

 	if (param.s_blocks_count != s->s_blocks_count)
-		fprintf(stderr, _("warning: %d blocks unused.\n\n"),
+		fprintf(stderr, _("warning: %u blocks unused.\n\n"),
 		       param.s_blocks_count - s->s_blocks_count);

 	memset(buf, 0, sizeof(buf));
diff -uprN e2fsprogs-1.38.org/resize/main.c e2fsprogs-1.38-4g/resize/main.c
--- e2fsprogs-1.38.org/resize/main.c	2005-05-10 05:22:17.000000000 +0900
+++ e2fsprogs-1.38-4g/resize/main.c	2006-02-25 19:41:29.000000000 +0900
@@ -276,13 +276,13 @@ int main (int argc, char ** argv)
 	}
 	if (!force && (new_size > max_size)) {
 		fprintf(stderr, _("The containing partition (or device)"
-			" is only %d (%dk) blocks.\nYou requested a new size"
-			" of %d blocks.\n\n"), max_size,
+			" is only %u (%dk) blocks.\nYou requested a new size"
+			" of %u blocks.\n\n"), max_size,
 			fs->blocksize / 1024, new_size);
 		exit(1);
 	}
 	if (new_size == fs->super->s_blocks_count) {
-		fprintf(stderr, _("The filesystem is already %d blocks "
+		fprintf(stderr, _("The filesystem is already %u blocks "
 			"long.  Nothing to do!\n\n"), new_size);
 		exit(0);
 	}
@@ -293,7 +293,7 @@ int main (int argc, char ** argv)
 			device_name);
 		exit(1);
 	}
-	printf("Resizing the filesystem on %s to %d (%dk) blocks.\n",
+	printf("Resizing the filesystem on %s to %u (%dk) blocks.\n",
 	       device_name, new_size, fs->blocksize / 1024);
 	retval = resize_fs(fs, &new_size, flags,
 			   ((flags & RESIZE_PERCENT_COMPLETE) ?
@@ -304,7 +304,7 @@ int main (int argc, char ** argv)
 		ext2fs_close (fs);
 		exit(1);
 	}
-	printf(_("The filesystem on %s is now %d blocks long.\n\n"),
+	printf(_("The filesystem on %s is now %u blocks long.\n\n"),
 	       device_name, new_size);
 	return (0);
 }
diff -uprN e2fsprogs-1.38.org/resize/resize2fs.c e2fsprogs-1.38-4g/resize/resize2fs.c
--- e2fsprogs-1.38.org/resize/resize2fs.c	2005-05-10 05:22:17.000000000 +0900
+++ e2fsprogs-1.38-4g/resize/resize2fs.c	2006-02-25 19:41:29.000000000 +0900
@@ -108,7 +108,7 @@ errcode_t resize_fs(ext2_filsys fs, blk_

 #ifdef RESIZE2FS_DEBUG
 	if (rfs->flags & RESIZE_DEBUG_BMOVE)
-		printf("Number of free blocks: %d/%d, Needed: %d\n",
+		printf("Number of free blocks: %u/%u, Needed: %d\n",
 		       rfs->old_fs->super->s_free_blocks_count,
 		       rfs->new_fs->super->s_free_blocks_count,
 		       rfs->needed_blocks);



^ permalink raw reply	[flat|nested] 51+ messages in thread

end of thread, other threads:[~2006-05-30 17:55 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-25 13:33 [Ext2-devel] [PATCH 2/2] ext2/3: Support2^32-1blocks(e2fsprogs) sho
2006-03-26 22:37 ` Badari Pulavarty
2006-03-27  4:17   ` Takashi Sato
2006-03-27 18:45 ` Mingming Cao
2006-03-27 21:10   ` Andrew Morton
2006-03-27 22:58     ` Ravikiran G Thirumalai
2006-03-28  7:15       ` Laurent Vivier
2006-03-28  8:02         ` Ravikiran G Thirumalai
2006-03-28 10:34           ` Laurent Vivier
2006-03-28 18:01         ` Mingming Cao
2006-03-29  9:13           ` Laurent Vivier
     [not found]             ` <1143657317.4045.12.camel@dyn9047017067.beaverton.ibm.com>
2006-03-29 20:00               ` Ravikiran G Thirumalai
2006-03-29 20:38                 ` Mingming Cao
2006-03-30  8:41                   ` Ravikiran G Thirumalai
2006-03-30  1:38             ` [RFC][PATCH 0/2]Extend ext3 filesystem limit from 8TB to 16TB Mingming Cao
2006-03-30  1:54               ` Andrew Morton
2006-03-31 22:42                 ` Mingming Cao
2006-04-02 20:13                   ` Mingming Cao
2006-04-10  9:11                 ` [Ext2-devel] " Laurent Vivier
2006-04-10  8:24                   ` Andrew Morton
2006-04-13 15:26                     ` Laurent Vivier
2006-04-17 21:07                       ` Ravikiran G Thirumalai
2006-04-17 21:09                         ` Arjan van de Ven
2006-04-17 21:32                           ` Ravikiran G Thirumalai
2006-04-18  7:14                             ` Laurent Vivier
2006-04-18  7:30                               ` Arjan van de Ven
2006-04-18 10:57                                 ` Laurent Vivier
2006-04-18 19:08                                   ` Ravikiran G Thirumalai
2006-04-18 14:09                                 ` Laurent Vivier
2006-04-18 21:01                                 ` Mingming Cao
2006-04-20 11:28                                   ` Laurent Vivier
     [not found]                                   ` <1145543970.5872.38.camel@openx2.frec.bull.fr>
2006-04-21 11:17                                     ` Laurent Vivier
2006-04-10 16:57                   ` Mingming Cao
2006-04-10 19:06                     ` Mingming Cao
2006-04-11  7:07                       ` Laurent Vivier
2006-04-14 17:23                         ` Ravikiran G Thirumalai
2006-03-30 17:36               ` Andreas Dilger
2006-03-30 19:01                 ` Mingming Cao
2006-03-30 17:40               ` Andreas Dilger
2006-03-30 19:16                 ` Mingming Cao
2006-03-30 19:22                   ` Mingming Cao
2006-03-31  6:42                     ` Andreas Dilger
2006-03-31 13:33                   ` Andi Kleen
2006-04-01  6:50                     ` Nathan Scott
2006-05-26  5:00               ` [PATCH 0/2]Define ext3 in-kernel filesystem block types and extend " Mingming Cao
2006-05-26 18:08                 ` Andrew Morton
2006-05-30 17:55                   ` Mingming Cao
2006-03-30  1:39             ` [RFC][PATCH 1/2]ext3 block allocation/reservation fixes to support 2**32 block numbers Mingming Cao
2006-03-30  1:39             ` [RFC][PATCH 2/2]Other ext3 in-kernel block number type fix " Mingming Cao
  -- strict thread matches above, loose matches on Subject: below --
2006-03-25 13:34 [Ext2-devel] [PATCH 2/2] ext2/3: Support2^32-1blocks(e2fsprogs) sho
2006-03-15 12:39 [PATCH 2/2] ext2/3: Support 2^32-1 blocks(e2fsprogs) Takashi Sato
2006-03-17 21:19 ` [Ext2-devel] " Badari Pulavarty
2006-03-18  5:57   ` [Ext2-devel] [PATCH 2/2] ext2/3: Support 2^32-1blocks(e2fsprogs) Takashi Sato
2006-03-22 23:45     ` Badari Pulavarty
2006-03-23 18:16       ` Badari Pulavarty
2006-03-24  1:54         ` [Ext2-devel] [PATCH 2/2] ext2/3: Support2^32-1blocks(e2fsprogs) Takashi Sato

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox