diff options
Diffstat (limited to 'fs/ext4')
| -rw-r--r-- | fs/ext4/dev.c | 1 | ||||
| -rw-r--r-- | fs/ext4/ext4_common.c | 14 | ||||
| -rw-r--r-- | fs/ext4/ext4_journal.c | 3 | ||||
| -rw-r--r-- | fs/ext4/ext4fs.c | 13 | 
4 files changed, 18 insertions, 13 deletions
| diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c index 1596a92b9..464a67d53 100644 --- a/fs/ext4/dev.c +++ b/fs/ext4/dev.c @@ -52,6 +52,7 @@ void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)  	part_info = info;  	part_offset = info->start;  	get_fs()->total_sect = (info->size * info->blksz) / SECTOR_SIZE; +	get_fs()->dev_desc = rbdd;  }  int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index 323875fa9..f12b8056c 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -378,7 +378,6 @@ void ext4fs_update_parent_dentry(char *filename, int *p_ino, int file_type)  	struct ext_filesystem *fs = get_fs();  	/* directory entry */  	struct ext2_dirent *dir; -	char *ptr = NULL;  	char *temp_dir = NULL;  	zero_buffer = zalloc(fs->blksz); @@ -415,7 +414,6 @@ restart:  	if (ext4fs_log_journal(root_first_block_buffer, first_block_no_of_root))  		goto fail;  	dir = (struct ext2_dirent *)root_first_block_buffer; -	ptr = (char *)dir;  	totalbytes = 0;  	while (dir->direntlen > 0) {  		/* @@ -483,14 +481,12 @@ restart:  			break;  		dir = (struct ext2_dirent *)((char *)dir + templength); -		ptr = (char *)dir;  	}  	/* make a pointer ready for creating next directory entry */  	templength = dir->direntlen;  	totalbytes = totalbytes + templength;  	dir = (struct ext2_dirent *)((char *)dir + templength); -	ptr = (char *)dir;  	/* get the next available inode number */  	inodeno = ext4fs_get_new_inode_no(); @@ -1200,6 +1196,11 @@ static void alloc_double_indirect_block(struct ext2_inode *file_inode,  		status = ext4fs_devread(di_blockno_parent *  					fs->sect_perblk, 0,  					fs->blksz, (char *)di_parent_buffer); + +		if (!status) { +			printf("%s: Device read error!\n", __func__); +			goto fail; +		}  		memset(di_parent_buffer, '\0', fs->blksz);  		/* @@ -1227,6 +1228,11 @@ static void alloc_double_indirect_block(struct ext2_inode *file_inode,  						fs->sect_perblk, 0,  						fs->blksz,  						(char *)di_child_buff); + +			if (!status) { +				printf("%s: Device read error!\n", __func__); +				goto fail; +			}  			memset(di_child_buff, '\0', fs->blksz);  			/* filling of actual datablocks for each child */  			for (j = 0; j < (fs->blksz / sizeof(int)); j++) { diff --git a/fs/ext4/ext4_journal.c b/fs/ext4/ext4_journal.c index 8a252d66c..9f017084f 100644 --- a/fs/ext4/ext4_journal.c +++ b/fs/ext4/ext4_journal.c @@ -410,7 +410,7 @@ int ext4fs_check_journal_state(int recovery_flag)  	int transaction_state = TRANSACTION_COMPLETE;  	int prev_desc_logical_no = 0;  	int curr_desc_logical_no = 0; -	int ofs, flags, block; +	int ofs, flags;  	struct ext2_inode inode_journal;  	struct journal_superblock_t *jsb = NULL;  	struct journal_header_t *jdb = NULL; @@ -453,7 +453,6 @@ int ext4fs_check_journal_state(int recovery_flag)  	i = be32_to_cpu(jsb->s_first);  	while (1) { -		block = be32_to_cpu(jsb->s_first);  		blknr = read_allocated_block(&inode_journal, i);  		memset(temp_buff1, '\0', fs->blksz);  		ext4fs_devread(blknr * fs->sect_perblk, diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c index 06536baf6..f02c215cc 100644 --- a/fs/ext4/ext4fs.c +++ b/fs/ext4/ext4fs.c @@ -40,6 +40,7 @@  #include <linux/stat.h>  #include <linux/time.h>  #include <asm/byteorder.h> +#include <div64.h>  #include "ext4_common.h"  int ext4fs_symlinknest; @@ -930,7 +931,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode,  	int previous_block_number = -1;  	int delayed_start = 0;  	int delayed_extent = 0; -	int delayed_skipfirst = 0;  	int delayed_next = 0;  	char *delayed_buf = NULL; @@ -963,7 +963,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode,  					previous_block_number = blknr;  					delayed_start = blknr;  					delayed_extent = blockend; -					delayed_skipfirst = skipfirst;  					delayed_buf = buf;  					delayed_next = blknr +  					    (blockend >> SECTOR_BITS); @@ -972,7 +971,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode,  				previous_block_number = blknr;  				delayed_start = blknr;  				delayed_extent = blockend; -				delayed_skipfirst = skipfirst;  				delayed_buf = buf;  				delayed_next = blknr +  				    (blockend >> SECTOR_BITS); @@ -1013,8 +1011,6 @@ int ext4fs_write(const char *fname, unsigned char *buffer,  	unsigned int blks_reqd_for_file;  	unsigned int blocks_remaining;  	int existing_file_inodeno; -	char filename[256]; -  	char *temp_ptr = NULL;  	long int itable_blkno;  	long int parent_itable_blkno; @@ -1023,6 +1019,9 @@ int ext4fs_write(const char *fname, unsigned char *buffer,  	unsigned int inodes_per_block;  	unsigned int ibmap_idx;  	struct ext_filesystem *fs = get_fs(); +	ALLOC_CACHE_ALIGN_BUFFER(char, filename, 256); +	memset(filename, 0x00, sizeof(filename)); +  	g_parent_inode = zalloc(sizeof(struct ext2_inode));  	if (!g_parent_inode)  		goto fail; @@ -1051,8 +1050,8 @@ int ext4fs_write(const char *fname, unsigned char *buffer,  	}  	/* calucalate how many blocks required */  	bytes_reqd_for_file = sizebytes; -	blks_reqd_for_file = bytes_reqd_for_file / fs->blksz; -	if (bytes_reqd_for_file % fs->blksz != 0) { +	blks_reqd_for_file = lldiv(bytes_reqd_for_file, fs->blksz); +	if (do_div(bytes_reqd_for_file, fs->blksz) != 0) {  		blks_reqd_for_file++;  		debug("total bytes for a file %u\n", blks_reqd_for_file);  	} |