Quellcode durchsuchen

fix(fs): fix ext4's write offset update

Heinz vor 6 Monaten
Ursprung
Commit
806c4fe0ac
1 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  1. 8 1
      src/fs/ext4.rs

+ 8 - 1
src/fs/ext4.rs

@@ -266,10 +266,14 @@ impl Inode for FileInode {
         let mut temp_buf = vec![0u8; 4096];
         let mut total_written = 0;
 
+        let mut store_new_end = None;
         let offset = match offset {
             WriteOffset::Position(offset) => offset,
             // TODO: here need to add some operate
-            WriteOffset::End(end) => *end,
+            WriteOffset::End(end) => {
+                store_new_end = Some(end);
+                self.size.load(Ordering::Relaxed) as usize
+            }
         };
 
         while let Some(data) = stream.poll_data(&mut temp_buf)? {
@@ -283,6 +287,9 @@ impl Inode for FileInode {
             }
         }
 
+        if let Some(store_end) = store_new_end {
+            *store_end = offset + total_written;
+        }
         let mtime = Instant::now();
         *self.mtime.lock() = mtime;
         let new_size = (offset + total_written) as u64;