ovl: fix inconsistent d_ino for legacy merge dir
authorAmir Goldstein <amir73il@gmail.com>
Wed, 3 Jan 2018 17:34:45 +0000 (19:34 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 24 Jan 2018 09:18:19 +0000 (10:18 +0100)
commit9678e630305724487f1fc101d6b83c383ff9cc90
tree553bc1c4c744236395c6eb0613b69fab1d4903b6
parenta5a927a7c82e28ea76599dee4019c41e372c911f
ovl: fix inconsistent d_ino for legacy merge dir

For a merge dir that was copied up before v4.12 or that was hand crafted
offline (e.g. mkdir {upper/lower}/dir), upper dir does not contain the
'trusted.overlay.origin' xattr.  In that case, stat(2) on the merge dir
returns the lower dir st_ino, but getdents(2) returns the upper dir d_ino.

After this change, on merge dir lookup, missing origin xattr on upper
dir will be fixed and 'impure' xattr will be fixed on parent of the legacy
merge dir.

Suggested-by: zhangyi (F) <yi.zhang@huawei.com>
Reviewed-by: zhangyi (F) <yi.zhang@huawei.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/copy_up.c
fs/overlayfs/namei.c
fs/overlayfs/overlayfs.h