[RFC][PATCH 1/3] add ext2_fsblk_t for filesystem relative blocks

[email protected]
Newsgroups gmane.comp.file-systems.ext2.devel,gmane.linux.kernel
Message-ID <[email protected]>
[patch 1/3] ext2_fsblk_t.patch
This patch converts ext2 filesystem relative blocks to ext2_fsblk_t.

Signed-off-by: Takashi Sato <[email protected]>
---
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/balloc.c linux-2.6.17.tmp/fs/ext2/balloc.c
--- linux-2.6.17/fs/ext2/balloc.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/balloc.c	2006-06-29 21:24:37.000000000 +0900
@@ -103,8 +103,8 @@ static int reserve_blocks(struct super_b
 {
 	struct ext2_sb_info *sbi = EXT2_SB(sb);
 	struct ext2_super_block *es = sbi->s_es;
-	unsigned free_blocks;
-	unsigned root_blocks;
+	ext2_fsblk_t free_blocks;
+	ext2_fsblk_t root_blocks;
 
 	free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
 	root_blocks = le32_to_cpu(es->s_r_blocks_count);
@@ -175,20 +175,21 @@ static void group_release_blocks(struct 
 }
 
 /* Free given blocks, update quota and i_blocks field */
-void ext2_free_blocks (struct inode * inode, unsigned long block,
-		       unsigned long count)
+void ext2_free_blocks (struct inode * inode, ext2_fsblk_t block,
+		       ext2_fsblk_t count)
 {
 	struct buffer_head *bitmap_bh = NULL;
 	struct buffer_head * bh2;
 	unsigned long block_group;
 	unsigned long bit;
 	unsigned long i;
-	unsigned long overflow;
+	ext2_fsblk_t overflow;
 	struct super_block * sb = inode->i_sb;
 	struct ext2_sb_info * sbi = EXT2_SB(sb);
 	struct ext2_group_desc * desc;
 	struct ext2_super_block * es = sbi->s_es;
-	unsigned freed = 0, group_freed;
+	ext2_fsblk_t freed = 0;
+	unsigned group_freed;
 
 	if (block < le32_to_cpu(es->s_first_data_block) ||
 	    block + count < block ||
@@ -324,8 +325,8 @@ 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,
-			u32 *prealloc_count, u32 *prealloc_block, int *err)
+ext2_fsblk_t ext2_new_block(struct inode *inode, ext2_fsblk_t goal,
+			ext2_fsblk_t *prealloc_count, ext2_fsblk_t *prealloc_block, int *err)
 {
 	struct buffer_head *bitmap_bh = NULL;
 	struct buffer_head *gdp_bh;	/* bh2 */
@@ -333,14 +334,15 @@ 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;
+	ext2_fsblk_t target_block;		/* tmp */
+	ext2_fsblk_t 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;
 	unsigned group_size = EXT2_BLOCKS_PER_GROUP(sb);
 	unsigned prealloc_goal = es->s_prealloc_blocks;
-	unsigned group_alloc = 0, es_alloc, dq_alloc;
+	unsigned group_alloc = 0;
+	ext2_fsblk_t es_alloc, dq_alloc;
 	int nr_scanned_groups;
 
 	if (!prealloc_goal--)
@@ -461,7 +463,7 @@ got_block:
 		      sbi->s_itb_per_group))
 		ext2_error (sb, "ext2_new_block",
 			    "Allocating block in system zone - "
-			    "block = %u", target_block);
+			    "block = %lu", target_block);
 
 	if (target_block >= le32_to_cpu(es->s_blocks_count)) {
 		ext2_error (sb, "ext2_new_block",
@@ -504,7 +506,7 @@ got_block:
 	if (sb->s_flags & MS_SYNCHRONOUS)
 		sync_dirty_buffer(bitmap_bh);
 
-	ext2_debug ("allocating block %d. ", block);
+	ext2_debug ("allocating block %lu. ", block);
 
 	*err = 0;
 out_release:
@@ -521,13 +523,14 @@ io_error:
 	goto out_release;
 }
 
-unsigned long ext2_count_free_blocks (struct super_block * sb)
+ext2_fsblk_t ext2_count_free_blocks (struct super_block * sb)
 {
 	struct ext2_group_desc * desc;
-	unsigned long desc_count = 0;
+	ext2_fsblk_t desc_count = 0;
 	int i;
 #ifdef EXT2FS_DEBUG
-	unsigned long bitmap_count, x;
+	ext2_fsblk_t bitmap_count;
+	unsigned long x;
 	struct ext2_super_block *es;
 
 	lock_super (sb);
@@ -568,7 +571,7 @@ unsigned long ext2_count_free_blocks (st
 }
 
 static inline int
-block_in_use(unsigned long block, struct super_block *sb, unsigned char *map)
+block_in_use(ext2_fsblk_t block, struct super_block *sb, unsigned char *map)
 {
 	return ext2_test_bit ((block -
 		le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block)) %
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/ext2.h linux-2.6.17.tmp/fs/ext2/ext2.h
--- linux-2.6.17/fs/ext2/ext2.h	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/ext2.h	2006-06-29 21:24:37.000000000 +0900
@@ -20,7 +20,7 @@ struct ext2_inode_info {
 	__u8	i_frag_no;
 	__u8	i_frag_size;
 	__u16	i_state;
-	__u32	i_file_acl;
+	ext2_fsblk_t	i_file_acl;
 	__u32	i_dir_acl;
 	__u32	i_dtime;
 
@@ -46,9 +46,9 @@ struct ext2_inode_info {
 	 * allocated to this file.  This give us the goal (target) for the next
 	 * allocation when we detect linearly ascending requests.
 	 */
-	__u32	i_next_alloc_goal;
-	__u32	i_prealloc_block;
-	__u32	i_prealloc_count;
+	ext2_fsblk_t	i_next_alloc_goal;
+	ext2_fsblk_t	i_prealloc_block;
+	ext2_fsblk_t	i_prealloc_count;
 	__u32	i_dir_start_lookup;
 #ifdef CONFIG_EXT2_FS_XATTR
 	/*
@@ -91,11 +91,11 @@ 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,
-			   __u32 *, __u32 *, int *);
-extern void ext2_free_blocks (struct inode *, unsigned long,
-			      unsigned long);
-extern unsigned long ext2_count_free_blocks (struct super_block *);
+extern ext2_fsblk_t ext2_new_block (struct inode *, ext2_fsblk_t,
+			   ext2_fsblk_t *, ext2_fsblk_t *, int *);
+extern void ext2_free_blocks (struct inode *, ext2_fsblk_t,
+			      ext2_fsblk_t);
+extern ext2_fsblk_t ext2_count_free_blocks (struct super_block *);
 extern unsigned long ext2_count_dirs (struct super_block *);
 extern void ext2_check_blocks_bitmap (struct super_block *);
 extern struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/ialloc.c linux-2.6.17.tmp/fs/ext2/ialloc.c
--- linux-2.6.17/fs/ext2/ialloc.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/ialloc.c	2006-06-29 21:24:37.000000000 +0900
@@ -177,7 +177,7 @@ static void ext2_preread_inode(struct in
 {
 	unsigned long block_group;
 	unsigned long offset;
-	unsigned long block;
+	ext2_fsblk_t block;
 	struct buffer_head *bh;
 	struct ext2_group_desc * gdp;
 	struct backing_dev_info *bdi;
@@ -278,7 +278,7 @@ static int find_group_orlov(struct super
 	int inodes_per_group = EXT2_INODES_PER_GROUP(sb);
 	int freei;
 	int avefreei;
-	int free_blocks;
+	ext2_fsblk_t free_blocks;
 	int avefreeb;
 	int blocks_per_dir;
 	int ndirs;
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/inode.c linux-2.6.17.tmp/fs/ext2/inode.c
--- linux-2.6.17/fs/ext2/inode.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/inode.c	2006-06-29 21:24:37.000000000 +0900
@@ -95,8 +95,8 @@ void ext2_discard_prealloc (struct inode
 	struct ext2_inode_info *ei = EXT2_I(inode);
 	write_lock(&ei->i_meta_lock);
 	if (ei->i_prealloc_count) {
-		unsigned short total = ei->i_prealloc_count;
-		unsigned long block = ei->i_prealloc_block;
+		ext2_fsblk_t total = ei->i_prealloc_count;
+		ext2_fsblk_t block = ei->i_prealloc_block;
 		ei->i_prealloc_count = 0;
 		ei->i_prealloc_block = 0;
 		write_unlock(&ei->i_meta_lock);
@@ -107,12 +107,12 @@ void ext2_discard_prealloc (struct inode
 #endif
 }
 
-static int ext2_alloc_block (struct inode * inode, unsigned long goal, int *err)
+static ext2_fsblk_t ext2_alloc_block (struct inode * inode, ext2_fsblk_t goal, int *err)
 {
 #ifdef EXT2FS_DEBUG
 	static unsigned long alloc_hits, alloc_attempts;
 #endif
-	unsigned long result;
+	ext2_fsblk_t result;
 
 
 #ifdef EXT2_PREALLOCATE
@@ -326,7 +326,7 @@ static unsigned long ext2_find_near(stru
 	struct ext2_inode_info *ei = EXT2_I(inode);
 	__le32 *start = ind->bh ? (__le32 *) ind->bh->b_data : ei->i_data;
 	__le32 *p;
-	unsigned long bg_start;
+	ext2_fsblk_t bg_start;
 	unsigned long colour;
 
 	/* Try to find previous block */
@@ -366,7 +366,7 @@ static inline int ext2_find_goal(struct 
 				 long block,
 				 Indirect chain[4],
 				 Indirect *partial,
-				 unsigned long *goal)
+				 ext2_fsblk_t *goal)
 {
 	struct ext2_inode_info *ei = EXT2_I(inode);
 	write_lock(&ei->i_meta_lock);
@@ -417,7 +417,7 @@ static inline int ext2_find_goal(struct 
 
 static int ext2_alloc_branch(struct inode *inode,
 			     int num,
-			     unsigned long goal,
+			     ext2_fsblk_t goal,
 			     int *offsets,
 			     Indirect *branch)
 {
@@ -425,13 +425,13 @@ static int ext2_alloc_branch(struct inod
 	int n = 0;
 	int err;
 	int i;
-	int parent = ext2_alloc_block(inode, goal, &err);
+	ext2_fsblk_t 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);
+		ext2_fsblk_t nr = ext2_alloc_block(inode, parent, &err);
 		if (!nr)
 			break;
 		branch[n].key = cpu_to_le32(nr);
@@ -550,7 +550,7 @@ int ext2_get_block(struct inode *inode, 
 	int offsets[4];
 	Indirect chain[4];
 	Indirect *partial;
-	unsigned long goal;
+	ext2_fsblk_t goal;
 	int left;
 	int boundary = 0;
 	int depth = ext2_block_to_path(inode, iblock, offsets, &boundary);
@@ -823,8 +823,8 @@ no_top:
  */
 static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
 {
-	unsigned long block_to_free = 0, count = 0;
-	unsigned long nr;
+	ext2_fsblk_t block_to_free = 0, count = 0;
+	ext2_fsblk_t nr;
 
 	for ( ; p < q ; p++) {
 		nr = le32_to_cpu(*p);
@@ -864,7 +864,7 @@ static inline void ext2_free_data(struct
 static void ext2_free_branches(struct inode *inode, __le32 *p, __le32 *q, int depth)
 {
 	struct buffer_head * bh;
-	unsigned long nr;
+	ext2_fsblk_t nr;
 
 	if (depth--) {
 		int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
@@ -1000,7 +1000,7 @@ static struct ext2_inode *ext2_get_inode
 {
 	struct buffer_head * bh;
 	unsigned long block_group;
-	unsigned long block;
+	ext2_fsblk_t block;
 	unsigned long offset;
 	struct ext2_group_desc * gdp;
 
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/super.c linux-2.6.17.tmp/fs/ext2/super.c
--- linux-2.6.17/fs/ext2/super.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/super.c	2006-06-29 21:24:37.000000000 +0900
@@ -261,9 +261,9 @@ static struct export_operations ext2_exp
 	.get_parent = ext2_get_parent,
 };
 
-static unsigned long get_sb_block(void **data)
+static ext2_fsblk_t get_sb_block(void **data)
 {
-	unsigned long 	sb_block;
+	ext2_fsblk_t 	sb_block;
 	char 		*options = (char *) *data;
 
 	if (!options || strncmp(options, "sb=", 3) != 0)
@@ -506,7 +506,7 @@ static int ext2_check_descriptors (struc
 	int i;
 	int desc_block = 0;
 	struct ext2_sb_info *sbi = EXT2_SB(sb);
-	unsigned long block = le32_to_cpu(sbi->s_es->s_first_data_block);
+	ext2_fsblk_t block = le32_to_cpu(sbi->s_es->s_first_data_block);
 	struct ext2_group_desc * gdp = NULL;
 
 	ext2_debug ("Checking group descriptors");
@@ -574,12 +574,13 @@ static loff_t ext2_max_size(int bits)
 	return res;
 }
 
-static unsigned long descriptor_loc(struct super_block *sb,
-				    unsigned long logic_sb_block,
+static ext2_fsblk_t descriptor_loc(struct super_block *sb,
+				    ext2_fsblk_t logic_sb_block,
 				    int nr)
 {
 	struct ext2_sb_info *sbi = EXT2_SB(sb);
-	unsigned long bg, first_data_block, first_meta_bg;
+	unsigned long bg, first_meta_bg;
+	ext2_fsblk_t first_data_block;
 	int has_super = 0;
 	
 	first_data_block = le32_to_cpu(sbi->s_es->s_first_data_block);
@@ -600,9 +601,9 @@ static int ext2_fill_super(struct super_
 	struct ext2_sb_info * sbi;
 	struct ext2_super_block * es;
 	struct inode *root;
-	unsigned long block;
-	unsigned long sb_block = get_sb_block(&data);
-	unsigned long logic_sb_block;
+	ext2_fsblk_t block;
+	ext2_fsblk_t sb_block = get_sb_block(&data);
+	ext2_fsblk_t logic_sb_block;
 	unsigned long offset = 0;
 	unsigned long def_mount_opts;
 	int blocksize = BLOCK_SIZE;
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/xattr.c linux-2.6.17.tmp/fs/ext2/xattr.c
--- linux-2.6.17/fs/ext2/xattr.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/xattr.c	2006-06-29 21:24:37.000000000 +0900
@@ -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 %ld: bad block %lu", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		error = -EIO;
 		goto cleanup;
@@ -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 %ld: bad block %lu", 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 %ld: bad block %lu", inode->i_ino, 
 				   EXT2_I(inode)->i_file_acl);
 			error = -EIO;
 			goto cleanup;
@@ -664,11 +664,11 @@ 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->
+			ext2_fsblk_t 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,
+			ext2_fsblk_t block = ext2_new_block(inode, goal,
 						   NULL, NULL, &error);
 			if (error)
 				goto cleanup;
@@ -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 %ld: block %lu 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 %ld: bad block %lu", inode->i_ino,
 			EXT2_I(inode)->i_file_acl);
 		goto cleanup;
 	}
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/xip.c linux-2.6.17.tmp/fs/ext2/xip.c
--- linux-2.6.17/fs/ext2/xip.c	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/xip.c	2006-06-29 21:24:37.000000000 +0900
@@ -45,7 +45,7 @@ __ext2_get_sector(struct inode *inode, s
 }
 
 int
-ext2_clear_xip_target(struct inode *inode, int block)
+ext2_clear_xip_target(struct inode *inode, ext2_fsblk_t block)
 {
 	sector_t sector = block * (PAGE_SIZE/512);
 	unsigned long data;
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/fs/ext2/xip.h linux-2.6.17.tmp/fs/ext2/xip.h
--- linux-2.6.17/fs/ext2/xip.h	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/fs/ext2/xip.h	2006-06-29 21:24:37.000000000 +0900
@@ -7,7 +7,7 @@
 
 #ifdef CONFIG_EXT2_FS_XIP
 extern void ext2_xip_verify_sb (struct super_block *);
-extern int ext2_clear_xip_target (struct inode *, int);
+extern int ext2_clear_xip_target (struct inode *, ext2_fsblk_t);
 
 static inline int ext2_use_xip (struct super_block *sb)
 {
diff -upNr -X linux-2.6.17/Documentation/dontdiff linux-2.6.17/include/linux/ext2_fs_sb.h linux-2.6.17.tmp/include/linux/ext2_fs_sb.h
--- linux-2.6.17/include/linux/ext2_fs_sb.h	2006-06-18 10:49:35.000000000 +0900
+++ linux-2.6.17.tmp/include/linux/ext2_fs_sb.h	2006-06-29 21:24:38.000000000 +0900
@@ -19,6 +19,8 @@
 #include <linux/blockgroup_lock.h>
 #include <linux/percpu_counter.h>
 
+typedef unsigned long ext2_fsblk_t;
+
 /*
  * second extended-fs super-block data in memory
  */


Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.