Avoid redundant file system maximize actions (#663980)
When GParted performed operations or combinations of operations, such as: a) copy to same or smaller size destination partition b) move to same or smaller size due to alignment change c) resize to smaller size a redundant maximize file system operation would occur. Normally these redundant maximize operations to grow the file system to take up all the space in the partition were not harmful. However in situations where libparted failed to inform the kernel of partition changes, then the extra maximize operation would grow the file system to be the original partition size. In cases where the original partition was larger than the new partition size, this caused problems because the file system would be larger than the partition on reboot. This enhancement avoids redundant file system maximize actions on copy, move, and resize, and should help reduce problems described in the following links: WARNING! Problem Resizing File Systems with GParted http://gparted-forum.surf4.info/viewtopic.php?id=13777 Bug #601574 - ERROR: Current NTFS volume size is bigger than the device size! Bug #604298 - Problems resizing file systems with gparted-live-0.5.0-3 Closes Bug #663980 - Avoid redundant file system maximize actions on copy, move, and resize
This commit is contained in:
parent
9309127876
commit
e8bdb5d704
|
@ -1829,10 +1829,16 @@ bool GParted_Core::move( const Device & device,
|
||||||
//Make new partition from all encompassing partition
|
//Make new partition from all encompassing partition
|
||||||
succes = succes && resize_move_partition( partition_all_space, partition_new, operationdetail ) ;
|
succes = succes && resize_move_partition( partition_all_space, partition_new, operationdetail ) ;
|
||||||
|
|
||||||
succes = succes &&
|
succes = ( succes
|
||||||
update_bootsector( partition_new, operationdetail ) &&
|
&& update_bootsector( partition_new, operationdetail )
|
||||||
check_repair_filesystem( partition_new, operationdetail ) &&
|
&& ( //Do not maximize file system if new size <= old
|
||||||
maximize_filesystem( partition_new, operationdetail ) ;
|
( partition_new .get_sector_length() <= partition_old .get_sector_length() )
|
||||||
|
|| ( check_repair_filesystem( partition_new, operationdetail )
|
||||||
|
&& maximize_filesystem( partition_new, operationdetail )
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return succes ;
|
return succes ;
|
||||||
|
@ -1972,16 +1978,18 @@ bool GParted_Core::resize( const Partition & partition_old,
|
||||||
|
|
||||||
if ( succes && partition_new .get_sector_length() < partition_old .get_sector_length() )
|
if ( succes && partition_new .get_sector_length() < partition_old .get_sector_length() )
|
||||||
succes = resize_filesystem( partition_old, partition_new, operationdetail ) ;
|
succes = resize_filesystem( partition_old, partition_new, operationdetail ) ;
|
||||||
|
|
||||||
if ( succes )
|
if ( succes )
|
||||||
succes = resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
succes = resize_move_partition( partition_old, partition_new, operationdetail ) ;
|
||||||
|
|
||||||
//these 2 are always executed, however, if 1 of them fails the whole operation fails
|
|
||||||
if ( ! check_repair_filesystem( partition_new, operationdetail ) )
|
|
||||||
succes = false ;
|
|
||||||
|
|
||||||
//expand file system to fit exactly in partition
|
//expand file system to fit exactly in partition
|
||||||
if ( ! maximize_filesystem( partition_new, operationdetail ) )
|
if ( ! ( //Do not maximize file system if new size <= old
|
||||||
|
( partition_new .get_sector_length() <= partition_old .get_sector_length() )
|
||||||
|
|| ( check_repair_filesystem( partition_new, operationdetail )
|
||||||
|
&& maximize_filesystem( partition_new, operationdetail )
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
succes = false ;
|
succes = false ;
|
||||||
|
|
||||||
return succes ;
|
return succes ;
|
||||||
|
@ -2300,10 +2308,15 @@ bool GParted_Core::copy( const Partition & partition_src,
|
||||||
|
|
||||||
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
|
||||||
|
|
||||||
return succes &&
|
return ( succes
|
||||||
update_bootsector( partition_dst, operationdetail ) &&
|
&& update_bootsector( partition_dst, operationdetail )
|
||||||
check_repair_filesystem( partition_dst, operationdetail ) &&
|
&& ( //Do not maximize file system if destination size <= source
|
||||||
maximize_filesystem( partition_dst, operationdetail ) ;
|
( partition_dst .get_sector_length() <= partition_src .get_sector_length() )
|
||||||
|
|| ( check_repair_filesystem( partition_dst, operationdetail )
|
||||||
|
&& maximize_filesystem( partition_dst, operationdetail )
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue