Re: [PATCH] Always return last partition end address in 512B blocks

Started by Jes Sorensen on Dec 12, 2016

open the first message on its own page

Message details and related content
Mariusz Dabrowski [off-list ref] writes:
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 <redacted>
---
 util.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
I am a little wary of this since I don't have any 4k sector drivers to
test with, so I will come yelling at you if this breaks something :)
quoted hunk
diff --git a/util.c b/util.c
index 883eaa4..46c1280 100644
--- a/util.c
+++ b/util.c
@@ -1430,6 +1430,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;
@@ -1469,6 +1470,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, &sector_size))
+		*endofpart *= sector_size/512;
I really would prefer to see a parenthesis around this here and use of
proper spacing.

Thanks,
Jes
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help