On Wed, 8 Jul 2026 at 12:00, Giuseppe Scrivano [off-list ref] wrote:
Add two ioctls to overlay filesystem to allow userspace to retrieve
information about the overlay layers:
OVL_IOC_OPEN_LAYER: return an O_PATH fd to the root of a layer.
arg == 0 returns the upper layer (-ENOENT if
no upper is configured), arg >= 1 returns
lower layers (-ENOENT if index is out of
range).
We could do this with a plain open() call. Something like the magic
symlinks we have under /proc/PID/fd/. Question is where could these
live...
OVL_IOC_GET_LAYERS_INFO: copy a struct ovl_layers_info to userspace
with numlower, numlowerdata, and has_upper.
Isn't this info obtainable via statmount(2) already? If not, it
should be there, instead of a specialized ioctl.
quoted hunk ↗ jump to hunk
--- a/fs/overlayfs/ovl_entry.h
+++ b/fs/overlayfs/ovl_entry.h
@@ -35,6 +35,8 @@ struct ovl_layer {
struct vfsmount *mnt;
/* Trap in ovl inode cache */
struct inode *trap;
+ /* Keeps the original fsmount file alive for OVL_IOC_OPEN_LAYER */
+ struct file *origin;
Don't need to keep the file open: the only info missing is the
original vfsmount, everything else is already there to reconstruct the
file.
Thanks,
Miklos