one more try
This commit is contained in:
		
							parent
							
								
									19ae768613
								
							
						
					
					
						commit
						a26ad97750
					
				| @ -2,29 +2,107 @@ Index: e2fsprogs-1.40.7/resize/resize2fs.c | |||||||
| ===================================================================
 | ===================================================================
 | ||||||
| --- e2fsprogs-1.40.7.orig/resize/resize2fs.c
 | --- e2fsprogs-1.40.7.orig/resize/resize2fs.c
 | ||||||
| +++ e2fsprogs-1.40.7/resize/resize2fs.c
 | +++ e2fsprogs-1.40.7/resize/resize2fs.c
 | ||||||
| @@ -1168,11 +1168,12 @@ static errcode_t inode_scan_and_fix(ext2
 | @@ -1109,8 +1109,7 @@ static errcode_t inode_scan_and_fix(ext2
 | ||||||
|  |  { | ||||||
|  |  	struct process_block_struct	pb; | ||||||
|  |  	ext2_ino_t		ino, new_inode; | ||||||
|  | -	struct ext2_inode 	inode, *buf = NULL;
 | ||||||
|  | -	struct ext2_inode_large	*large_inode;
 | ||||||
|  | +	struct ext2_inode 	*inode = NULL;
 | ||||||
|  |  	ext2_inode_scan 	scan = NULL; | ||||||
|  |  	errcode_t		retval; | ||||||
|  |  	int			group; | ||||||
|  | @@ -1154,12 +1153,12 @@ static errcode_t inode_scan_and_fix(ext2
 | ||||||
|  |  	} | ||||||
|  |  	ext2fs_set_inode_callback(scan, progress_callback, (void *) rfs); | ||||||
|  |  	pb.rfs = rfs; | ||||||
|  | -	pb.inode = &inode;
 | ||||||
|  | +	pb.inode = inode;
 | ||||||
|  |  	pb.error = 0; | ||||||
|  |  	new_inode = EXT2_FIRST_INODE(rfs->new_fs->super); | ||||||
|  |  	inode_size = EXT2_INODE_SIZE(rfs->new_fs->super); | ||||||
|  | -	buf = malloc(inode_size);
 | ||||||
|  | -	if (!buf) {
 | ||||||
|  | +	inode = malloc(inode_size);
 | ||||||
|  | +	if (!inode) {
 | ||||||
|  |  		retval = ENOMEM; | ||||||
|  |  		goto errout; | ||||||
|  |  	} | ||||||
|  | @@ -1168,29 +1167,29 @@ static errcode_t inode_scan_and_fix(ext2
 | ||||||
|  	 * elsewhere in the inode table |  	 * elsewhere in the inode table | ||||||
|  	 */ |  	 */ | ||||||
|  	while (1) { |  	while (1) { | ||||||
| -		retval = ext2fs_get_next_inode(scan, &ino, &inode);
 | -		retval = ext2fs_get_next_inode(scan, &ino, &inode);
 | ||||||
| +		retval = ext2fs_get_next_inode_full(scan, &ino, buf, inode_size);
 | +		retval = ext2fs_get_next_inode_full(scan, &ino, inode, inode_size);
 | ||||||
|  		if (retval) goto errout; |  		if (retval) goto errout; | ||||||
|  		if (!ino) |  		if (!ino) | ||||||
|  			break; |  			break; | ||||||
|   |   | ||||||
| +		memcpy(&inode, buf, sizeof(struct ext2_inode));
 | -		if (inode.i_links_count == 0 && ino != EXT2_RESIZE_INO)
 | ||||||
|  		if (inode.i_links_count == 0 && ino != EXT2_RESIZE_INO) | +		if (inode->i_links_count == 0 && ino != EXT2_RESIZE_INO)
 | ||||||
|  			continue; /* inode not in use */ |  			continue; /* inode not in use */ | ||||||
|   |   | ||||||
| @@ -1221,10 +1222,7 @@ static errcode_t inode_scan_and_fix(ext2
 | -		pb.is_dir = LINUX_S_ISDIR(inode.i_mode);
 | ||||||
|  | +		pb.is_dir = LINUX_S_ISDIR(inode->i_mode);
 | ||||||
|  |  		pb.changed = 0; | ||||||
|  |   | ||||||
|  | -		if (inode.i_file_acl && rfs->bmap) {
 | ||||||
|  | +		if (inode->i_file_acl && rfs->bmap) {
 | ||||||
|  |  			new_block = ext2fs_extent_translate(rfs->bmap,  | ||||||
|  | -							    inode.i_file_acl);
 | ||||||
|  | +							    inode->i_file_acl);
 | ||||||
|  |  			if (new_block) { | ||||||
|  | -				inode.i_file_acl = new_block;
 | ||||||
|  | -				retval = ext2fs_write_inode(rfs->old_fs, 
 | ||||||
|  | -							    ino, &inode);
 | ||||||
|  | +				inode->i_file_acl = new_block;
 | ||||||
|  | +				retval = ext2fs_write_inode_full(rfs->old_fs, 
 | ||||||
|  | +							    ino, inode, inode_size);
 | ||||||
|  |  				if (retval) goto errout; | ||||||
|  |  			} | ||||||
|  |  		} | ||||||
|  |  		 | ||||||
|  | -		if (ext2fs_inode_has_valid_blocks(&inode) &&
 | ||||||
|  | +		if (ext2fs_inode_has_valid_blocks(inode) &&
 | ||||||
|  |  		    (rfs->bmap || pb.is_dir)) { | ||||||
|  |  			pb.ino = ino; | ||||||
|  |  			retval = ext2fs_block_iterate2(rfs->old_fs, | ||||||
|  | @@ -1221,23 +1220,19 @@ static errcode_t inode_scan_and_fix(ext2
 | ||||||
|  			} |  			} | ||||||
|  		} |  		} | ||||||
|  		ext2fs_mark_inode_bitmap(rfs->new_fs->inode_map, new_inode); |  		ext2fs_mark_inode_bitmap(rfs->new_fs->inode_map, new_inode); | ||||||
| -		memcpy(buf, &inode, sizeof(struct ext2_inode));
 | -		memcpy(buf, &inode, sizeof(struct ext2_inode));
 | ||||||
|  		large_inode = (struct ext2_inode_large *)buf; | -		large_inode = (struct ext2_inode_large *)buf;
 | ||||||
| -		large_inode->i_extra_isize = sizeof(struct ext2_inode_large) -
 | -		large_inode->i_extra_isize = sizeof(struct ext2_inode_large) -
 | ||||||
| -			EXT2_GOOD_OLD_INODE_SIZE;
 | -			EXT2_GOOD_OLD_INODE_SIZE;
 | ||||||
|  		if (pb.changed) { |  		if (pb.changed) { | ||||||
|  			/* Get the new version of the inode */ |  			/* Get the new version of the inode */ | ||||||
|  			retval = ext2fs_read_inode_full(rfs->old_fs, ino, |  			retval = ext2fs_read_inode_full(rfs->old_fs, ino, | ||||||
|  | -						buf, inode_size);
 | ||||||
|  | +						inode, inode_size);
 | ||||||
|  |  			if (retval) goto errout; | ||||||
|  |  		} | ||||||
|  | -		inode.i_ctime = time(0);
 | ||||||
|  | +		inode->i_ctime = time(0);
 | ||||||
|  |  		retval = ext2fs_write_inode_full(rfs->old_fs, new_inode, | ||||||
|  | -						buf, inode_size);
 | ||||||
|  | +						inode, inode_size);
 | ||||||
|  |  		if (retval) goto errout; | ||||||
|  |   | ||||||
|  |  		group = (new_inode-1) / EXT2_INODES_PER_GROUP(rfs->new_fs->super); | ||||||
|  | -		if (LINUX_S_ISDIR(inode.i_mode))
 | ||||||
|  | +		if (LINUX_S_ISDIR(inode->i_mode))
 | ||||||
|  |  			rfs->new_fs->group_desc[group].bg_used_dirs_count++; | ||||||
|  |  		 | ||||||
|  |  #ifdef RESIZE2FS_DEBUG | ||||||
|  | @@ -1263,8 +1258,8 @@ errout:
 | ||||||
|  |  		ext2fs_close_inode_scan(scan); | ||||||
|  |  	if (block_buf) | ||||||
|  |  		ext2fs_free_mem(&block_buf); | ||||||
|  | -	if (buf)
 | ||||||
|  | -		free(buf);
 | ||||||
|  | +	if (inode)
 | ||||||
|  | +		free(inode);
 | ||||||
|  |  	return retval; | ||||||
|  |  } | ||||||
|   |   | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user