ext2: don't try freeing fastlink "blocks"

This commit is contained in:
Mark Poliakov 2025-01-02 21:34:42 +02:00
parent f1f7b753d8
commit d8f035dc69

View File

@ -1,6 +1,7 @@
use core::cmp::Ordering; use core::cmp::Ordering;
use libk::error::Error; use libk::error::Error;
use yggdrasil_abi::io::FileType;
use crate::{ use crate::{
data::{FsReadonlyFeatures, DIRECT_BLOCK_COUNT}, data::{FsReadonlyFeatures, DIRECT_BLOCK_COUNT},
@ -244,8 +245,23 @@ impl Inode {
// TODO check max inode size // TODO check max inode size
let new_blocks = size.div_ceil(fs.block_size as u64); let is_symlink = self
let old_blocks = self.size(fs).div_ceil(fs.block_size as u64); .mode
.node_type()
.map(|ty| ty == FileType::Symlink)
.unwrap_or(false);
let new_blocks = if is_symlink && size < 60 {
0
} else {
size.div_ceil(fs.block_size as u64)
};
// TODO check size_upper as well?
let old_blocks = if is_symlink && self.size_lower < 60 {
0
} else {
self.size(fs).div_ceil(fs.block_size as u64)
};
if new_blocks as usize if new_blocks as usize
> DIRECT_BLOCK_COUNT > DIRECT_BLOCK_COUNT