[RFC][E2FSPROGS][PATCH 2/8]

Alexandre Ratchov <[email protected]>
Newsgroups gmane.comp.file-systems.ext2.devel
Message-ID <[email protected]>
Introduce the pblk_t type. This type is used to store physical block
numbers and has the size of physical block numbers (32bit) as stored
in the inode (it is the on-disk block number type).


Index: e2fsprogs-upstream/lib/ext2fs/block.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/block.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/block.c	2006-05-18 17:14:42.000000000 +0200
@@ -41,7 +41,7 @@
 {
 	int	ret = 0, changed = 0;
 	int	i, flags, limit, offset;
-	blk_t	*block_nr;
+	pblk_t	*block_nr;
 
 	limit = ctx->fs->blocksize >> 2;
 	if (!(ctx->flags & BLOCK_FLAG_DEPTH_TRAVERSE) &&
@@ -66,33 +66,38 @@
 		return ret;
 	}
 
-	block_nr = (blk_t *) ctx->ind_buf;
+	block_nr = (pblk_t *) ctx->ind_buf;
 	offset = 0;
 	if (ctx->flags & BLOCK_FLAG_APPEND) {
 		for (i = 0; i < limit; i++, ctx->bcount++, block_nr++) {
-			flags = (*ctx->func)(ctx->fs, block_nr, ctx->bcount,
+			blk_t b = *block_nr;
+			flags = (*ctx->func)(ctx->fs, &b, ctx->bcount,
 					     *ind_block, offset, 
 					     ctx->priv_data);
+			*block_nr = b;
 			changed	|= flags;
 			if (flags & BLOCK_ABORT) {
 				ret |= BLOCK_ABORT;
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	} else {
 		for (i = 0; i < limit; i++, ctx->bcount++, block_nr++) {
+			blk_t b;
 			if (*block_nr == 0)
 				continue;
-			flags = (*ctx->func)(ctx->fs, block_nr, ctx->bcount,
+			b = *block_nr;
+			flags = (*ctx->func)(ctx->fs, &b, ctx->bcount,
 					     *ind_block, offset, 
 					     ctx->priv_data);
+			*block_nr = b;
 			changed	|= flags;
 			if (flags & BLOCK_ABORT) {
 				ret |= BLOCK_ABORT;
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	}
 	if (changed & BLOCK_CHANGED) {
@@ -115,7 +120,7 @@
 {
 	int	ret = 0, changed = 0;
 	int	i, flags, limit, offset;
-	blk_t	*block_nr;
+	pblk_t	*block_nr;
 
 	limit = ctx->fs->blocksize >> 2;
 	if (!(ctx->flags & (BLOCK_FLAG_DEPTH_TRAVERSE |
@@ -140,35 +145,41 @@
 		return ret;
 	}
 
-	block_nr = (blk_t *) ctx->dind_buf;
+	block_nr = (pblk_t *) ctx->dind_buf;
 	offset = 0;
 	if (ctx->flags & BLOCK_FLAG_APPEND) {
 		for (i = 0; i < limit; i++, block_nr++) {
-			flags = block_iterate_ind(block_nr,
+			blk_t b;
+			b = *block_nr;
+			flags = block_iterate_ind(&b,
 						  *dind_block, offset,
 						  ctx);
+			*block_nr = b;
 			changed |= flags;
 			if (flags & (BLOCK_ABORT | BLOCK_ERROR)) {
 				ret |= flags & (BLOCK_ABORT | BLOCK_ERROR);
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	} else {
 		for (i = 0; i < limit; i++, block_nr++) {
+			blk_t b;
 			if (*block_nr == 0) {
 				ctx->bcount += limit;
 				continue;
 			}
-			flags = block_iterate_ind(block_nr,
+			b = *block_nr;
+			flags = block_iterate_ind(&b,
 						  *dind_block, offset,
 						  ctx);
+			*block_nr = b;
 			changed |= flags;
 			if (flags & (BLOCK_ABORT | BLOCK_ERROR)) {
 				ret |= flags & (BLOCK_ABORT | BLOCK_ERROR);
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	}
 	if (changed & BLOCK_CHANGED) {
@@ -191,7 +202,7 @@
 {
 	int	ret = 0, changed = 0;
 	int	i, flags, limit, offset;
-	blk_t	*block_nr;
+	pblk_t	*block_nr;
 
 	limit = ctx->fs->blocksize >> 2;
 	if (!(ctx->flags & (BLOCK_FLAG_DEPTH_TRAVERSE |
@@ -216,35 +227,41 @@
 		return ret;
 	}
 
-	block_nr = (blk_t *) ctx->tind_buf;
+	block_nr = (pblk_t *) ctx->tind_buf;
 	offset = 0;
 	if (ctx->flags & BLOCK_FLAG_APPEND) {
 		for (i = 0; i < limit; i++, block_nr++) {
-			flags = block_iterate_dind(block_nr,
+			blk_t b;
+			b = *block_nr;
+			flags = block_iterate_dind(&b,
 						   *tind_block,
 						   offset, ctx);
+			*block_nr = b;
 			changed |= flags;
 			if (flags & (BLOCK_ABORT | BLOCK_ERROR)) {
 				ret |= flags & (BLOCK_ABORT | BLOCK_ERROR);
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	} else {
 		for (i = 0; i < limit; i++, block_nr++) {
+			blk_t b;
 			if (*block_nr == 0) {
 				ctx->bcount += limit*limit;
 				continue;
 			}
-			flags = block_iterate_dind(block_nr,
+			b = *block_nr;
+			flags = block_iterate_dind(&b,
 						   *tind_block,
 						   offset, ctx);
+			*block_nr = b;
 			changed |= flags;
 			if (flags & (BLOCK_ABORT | BLOCK_ERROR)) {
 				ret |= flags & (BLOCK_ABORT | BLOCK_ERROR);
 				break;
 			}
-			offset += sizeof(blk_t);
+			offset += sizeof(pblk_t);
 		}
 	}
 	if (changed & BLOCK_CHANGED) {
@@ -278,7 +295,7 @@
 	int	i;
 	int	got_inode = 0;
 	int	ret = 0;
-	blk_t	blocks[EXT2_N_BLOCKS];	/* directory data blocks */
+	pblk_t	blocks[EXT2_N_BLOCKS];	/* directory data blocks */
 	struct ext2_inode inode;
 	errcode_t	retval;
 	struct block_context ctx;
Index: e2fsprogs-upstream/lib/ext2fs/bmap.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/bmap.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/bmap.c	2006-05-18 17:14:42.000000000 +0200
@@ -56,11 +56,11 @@
 		    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
 			b = ext2fs_swab32(b);
 #endif
-		((blk_t *) block_buf)[nr] = b;
+		((pblk_t *) block_buf)[nr] = b;
 		return io_channel_write_blk(fs->io, ind, 1, block_buf);
 	}
 
-	b = ((blk_t *) block_buf)[nr];
+	b = ((pblk_t *) block_buf)[nr];
 
 #ifdef EXT2FS_ENABLE_SWAPFS
 	if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
@@ -69,7 +69,7 @@
 #endif
 
 	if (!b && (flags & BMAP_ALLOC)) {
-		b = nr ? ((blk_t *) block_buf)[nr-1] : 0;
+		b = nr ? ((pblk_t *) block_buf)[nr-1] : 0;
 		retval = ext2fs_alloc_block(fs, b,
 					    block_buf + fs->blocksize, &b);
 		if (retval)
@@ -78,10 +78,10 @@
 #ifdef EXT2FS_ENABLE_SWAPFS
 		if ((fs->flags & EXT2_FLAG_SWAP_BYTES) ||
 		    (fs->flags & EXT2_FLAG_SWAP_BYTES_WRITE))
-			((blk_t *) block_buf)[nr] = ext2fs_swab32(b);
+			((pblk_t *) block_buf)[nr] = ext2fs_swab32(b);
 		else
 #endif
-			((blk_t *) block_buf)[nr] = b;
+			((pblk_t *) block_buf)[nr] = b;
 
 		retval = io_channel_write_blk(fs->io, ind, 1, block_buf);
 		if (retval)
Index: e2fsprogs-upstream/lib/ext2fs/ext2fs.h
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/ext2fs.h	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/ext2fs.h	2006-05-18 17:14:42.000000000 +0200
@@ -72,6 +72,7 @@
 
 typedef __u32		ext2_ino_t;
 typedef __u32		blk_t;
+typedef __u32		pblk_t;
 typedef __u32		dgrp_t;
 typedef __u32		ext2_off_t;
 typedef __s64		e2_blkcnt_t;
@@ -217,7 +218,7 @@
 	int				inode_blocks_per_group;
 	ext2fs_inode_bitmap		inode_map;
 	ext2fs_block_bitmap		block_map;
-	errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
+	errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, pblk_t *blocks);
 	errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino);
 	errcode_t (*write_bitmaps)(ext2_filsys fs);
 	errcode_t (*read_inode)(ext2_filsys fs, ext2_ino_t ino,
@@ -498,10 +499,10 @@
 extern errcode_t ext2fs_u32_list_create(ext2_u32_list *ret, int size);
 extern errcode_t ext2fs_u32_list_add(ext2_u32_list bb, __u32 blk);
 extern int ext2fs_u32_list_find(ext2_u32_list bb, __u32 blk);
-extern int ext2fs_u32_list_test(ext2_u32_list bb, blk_t blk);
+extern int ext2fs_u32_list_test(ext2_u32_list bb, pblk_t blk);
 extern errcode_t ext2fs_u32_list_iterate_begin(ext2_u32_list bb,
 					       ext2_u32_iterate *ret);
-extern int ext2fs_u32_list_iterate(ext2_u32_iterate iter, blk_t *blk);
+extern int ext2fs_u32_list_iterate(ext2_u32_iterate iter, pblk_t *blk);
 extern void ext2fs_u32_list_iterate_end(ext2_u32_iterate iter);
 extern errcode_t ext2fs_u32_copy(ext2_u32_list src, ext2_u32_list *dest);
 extern int ext2fs_u32_list_equal(ext2_u32_list bb1, ext2_u32_list bb2);
@@ -591,7 +592,7 @@
 extern errcode_t ext2fs_bmap(ext2_filsys fs, ext2_ino_t ino,
 			     struct ext2_inode *inode, 
 			     char *block_buf, int bmap_flags,
-			     blk_t block, blk_t *phys_blk);
+			     blk_t block, pblk_t *phys_blk);
 
 
 #if 0
@@ -824,7 +825,7 @@
 			    struct ext2_inode * inode);
 extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
 			    struct ext2_inode * inode);
-extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
+extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, pblk_t *blocks);
 extern errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino);
 
 /* inode_io.c */
Index: e2fsprogs-upstream/debugfs/debugfs.c
===================================================================
--- e2fsprogs-upstream.orig/debugfs/debugfs.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/debugfs/debugfs.c	2006-05-18 17:14:42.000000000 +0200
@@ -1673,7 +1673,8 @@
 void do_bmap(int argc, char *argv[])
 {
 	ext2_ino_t	ino;
-	blk_t		blk, pblk;
+	blk_t		blk;
+	pblk_t		pblk;
 	int		err;
 	errcode_t	errcode;
 	
Index: e2fsprogs-upstream/resize/resize2fs.c
===================================================================
--- e2fsprogs-upstream.orig/resize/resize2fs.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/resize/resize2fs.c	2006-05-18 17:14:42.000000000 +0200
@@ -898,7 +898,8 @@
 
 static errcode_t block_mover(ext2_resize_t rfs)
 {
-	blk_t			blk, old_blk, new_blk;
+	blk_t			blk;
+	pblk_t			old_blk, new_blk;
 	ext2_filsys		fs = rfs->new_fs;
 	ext2_filsys		old_fs = rfs->old_fs;
 	errcode_t		retval;
Index: e2fsprogs-upstream/lib/ext2fs/inode.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/inode.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/inode.c	2006-05-18 17:14:42.000000000 +0200
@@ -107,7 +107,7 @@
 {
 	ext2_inode_scan	scan;
 	errcode_t	retval;
-	errcode_t (*save_get_blocks)(ext2_filsys f, ext2_ino_t ino, blk_t *blocks);
+	errcode_t (*save_get_blocks)(ext2_filsys f, ext2_ino_t ino, pblk_t *blocks);
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
@@ -753,7 +753,7 @@
 }
 
  
-errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks)
+errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, pblk_t *blocks)
 {
 	struct ext2_inode	inode;
 	int			i;
Index: e2fsprogs-upstream/lib/ext2fs/bb_inode.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/bb_inode.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/bb_inode.c	2006-05-18 17:14:42.000000000 +0200
@@ -33,7 +33,7 @@
 struct set_badblock_record {
 	ext2_badblocks_iterate	bb_iter;
 	int		bad_block_count;
-	blk_t		*ind_blocks;
+	pblk_t		*ind_blocks;
 	int		max_ind_blocks;
 	int		ind_blocks_size;
 	int		ind_blocks_ptr;
@@ -68,11 +68,11 @@
 	rec.bad_block_count = 0;
 	rec.ind_blocks_size = rec.ind_blocks_ptr = 0;
 	rec.max_ind_blocks = 10;
-	retval = ext2fs_get_mem(rec.max_ind_blocks * sizeof(blk_t),
+	retval = ext2fs_get_mem(rec.max_ind_blocks * sizeof(pblk_t),
 				&rec.ind_blocks);
 	if (retval)
 		return retval;
-	memset(rec.ind_blocks, 0, rec.max_ind_blocks * sizeof(blk_t));
+	memset(rec.ind_blocks, 0, rec.max_ind_blocks * sizeof(pblk_t));
 	retval = ext2fs_get_mem(fs->blocksize, &rec.block_buf);
 	if (retval)
 		goto cleanup;
@@ -174,10 +174,10 @@
 
 	if (blockcnt < 0) {
 		if (rec->ind_blocks_size >= rec->max_ind_blocks) {
-			old_size = rec->max_ind_blocks * sizeof(blk_t);
+			old_size = rec->max_ind_blocks * sizeof(pblk_t);
 			rec->max_ind_blocks += 10;
 			retval = ext2fs_resize_mem(old_size, 
-				   rec->max_ind_blocks * sizeof(blk_t),
+				   rec->max_ind_blocks * sizeof(pblk_t),
 				   &rec->ind_blocks);
 			if (retval) {
 				rec->max_ind_blocks -= 10;
Index: e2fsprogs-upstream/e2fsck/journal.c
===================================================================
--- e2fsprogs-upstream.orig/e2fsck/journal.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/e2fsck/journal.c	2006-05-18 17:14:42.000000000 +0200
@@ -51,7 +51,7 @@
 #else
 	struct inode 	*inode = journal->j_inode;
 	errcode_t	retval;
-	blk_t		pblk;
+	pblk_t		pblk;
 
 	if (!inode) {
 		*phys = block;
Index: e2fsprogs-upstream/e2fsck/super.c
===================================================================
--- e2fsprogs-upstream.orig/e2fsck/super.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/e2fsck/super.c	2006-05-18 17:14:42.000000000 +0200
@@ -114,7 +114,7 @@
 		 */
 		if (blockcnt < 0) {
 			int	i, limit;
-			blk_t	*bp;
+			pblk_t	*bp;
 			
 			pb->errcode = io_channel_read_blk(fs->io, blk, 1,
 							pb->buf);
@@ -122,7 +122,7 @@
 				goto return_abort;
 
 			limit = fs->blocksize >> 2;
-			for (i = 0, bp = (blk_t *) pb->buf;
+			for (i = 0, bp = (pblk_t *) pb->buf;
 			     i < limit;	 i++, bp++)
 				if (*bp)
 					return 0;
Index: e2fsprogs-upstream/e2fsck/pass1.c
===================================================================
--- e2fsprogs-upstream.orig/e2fsck/pass1.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/e2fsck/pass1.c	2006-05-18 17:14:42.000000000 +0200
@@ -2060,7 +2060,7 @@
  * the inode again.
  */
 static errcode_t pass1_get_blocks(ext2_filsys fs, ext2_ino_t ino,
-				  blk_t *blocks)
+				  pblk_t *blocks)
 {
 	e2fsck_t ctx = (e2fsck_t) fs->priv_data;
 	int	i;
Index: e2fsprogs-upstream/lib/ext2fs/ind_block.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/ind_block.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/ind_block.c	2006-05-18 17:14:42.000000000 +0200
@@ -22,7 +22,7 @@
 errcode_t ext2fs_read_ind_block(ext2_filsys fs, blk_t blk, void *buf)
 {
 	errcode_t	retval;
-	blk_t		*block_nr;
+	pblk_t		*block_nr;
 	int		i;
 	int		limit = fs->blocksize >> 2;
 
@@ -36,7 +36,7 @@
 	}
 #ifdef EXT2FS_ENABLE_SWAPFS
 	if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_READ)) {
-		block_nr = (blk_t *) buf;
+		block_nr = (pblk_t *) buf;
 		for (i = 0; i < limit; i++, block_nr++)
 			*block_nr = ext2fs_swab32(*block_nr);
 	}
@@ -46,7 +46,7 @@
 
 errcode_t ext2fs_write_ind_block(ext2_filsys fs, blk_t blk, void *buf)
 {
-	blk_t		*block_nr;
+	pblk_t		*block_nr;
 	int		i;
 	int		limit = fs->blocksize >> 2;
 
@@ -55,7 +55,7 @@
 
 #ifdef EXT2FS_ENABLE_SWAPFS
 	if (fs->flags & (EXT2_FLAG_SWAP_BYTES | EXT2_FLAG_SWAP_BYTES_WRITE)) {
-		block_nr = (blk_t *) buf;
+		block_nr = (pblk_t *) buf;
 		for (i = 0; i < limit; i++, block_nr++)
 			*block_nr = ext2fs_swab32(*block_nr);
 	}
Index: e2fsprogs-upstream/misc/e2image.c
===================================================================
--- e2fsprogs-upstream.orig/misc/e2image.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/misc/e2image.c	2006-05-18 17:14:42.000000000 +0200
@@ -165,7 +165,7 @@
 
 static errcode_t meta_get_blocks(ext2_filsys fs EXT2FS_ATTR((unused)), 
 				 ext2_ino_t ino,
-				 blk_t *blocks)
+				 pblk_t *blocks)
 {
 	int	i;
 	
Index: e2fsprogs-upstream/lib/ext2fs/badblocks.c
===================================================================
--- e2fsprogs-upstream.orig/lib/ext2fs/badblocks.c	2006-05-18 16:35:44.000000000 +0200
+++ e2fsprogs-upstream/lib/ext2fs/badblocks.c	2006-05-18 17:14:42.000000000 +0200
@@ -42,15 +42,15 @@
 	bb->magic = EXT2_ET_MAGIC_BADBLOCKS_LIST;
 	bb->size = size ? size : 10;
 	bb->num = num;
-	retval = ext2fs_get_mem(bb->size * sizeof(blk_t), &bb->list);
+	retval = ext2fs_get_mem(bb->size * sizeof(pblk_t), &bb->list);
 	if (!bb->list) {
 		ext2fs_free_mem(&bb);
 		return retval;
 	}
 	if (list)
-		memcpy(bb->list, list, bb->size * sizeof(blk_t));
+		memcpy(bb->list, list, bb->size * sizeof(pblk_t));
 	else
-		memset(bb->list, 0, bb->size * sizeof(blk_t));
+		memset(bb->list, 0, bb->size * sizeof(pblk_t));
 	*ret = bb;
 	return 0;
 }
@@ -310,7 +310,7 @@
 	if (bb1->num != bb2->num)
 		return 0;
 
-	if (memcmp(bb1->list, bb2->list, bb1->num * sizeof(blk_t)) != 0)
+	if (memcmp(bb1->list, bb2->list, bb1->num * sizeof(pblk_t)) != 0)
 		return 0;
 	return 1;
 }
Index: e2fsprogs-upstream/debugfs/set_fields.c
===================================================================
--- e2fsprogs-upstream.orig/debugfs/set_fields.c	2006-05-18 16:35:55.000000000 +0200
+++ e2fsprogs-upstream/debugfs/set_fields.c	2006-05-18 17:14:42.000000000 +0200
@@ -329,7 +329,7 @@
 static errcode_t parse_bmap(struct field_set_info *info, char *arg)
 {
 	unsigned long	num;
-	blk_t		blk;
+	pblk_t		blk;
 	errcode_t	retval;
 	char		*tmp;
 


-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&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.