@ -71,18 +71,18 @@ void put_ext4(uint64_t off, void *buf, uint32_t size)
uint64_t startblock ;
uint64_t remainder ;
unsigned char * temp_ptr = NULL ;
ALLOC_CACHE_ALIGN_BUFFER ( unsigned char , sec_buf , SECTOR_SIZE ) ;
struct ext_filesystem * fs = get_fs ( ) ;
int log2blksz = fs - > dev_desc - > log2blksz ;
ALLOC_CACHE_ALIGN_BUFFER ( unsigned char , sec_buf , fs - > dev_desc - > blksz ) ;
startblock = off / ( uint64_t ) SECTOR_SIZE ;
startblock = off > > log2blksz ;
startblock + = part_offset ;
remainder = off % ( uint64_t ) SECTOR_SIZE ;
remainder & = SECTOR_SIZE - 1 ;
remainder = off & ( uint64_t ) ( fs - > dev_desc - > blksz - 1 ) ;
if ( fs - > dev_desc = = NULL )
return ;
if ( ( startblock + ( size / SECTOR_SIZE ) ) >
if ( ( startblock + ( size > > log2blksz ) ) >
( part_offset + fs - > total_sect ) ) {
printf ( " part_offset is %lu \n " , part_offset ) ;
printf ( " total_sector is %llu \n " , fs - > total_sect ) ;
@ -101,10 +101,10 @@ void put_ext4(uint64_t off, void *buf, uint32_t size)
startblock , 1 , sec_buf ) ;
}
} else {
if ( size / SECTOR_SIZE ! = 0 ) {
if ( size > > log2blksz ! = 0 ) {
fs - > dev_desc - > block_write ( fs - > dev_desc - > dev ,
startblock ,
size / SECTOR_SIZE ,
size > > log2blksz ,
( unsigned long * ) buf ) ;
} else {
fs - > dev_desc - > block_read ( fs - > dev_desc - > dev ,
@ -1459,6 +1459,7 @@ static int ext4fs_blockgroup
{
long int blkno ;
unsigned int blkoff , desc_per_blk ;
int log2blksz = get_fs ( ) - > dev_desc - > log2blksz ;
desc_per_blk = EXT2_BLOCK_SIZE ( data ) / sizeof ( struct ext2_block_group ) ;
@ -1469,7 +1470,7 @@ static int ext4fs_blockgroup
debug ( " ext4fs read %d group descriptor (blkno %ld blkoff %u) \n " ,
group , blkno , blkoff ) ;
return ext4fs_devread ( blkno < < LOG2_EXT 2_BLOCK_SIZE ( data ) ,
return ext4fs_devread ( blkno < < ( LOG2_BLOCK_SIZE ( data ) - log2blksz ) ,
blkoff , sizeof ( struct ext2_block_group ) ,
( char * ) blkgrp ) ;
}
@ -1479,6 +1480,7 @@ int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
struct ext2_block_group blkgrp ;
struct ext2_sblock * sblock = & data - > sblock ;
struct ext_filesystem * fs = get_fs ( ) ;
int log2blksz = get_fs ( ) - > dev_desc - > log2blksz ;
int inodes_per_block , status ;
long int blkno ;
unsigned int blkoff ;
@ -1495,7 +1497,8 @@ int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
( ino % __le32_to_cpu ( sblock - > inodes_per_group ) ) / inodes_per_block ;
blkoff = ( ino % inodes_per_block ) * fs - > inodesz ;
/* Read the inode. */
status = ext4fs_devread ( blkno < < LOG2_EXT2_BLOCK_SIZE ( data ) , blkoff ,
status = ext4fs_devread ( blkno < < ( LOG2_BLOCK_SIZE ( data ) - log2blksz ) ,
blkoff ,
sizeof ( struct ext2_inode ) , ( char * ) inode ) ;
if ( status = = 0 )
return 0 ;
@ -1515,7 +1518,9 @@ long int read_allocated_block(struct ext2_inode *inode, int fileblock)
unsigned long long start ;
/* get the blocksize of the filesystem */
blksz = EXT2_BLOCK_SIZE ( ext4fs_root ) ;
log2_blksz = LOG2_EXT2_BLOCK_SIZE ( ext4fs_root ) ;
log2_blksz = LOG2_BLOCK_SIZE ( ext4fs_root )
- get_fs ( ) - > dev_desc - > log2blksz ;
if ( le32_to_cpu ( inode - > flags ) & EXT4_EXTENTS_FL ) {
char * buf = zalloc ( blksz ) ;
if ( ! buf )
@ -1523,11 +1528,11 @@ long int read_allocated_block(struct ext2_inode *inode, int fileblock)
struct ext4_extent_header * ext_block ;
struct ext4_extent * extent ;
int i = - 1 ;
ext_block = ext4fs_get_extent_block ( ext4fs_root , buf ,
( struct ext4_extent_header
* ) inode - > b .
blocks . dir_blocks ,
fileblock , log2_blksz ) ;
ext_block =
ext4fs_get_extent_block ( ext4fs_root , buf ,
( struct ext4_extent_header * )
inode - > b . blocks . dir_blocks ,
fileblock , log2_blksz ) ;
if ( ! ext_block ) {
printf ( " invalid extent block \n " ) ;
free ( buf ) ;
@ -1839,7 +1844,7 @@ long int read_allocated_block(struct ext2_inode *inode, int fileblock)
blknr = __le32_to_cpu ( ext4fs_indir3_block
[ rblock % perblock_child ] ) ;
}
debug ( " ext4fs_rea d_block %ld\n " , blknr ) ;
debug ( " read_allocate d_block %ld\n " , blknr ) ;
return blknr ;
}
@ -2193,13 +2198,12 @@ int ext4fs_mount(unsigned part_length)
struct ext2_data * data ;
int status ;
struct ext_filesystem * fs = get_fs ( ) ;
data = zalloc ( sizeof ( struct ext2_data ) ) ;
data = zalloc ( SUPERBLOCK_SIZE ) ;
if ( ! data )
return 0 ;
/* Read the superblock. */
status = ext4fs_devread ( 1 * 2 , 0 , sizeof ( struct ext2_sblock ) ,
( char * ) & data - > sblock ) ;
status = ext4_read_superblock ( ( char * ) & data - > sblock ) ;
if ( status = = 0 )
goto fail ;