On Sat, Jan 7, 2017 at 2:15 AM,  <sf...@users.sourceforge.net> wrote:
> Hello Arun,
>
> Arun Chandran:
>> 4) Now if I cd to /mnt/mnt and do 'ls' it hangs and I get the below oops.
>>
>>
>> # dmesg
>> [  148.855382] ------------[ cut here ]------------
>> [  148.855382] kernel BUG at fs/aufs/sbinfo.c:336!
>         :::
>
> That is interesting.
> Smack enters aufs twice.
>
> Generally a systemcall enters VFS and then aufs. Once it enters aufs,
> aufs calls si_read_lock() which prohibits the branch manipulation
> (add/del branches in aufs) during the systemcall. Leaving aufs,
> si_read_unlock() is called and the branch manipulataion is
> allowed. Finally VFS and the systemcall return to the userspace.
>
> According to your stack trace,
> - lstat(2) is issued
> - VFS tries resolving the given path, and calls aufs_lookup().
> - aufs finds the file (probably), and calls d_instatiate() which caches
>   the filepath in memory.
> - d_instantiate() calls smack_d_instantiate(). obviously it should
>   happen when smack is enabled only.
> - smack_d_instantiate() wants a specific XATTR set to that file and
>   calls aufs_getxattr().
> What a surprise! aufs_getxattr() should be called via systemcall as
> getxattr(2). The process should not re-enter aufs before completing
> aufs_lookup(). At least, aufs doesn't expect such behaviour. And aufs
> detects this "re-entering" behaviour and produces this message. If you
> had not enabled CONFIG_AUFS_DEBUG, the message would not be
> produced. But the behaviour would not be reliable anymore, I am
> afraid. It was good to enable CONFIG_AUFS_DEBUG.
>
> I don't know why smack people designed such behaviour. That is
> inetresting. At the same time, I think it ugly. Why didn't they create a
> hook at the very end of lookup, I wonder.
>
> Anyway here is a quick hack for you. Won't you test it?
>
>
> J. R. Okajima
>

Thank you for the quick reply.
I have tested the patch. 'ls' behavior is the same, it hangs. There
are no error messages coming now may be it is doing something inside
au_h_path_getattr() with holding the lock (When printed locked is -1).

--Arun

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot

Reply via email to