From: Mariusz Dabrowski Date: Tue, 13 Dec 2016 13:31:02 +0000 (+0100) Subject: Always return last partition end address in 512B blocks X-Git-Tag: mdadm-4.0~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=31208db97e7f9e8eac2a84bc1fd9770b8162baff;p=thirdparty%2Fmdadm.git Always return last partition end address in 512B blocks For 4K disks 'endofpart' is an index of the last 4K sector used by partition. mdadm is using number of 512-byte sectors, so value returned by get_last_partition_end must be multiplied by 8 for devices with 4K sectors. Also, unused 'ret' variable has been removed. Signed-off-by: Mariusz Dabrowski Signed-off-by: Jes Sorensen --- diff --git a/util.c b/util.c index 818f8392..f1009723 100644 --- a/util.c +++ b/util.c @@ -1435,6 +1435,7 @@ static int get_last_partition_end(int fd, unsigned long long *endofpart) struct MBR boot_sect; unsigned long long curr_part_end; unsigned part_nr; + unsigned int sector_size; int retval = 0; *endofpart = 0; @@ -1474,6 +1475,9 @@ static int get_last_partition_end(int fd, unsigned long long *endofpart) /* Unknown partition table */ retval = -1; } + /* calculate number of 512-byte blocks */ + if (get_dev_sector_size(fd, NULL, §or_size)) + *endofpart *= (sector_size / 512); abort: return retval; } @@ -1485,9 +1489,8 @@ int check_partitions(int fd, char *dname, unsigned long long freesize, * Check where the last partition ends */ unsigned long long endofpart; - int ret; - if ((ret = get_last_partition_end(fd, &endofpart)) > 0) { + if (get_last_partition_end(fd, &endofpart) > 0) { /* There appears to be a partition table here */ if (freesize == 0) { /* partitions will not be visible in new device */