Skip to content

Refactor path resolution

Currently, path resolution is using lstat() to ensure that each path component exists. This can add unnecessary overhead, especially when the mount point is located under a long path within a parallel file system like Lustre.

The requirements for path checking:

  1. Detect paths within GekkoFS and pass them (without prefix) to GekkoFS
  2. No system calls for checking of path component existence.
  3. When a path is not within GekkoFS, the unmodified path is passed to the kernel, except a GekkoFS path is part of the path which must be removed first.

Therefore, the following features/changes are necessary:

  • A prefix is a defined as the absolute path to the GekkoFS mountpoint. E.g., for /tmp/gkfs_mount/foofile the prefix is /tmp/gkfs_mount.
  • No system call like lstat() should be called
  • Path checking is done by prefix matching. Therefore a non-absolute path first needs to be resolved:
    • if the middle of the path uses .., the path needs to be resolved for prefix checking (similar to now)
    • relative paths (based on the current working directory) also need to be resolved for prefix checking
  • If a path is not within GekkoFS, the path should be passed to the kernel unmodified.
    • When part of the GekkoFS namespace is in the middle of a path and then undone via .., the path needs to be resolved before passing it to the kernel as the kernel is unaware of GekkoFS
    • This also applies to relative paths
  • If a path is within GekkoFS, the prefix is cut from the path and passed to GekkoFS.

Part of these improvements are included but unfinished in this branch

Edited by Marc Vef