From cb3dfa45afb8423bef47fd8d23152bf9b17de0bf Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 5 Jul 2026 16:17:37 -0300 Subject: [PATCH] ext2: don't sync superblock on every allocation --- kernel-src/fs/ext2.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel-src/fs/ext2.c b/kernel-src/fs/ext2.c index 177833e9..f314ac77 100644 --- a/kernel-src/fs/ext2.c +++ b/kernel-src/fs/ext2.c @@ -214,6 +214,11 @@ static const int vfstoext2typetable[] = { static vops_t vnops; static scache_t *nodecache; +static int writesuperblock(ext2fs_t *fs) { + size_t tmp; + return vfs_write(fs->backing, &fs->superblock, sizeof(ext2superblock_t), SUPERBLOCK_OFFSET, &tmp, 0); +} + static int syncsuperblock(ext2fs_t *fs) { size_t tmp; return vfs_write(fs->backing, &fs->superblock, sizeof(ext2superblock_t), SUPERBLOCK_OFFSET, &tmp, V_FFLAGS_NOCACHE); @@ -339,7 +344,7 @@ static int allocatestructure(ext2fs_t *fs, uintmax_t *retid, bool inode) { fs->superblock.unallocatedinodes -= 1; else fs->superblock.unallocatedblocks -= 1; - e = syncsuperblock(fs); + e = writesuperblock(fs); MUTEX_RELEASE(&fs->superblocklock); ASSERT_UNCLEAN(fs, e == 0); @@ -415,7 +420,7 @@ static int freestructure(ext2fs_t *fs, uintmax_t id, bool inode) { fs->superblock.unallocatedinodes += 1; else fs->superblock.unallocatedblocks += 1; - e = syncsuperblock(fs); + e = writesuperblock(fs); MUTEX_RELEASE(&fs->superblocklock); cleanup: