From Jérôme Duval <jerome.duval@xxxxxxxxx>:
Jérôme Duval has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/5398 ;)
Change subject: kernel/devfs: improve devfs_compute_geometry_size
......................................................................
kernel/devfs: improve devfs_compute_geometry_size
the old code could lead to an odd head count, thus a smaller partition size.
with power of two, this works at least accurately if the size is aligned.
we should probably introduce a new ioctl or extend the current one to avoid
this problem.
---
M src/system/kernel/device_manager/devfs.cpp
1 file changed, 6 insertions(+), 5 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/98/5398/1
diff --git a/src/system/kernel/device_manager/devfs.cpp
b/src/system/kernel/device_manager/devfs.cpp
index 66c41a5..61d8d04 100644
--- a/src/system/kernel/device_manager/devfs.cpp
+++ b/src/system/kernel/device_manager/devfs.cpp
@@ -2254,13 +2254,14 @@
devfs_compute_geometry_size(device_geometry* geometry, uint64 blockCount,
uint32 blockSize)
{
- if (blockCount > UINT32_MAX)
- geometry->head_count = (blockCount + UINT32_MAX - 1) /
UINT32_MAX;
- else
- geometry->head_count = 1;
+ geometry->head_count = 1;
+ while (blockCount > UINT32_MAX) {
+ geometry->head_count <<= 1;
+ blockCount >>= 1;
+ }
geometry->cylinder_count = 1;
- geometry->sectors_per_track = blockCount / geometry->head_count;
+ geometry->sectors_per_track = blockCount;
geometry->bytes_per_sector = blockSize;
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/5398
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ia6c034262b1756e901d6ad76ab17b278b2314631
Gerrit-Change-Number: 5398
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange