summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-06-30 21:16:06 +0200
committerAnton Kling <anton@kling.gg>2024-06-30 21:24:39 +0200
commite9be93974b24733f20502ce64c54b5ec749a0a3a (patch)
tree9224ca6047154af91981f151c4ea10dee8a25228
parent5f88cd153b67d2d94f9625f1f69fa67000ea782f (diff)
ahci/ext2: small fixes
-rw-r--r--kernel/drivers/ahci.c2
-rw-r--r--kernel/fs/ext2.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/kernel/drivers/ahci.c b/kernel/drivers/ahci.c
index 530295d..0d379cb 100644
--- a/kernel/drivers/ahci.c
+++ b/kernel/drivers/ahci.c
@@ -307,7 +307,7 @@ void ahci_wait_for_completion(volatile struct HBA_PORT *port) {
u32 num_slots = ((hba->cap >> 8) & 0x1F);
u32 slots = (port->ci);
u32 num_free = 0;
- for (; num_free < 10;) {
+ for (; num_free < num_slots;) {
num_free = 0;
for (u8 i = 0; i < num_slots + 1; i++) {
if (!((slots >> i) & 1)) {
diff --git a/kernel/fs/ext2.c b/kernel/fs/ext2.c
index ce1c6dd..1eeafce 100644
--- a/kernel/fs/ext2.c
+++ b/kernel/fs/ext2.c
@@ -559,10 +559,12 @@ int write_inode(int inode_num, u8 *data, u64 size, u64 offset, u64 *file_size,
u32 num_blocks_required = BLOCKS_REQUIRED(fsize, block_byte_size);
u32 delta = num_blocks_required - num_blocks_used;
- int blocks[delta];
- get_free_blocks(1, blocks, delta);
- for (u32 i = num_blocks_used; i < num_blocks_required; i++) {
- assert(ext2_allocate_block(inode, i, blocks[i - num_blocks_used]));
+ if (delta > 0) {
+ int blocks[delta];
+ get_free_blocks(1, blocks, delta);
+ for (u32 i = num_blocks_used; i < num_blocks_required; i++) {
+ assert(ext2_allocate_block(inode, i, blocks[i - num_blocks_used]));
+ }
}
inode->num_disk_sectors =