ovl: constant d_ino for non-merge dirs
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 27 Jul 2017 19:54:06 +0000 (21:54 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 27 Jul 2017 19:54:06 +0000 (21:54 +0200)
commit4edb83bb1041e2f946ce36ea93f6bcd06d984bf4
tree832e3e3138db090fcbecbef9324116469834f62b
parentb5efccbe0a12a9d5c65c1a60b4270837c7fdb900
ovl: constant d_ino for non-merge dirs

Impure directories are ones which contain objects with origins (i.e. those
that have been copied up).  These are relevant to readdir operation only
because of the d_ino field, no other transformation is necessary.  Also a
directory can become impure between two getdents(2) calls.

This patch creates a cache for impure directories.  Unlike the cache for
merged directories, this one only contains entries with origin and is not
refcounted but has a its lifetime tied to that of the dentry.

Similarly to the merged cache, the impure cache is invalidated based on a
version number.  This version number is incremented when an entry with
origin is added or removed from the directory.

If the cache is empty, then the impure xattr is removed from the directory.

This patch also fixes up handling of d_ino for the ".." entry if the parent
directory is merged.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/dir.c
fs/overlayfs/overlayfs.h
fs/overlayfs/readdir.c
fs/overlayfs/super.c
fs/overlayfs/util.c