Skip to content

Commit a2d304b

Browse files
authored
sdk/rust: Add origin mapping in ensure_parent_dirs (#301)
When creating parent directories in delta during copy-up, create origin mappings for directories that also exist in base. This ensures that lookups return consistent overlay inodes, fixing getcwd() failures on macOS NFS mounts.
2 parents aaf0940 + 29ad9e7 commit a2d304b

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

sdk/rust/src/filesystem/overlayfs.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -376,11 +376,12 @@ impl OverlayFS {
376376

377377
// Not in delta, check base (using the base inode, not delta inode)
378378
let base_stats = self.base.lookup(current_base_ino, component).await?;
379-
let (dir_uid, dir_gid) = if let Some(s) = &base_stats {
380-
current_base_ino = s.ino;
381-
(s.uid, s.gid)
379+
let (dir_uid, dir_gid, origin_base_ino) = if let Some(s) = &base_stats {
380+
let base_ino = s.ino;
381+
current_base_ino = base_ino;
382+
(s.uid, s.gid, Some(base_ino))
382383
} else {
383-
(uid, gid)
384+
(uid, gid, None)
384385
};
385386

386387
// Create directory in delta
@@ -394,6 +395,12 @@ impl OverlayFS {
394395
)
395396
.await?;
396397
current_delta_ino = new_stats.ino;
398+
399+
// Create origin mapping if directory exists in base, so that
400+
// lookups return consistent overlay inodes
401+
if let Some(base_ino) = origin_base_ino {
402+
self.add_origin_mapping(new_stats.ino, base_ino).await?;
403+
}
397404
}
398405

399406
Ok(())

0 commit comments

Comments
 (0)