"J. R. Okajima":
> Unfortunately this Call Trace looks unreliable, and I cannot see the
> behaviour exactly. But I can assume that there is a call chain such
> like this.
> - "ls" issues lgetxattr(2)
> + SyS_lgetxattr()
> + aufs_getxattr()
> + au_lgxattr()
> + si_read_lock()
It might be this.
- "ls" issues lgetxattr(2)
+ SyS_lgetxattr()
+ vfs: lookup
+ aufs: lookup
+ vfs: d_splice_alias
+ selinux: d_instantiate
+ vfs: getxattr
+ aufs: getxattr
--> BANG!! coz d_inode is unset
In other words,
- aufs calls vfs:d_splice_alias() which sets d_inode.
- vfs:d_splice_alias() calls selinux's hook selinux_d_instantiate()
BEFORE setting d_inode.
- selinux wants xattr and it reaches aufs_getxattr() which expects
d_inode is set.
- aufs gets unset d_inode and crash.
I have a patch to fix this problem, but it is for aufs4.19 which is my
current development base version. Now I am testing.
It won't be applied cleanly to aufs3.16. Jon, if you want the patch and
will fix manually for your version, I will post here.
J. R. Okajima