Jelajahi Sumber

fix: inode set size

liujingx 10 bulan lalu
induk
melakukan
0a57376d4e
2 mengubah file dengan 8 tambahan dan 1 penghapusan
  1. 3 1
      src/ext4/extent.rs
  2. 5 0
      src/ext4/low_level.rs

+ 3 - 1
src/ext4/extent.rs

@@ -45,7 +45,9 @@ impl Ext4 {
         } else {
             Err(format_error!(
                 ErrCode::ENOENT,
-                "extent_query: extent not found"
+                "extent_query: inode {} query iblock {} not found",
+                inode_ref.id,
+                iblock
             ))
         }
     }

+ 5 - 0
src/ext4/low_level.rs

@@ -89,6 +89,11 @@ impl Ext4 {
             inode.inode.set_gid(gid);
         }
         if let Some(size) = size {
+            // If size increases, allocate new blocks if needed.
+            let required_blocks = (size as usize + INODE_BLOCK_SIZE - 1) / INODE_BLOCK_SIZE;
+            for _ in inode.inode.block_count()..required_blocks as u64 {
+                self.inode_append_block(&mut inode)?;
+            }
             inode.inode.set_size(size);
         }
         if let Some(atime) = atime {