diff --git a/src/system/kernel/device_manager/devfs.cpp b/src/system/kernel/device_manager/devfs.cpp index 66c41a5555..61d8d04a62 100644 --- a/src/system/kernel/device_manager/devfs.cpp +++ b/src/system/kernel/device_manager/devfs.cpp @@ -2254,13 +2254,14 @@ void 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; }