mirror of https://github.com/vitalif/e2fsprogs
libext2fs: More random 64-bit fixes, lots of block_iterate3
Signed-off-by: Valerie Aurora Henson <vaurora@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>bitmap-optimize
parent
ab13b5a979
commit
6d8b37fa76
|
@ -36,14 +36,14 @@ struct process_block_struct {
|
|||
int flags;
|
||||
};
|
||||
|
||||
static int process_block(ext2_filsys fs, blk_t *block_nr,
|
||||
e2_blkcnt_t blockcnt, blk_t ref_block,
|
||||
static int process_block(ext2_filsys fs, blk64_t *block_nr,
|
||||
e2_blkcnt_t blockcnt, blk64_t ref_block,
|
||||
int ref_offset, void *priv_data)
|
||||
{
|
||||
struct process_block_struct *pb;
|
||||
errcode_t retval;
|
||||
int ret;
|
||||
blk_t block, orig;
|
||||
blk64_t block, orig;
|
||||
|
||||
pb = (struct process_block_struct *) priv_data;
|
||||
block = orig = *block_nr;
|
||||
|
@ -77,12 +77,14 @@ static int process_block(ext2_filsys fs, blk_t *block_nr,
|
|||
ext2fs_mark_block_bitmap2(pb->alloc_map, block);
|
||||
ret = BLOCK_CHANGED;
|
||||
if (pb->flags & EXT2_BMOVE_DEBUG)
|
||||
printf("ino=%ld, blockcnt=%lld, %u->%u\n", pb->ino,
|
||||
blockcnt, orig, block);
|
||||
printf("ino=%u, blockcnt=%lld, %llu->%llu\n",
|
||||
(unsigned) pb->ino, blockcnt,
|
||||
(unsigned long long) orig,
|
||||
(unsigned long long) block);
|
||||
}
|
||||
if (pb->add_dir) {
|
||||
retval = ext2fs_add_dir_block(fs->dblist, pb->ino,
|
||||
block, (int) blockcnt);
|
||||
retval = ext2fs_add_dir_block2(fs->dblist, pb->ino,
|
||||
block, blockcnt);
|
||||
if (retval) {
|
||||
pb->error = retval;
|
||||
ret |= BLOCK_ABORT;
|
||||
|
@ -147,8 +149,8 @@ errcode_t ext2fs_move_blocks(ext2_filsys fs,
|
|||
pb.add_dir = (LINUX_S_ISDIR(inode.i_mode) &&
|
||||
flags & EXT2_BMOVE_GET_DBLIST);
|
||||
|
||||
retval = ext2fs_block_iterate2(fs, ino, 0, block_buf,
|
||||
process_block, &pb);
|
||||
retval = ext2fs_block_iterate3(fs, ino, 0, block_buf,
|
||||
process_block, &pb);
|
||||
if (retval)
|
||||
return retval;
|
||||
if (pb.error)
|
||||
|
|
|
@ -34,8 +34,8 @@ errcode_t ext2fs_check_desc(ext2_filsys fs)
|
|||
ext2fs_block_bitmap bmap;
|
||||
errcode_t retval;
|
||||
dgrp_t i;
|
||||
blk_t first_block = fs->super->s_first_data_block;
|
||||
blk_t last_block = ext2fs_blocks_count(fs->super)-1;
|
||||
blk64_t first_block = fs->super->s_first_data_block;
|
||||
blk64_t last_block = ext2fs_blocks_count(fs->super)-1;
|
||||
blk64_t blk, b;
|
||||
int j;
|
||||
|
||||
|
|
|
@ -25,15 +25,15 @@ struct expand_dir_struct {
|
|||
};
|
||||
|
||||
static int expand_dir_proc(ext2_filsys fs,
|
||||
blk_t *blocknr,
|
||||
blk64_t *blocknr,
|
||||
e2_blkcnt_t blockcnt,
|
||||
blk_t ref_block EXT2FS_ATTR((unused)),
|
||||
blk64_t ref_block EXT2FS_ATTR((unused)),
|
||||
int ref_offset EXT2FS_ATTR((unused)),
|
||||
void *priv_data)
|
||||
{
|
||||
struct expand_dir_struct *es = (struct expand_dir_struct *) priv_data;
|
||||
blk_t new_blk;
|
||||
static blk_t last_blk = 0;
|
||||
blk64_t new_blk;
|
||||
static blk64_t last_blk = 0;
|
||||
char *block;
|
||||
errcode_t retval;
|
||||
|
||||
|
@ -41,7 +41,7 @@ static int expand_dir_proc(ext2_filsys fs,
|
|||
last_blk = *blocknr;
|
||||
return 0;
|
||||
}
|
||||
retval = ext2fs_new_block(fs, last_blk, 0, &new_blk);
|
||||
retval = ext2fs_new_block2(fs, last_blk, 0, &new_blk);
|
||||
if (retval) {
|
||||
es->err = retval;
|
||||
return BLOCK_ABORT;
|
||||
|
@ -100,7 +100,7 @@ errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir)
|
|||
es.err = 0;
|
||||
es.newblocks = 0;
|
||||
|
||||
retval = ext2fs_block_iterate2(fs, dir, BLOCK_FLAG_APPEND,
|
||||
retval = ext2fs_block_iterate3(fs, dir, BLOCK_FLAG_APPEND,
|
||||
0, expand_dir_proc, &es);
|
||||
|
||||
if (es.err)
|
||||
|
|
|
@ -210,6 +210,7 @@ struct struct_ext2_filsys {
|
|||
int inode_blocks_per_group;
|
||||
ext2fs_inode_bitmap inode_map;
|
||||
ext2fs_block_bitmap block_map;
|
||||
/* XXX FIXME-64: not 64-bit safe, but not used? */
|
||||
errcode_t (*get_blocks)(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
|
||||
errcode_t (*check_directory)(ext2_filsys fs, ext2_ino_t ino);
|
||||
errcode_t (*write_bitmaps)(ext2_filsys fs);
|
||||
|
|
|
@ -285,7 +285,7 @@ errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
|
|||
struct ext3_extent_idx *ix = 0;
|
||||
struct ext3_extent *ex;
|
||||
errcode_t retval;
|
||||
blk_t blk;
|
||||
blk64_t blk;
|
||||
blk64_t end_blk;
|
||||
int orig_op, op;
|
||||
|
||||
|
@ -819,7 +819,7 @@ errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle,
|
|||
static errcode_t extent_node_split(ext2_extent_handle_t handle)
|
||||
{
|
||||
errcode_t retval = 0;
|
||||
blk_t new_node_pblk;
|
||||
blk64_t new_node_pblk;
|
||||
blk64_t new_node_start;
|
||||
blk64_t orig_lblk;
|
||||
blk64_t goal_blk = 0;
|
||||
|
@ -934,7 +934,7 @@ static errcode_t extent_node_split(ext2_extent_handle_t handle)
|
|||
goal_blk = (group * handle->fs->super->s_blocks_per_group) +
|
||||
handle->fs->super->s_first_data_block;
|
||||
}
|
||||
retval = ext2fs_alloc_block(handle->fs, (blk_t) goal_blk, block_buf,
|
||||
retval = ext2fs_alloc_block2(handle->fs, goal_blk, block_buf,
|
||||
&new_node_pblk);
|
||||
if (retval)
|
||||
goto done;
|
||||
|
|
|
@ -62,7 +62,7 @@ errcode_t ext2fs_image_inode_write(ext2_filsys fs, int fd, int flags)
|
|||
{
|
||||
unsigned int group, left, c, d;
|
||||
char *buf, *cp;
|
||||
blk_t blk;
|
||||
blk64_t blk;
|
||||
ssize_t actual;
|
||||
errcode_t retval;
|
||||
|
||||
|
@ -136,7 +136,7 @@ errcode_t ext2fs_image_inode_read(ext2_filsys fs, int fd,
|
|||
{
|
||||
unsigned int group, c, left;
|
||||
char *buf;
|
||||
blk_t blk;
|
||||
blk64_t blk;
|
||||
ssize_t actual;
|
||||
errcode_t retval;
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
|
|||
struct ext2_inode parent_inode, inode;
|
||||
ext2_ino_t ino = inum;
|
||||
ext2_ino_t scratch_ino;
|
||||
blk_t blk;
|
||||
blk64_t blk;
|
||||
char *block = 0;
|
||||
|
||||
EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
|
||||
|
@ -55,7 +55,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
|
|||
/*
|
||||
* Allocate a data block for the directory
|
||||
*/
|
||||
retval = ext2fs_new_block(fs, 0, 0, &blk);
|
||||
retval = ext2fs_new_block2(fs, 0, 0, &blk);
|
||||
if (retval)
|
||||
goto cleanup;
|
||||
|
||||
|
@ -83,6 +83,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum,
|
|||
inode.i_mode = LINUX_S_IFDIR | (0777 & ~fs->umask);
|
||||
inode.i_uid = inode.i_gid = 0;
|
||||
ext2fs_iblk_set(fs, &inode, 1);
|
||||
/* FIXME-64 */
|
||||
inode.i_block[0] = blk;
|
||||
inode.i_links_count = 2;
|
||||
inode.i_size = fs->blocksize;
|
||||
|
|
|
@ -210,29 +210,29 @@ errcode_t ext2fs_zero_blocks(ext2_filsys fs, blk_t blk, int num,
|
|||
struct mkjournal_struct {
|
||||
int num_blocks;
|
||||
int newblocks;
|
||||
blk_t goal;
|
||||
blk_t blk_to_zero;
|
||||
blk64_t goal;
|
||||
blk64_t blk_to_zero;
|
||||
int zero_count;
|
||||
char *buf;
|
||||
errcode_t err;
|
||||
};
|
||||
|
||||
static int mkjournal_proc(ext2_filsys fs,
|
||||
blk_t *blocknr,
|
||||
e2_blkcnt_t blockcnt,
|
||||
blk_t ref_block EXT2FS_ATTR((unused)),
|
||||
int ref_offset EXT2FS_ATTR((unused)),
|
||||
void *priv_data)
|
||||
blk64_t *blocknr,
|
||||
e2_blkcnt_t blockcnt,
|
||||
blk64_t ref_block EXT2FS_ATTR((unused)),
|
||||
int ref_offset EXT2FS_ATTR((unused)),
|
||||
void *priv_data)
|
||||
{
|
||||
struct mkjournal_struct *es = (struct mkjournal_struct *) priv_data;
|
||||
blk_t new_blk;
|
||||
blk64_t new_blk;
|
||||
errcode_t retval;
|
||||
|
||||
if (*blocknr) {
|
||||
es->goal = *blocknr;
|
||||
return 0;
|
||||
}
|
||||
retval = ext2fs_new_block(fs, es->goal, 0, &new_blk);
|
||||
retval = ext2fs_new_block2(fs, es->goal, 0, &new_blk);
|
||||
if (retval) {
|
||||
es->err = retval;
|
||||
return BLOCK_ABORT;
|
||||
|
@ -250,10 +250,10 @@ static int mkjournal_proc(ext2_filsys fs,
|
|||
(es->zero_count < 1024))
|
||||
es->zero_count++;
|
||||
else {
|
||||
retval = ext2fs_zero_blocks(fs,
|
||||
es->blk_to_zero,
|
||||
es->zero_count,
|
||||
0, 0);
|
||||
retval = ext2fs_zero_blocks2(fs,
|
||||
es->blk_to_zero,
|
||||
es->zero_count,
|
||||
0, 0);
|
||||
es->zero_count = 0;
|
||||
}
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ static int mkjournal_proc(ext2_filsys fs,
|
|||
* This function creates a journal using direct I/O routines.
|
||||
*/
|
||||
static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
|
||||
blk_t size, int flags)
|
||||
blk64_t size, int flags)
|
||||
{
|
||||
char *buf;
|
||||
dgrp_t group, start, end, i, log_flex;
|
||||
|
@ -344,14 +344,14 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
|
|||
es.goal = (fs->super->s_blocks_per_group * group) +
|
||||
fs->super->s_first_data_block;
|
||||
|
||||
retval = ext2fs_block_iterate2(fs, journal_ino, BLOCK_FLAG_APPEND,
|
||||
retval = ext2fs_block_iterate3(fs, journal_ino, BLOCK_FLAG_APPEND,
|
||||
0, mkjournal_proc, &es);
|
||||
if (es.err) {
|
||||
retval = es.err;
|
||||
goto errout;
|
||||
}
|
||||
if (es.zero_count) {
|
||||
retval = ext2fs_zero_blocks(fs, es.blk_to_zero,
|
||||
retval = ext2fs_zero_blocks2(fs, es.blk_to_zero,
|
||||
es.zero_count, 0, 0);
|
||||
if (retval)
|
||||
goto errout;
|
||||
|
|
|
@ -47,6 +47,7 @@ static errcode_t follow_link(ext2_filsys fs, ext2_ino_t root, ext2_ino_t dir,
|
|||
if (link_count++ > 5) {
|
||||
return EXT2_ET_SYMLINK_LOOP;
|
||||
}
|
||||
/* FIXME-64: Actually, this is FIXME EXTENTS */
|
||||
if (ext2fs_inode_data_blocks(fs,&ei)) {
|
||||
retval = ext2fs_get_mem(fs->blocksize, &buffer);
|
||||
if (retval)
|
||||
|
|
|
@ -93,7 +93,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
|||
unsigned long i, first_meta_bg;
|
||||
__u32 features;
|
||||
int groups_per_block, blocks_per_group, io_flags;
|
||||
blk_t group_block, blk;
|
||||
blk64_t group_block, blk;
|
||||
char *dest, *cp;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
struct ext2_group_desc *gdp;
|
||||
|
@ -327,7 +327,7 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
|||
dest += fs->blocksize*first_meta_bg;
|
||||
}
|
||||
for (i=first_meta_bg ; i < fs->desc_blocks; i++) {
|
||||
blk = ext2fs_descriptor_block_loc(fs, group_block, i);
|
||||
blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
|
||||
retval = io_channel_read_blk64(fs->io, blk, 1, dest);
|
||||
if (retval)
|
||||
goto cleanup;
|
||||
|
|
|
@ -49,7 +49,7 @@ static int mark_bad_block(ext2_filsys fs, blk_t *block_nr,
|
|||
return 0;
|
||||
|
||||
if ((*block_nr < fs->super->s_first_data_block) ||
|
||||
(*block_nr >= fs->super->s_blocks_count))
|
||||
(*block_nr >= ext2fs_blocks_count(fs->super)))
|
||||
return 0; /* Ignore illegal blocks */
|
||||
|
||||
rb->err = ext2fs_badblocks_list_add(rb->bb_list, *block_nr);
|
||||
|
|
|
@ -59,7 +59,7 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f,
|
|||
continue;
|
||||
if (fs &&
|
||||
((blockno < fs->super->s_first_data_block) ||
|
||||
(blockno >= fs->super->s_blocks_count))) {
|
||||
(blockno >= ext2fs_blocks_count(fs->super)))) {
|
||||
if (invalid)
|
||||
(invalid)(fs, blockno, buf, priv_data);
|
||||
continue;
|
||||
|
|
|
@ -65,6 +65,7 @@ errcode_t ext2fs_create_resize_inode(ext2_filsys fs)
|
|||
struct ext2_inode inode;
|
||||
__u32 *dindir_buf, *gdt_buf;
|
||||
unsigned long long apb, inode_size;
|
||||
/* FIXME-64 - can't deal with extents */
|
||||
blk_t dindir_blk, rsv_off, gdt_off, gdt_blk;
|
||||
int dindir_dirty = 0, inode_dirty = 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue