[haiku-commits] Change in haiku[master]: kernel/devfs: improve devfs_compute_geometry_size

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 25 Jun 2022 07:50:07 +0000

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

Other related posts:

  • » [haiku-commits] Change in haiku[master]: kernel/devfs: improve devfs_compute_geometry_size - Gerrit