[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