Re: fsnotify_mark_srcu wtf?
From: Amir Goldstein
Date: Thu Nov 10 2016 - 17:42:30 EST
On Thu, Nov 10, 2016 at 10:44 PM, Miklos Szeredi <miklos@xxxxxxxxxx> wrote:
> On Thu, Nov 10, 2016 at 8:46 PM, Jan Kara <jack@xxxxxxx> wrote:
>> Except it doesn't quite work. We can pin the current marks by a refcount
>> but they can still be removed from the list so after we regain srcu lock,
>> we are not sure their ->next pointers still point to still allocated marks
>> :-| Sadly I realized this only after implementing all this.
>
> I think the real problem is the synchronous nature of the notification
> interface, that really doesn't fit the permission events model very
> well.
>
> If it were to be changed around to an async interface then all the
> marks could be iterated, the permission events queued and then the
> srcu lock can be released for good.
>
> Did I miss something?
>
Just one annoying fact - the the spec says that permission events must
be delivered
before the lower priority class events (i.e. the passive listeners).
But unlike fanotify, that doesn't need the marks after they have been
iterated, inotify
does need the marks further along and dnotify goes further by taking a
lock, which
is on the mark itself, throughout the emittion of the event.
This is the reason I suggested to walk the mark list while taking
different SRCUs,
but as I said, that's easier said then done, so I am not sure its a
feasible idea.
Amir.