Re: [RFC][PATCH 0/4] fsnotify: pass single mark to handle_event()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 4, 2017 at 10:28 AM, Jan Kara <jack@xxxxxxx> wrote:
> Hi,
>
> On Tue 27-12-16 21:32:24, Amir Goldstein wrote:
>> I thought this would turn out simpler, so you may be able to use it
>> for your work, but I'm afraid that's not the case.
>>
>> Anyway, since I am leaving for new year's vacation, I am posting
>> what I have in case you want to use any of it.
>>
>> It passed some initial tests I ran, but when I wanted to test the
>> corner case referred to in patch 1, I found that my test program
>> hangs open() syscalls with kernel 4.10-rc1 before any of my changes.
>>
>> This is the mark setup I was testing [1]:
>>   fanotify_mark(fd, FAN_MARK_ADD,
>>                 FAN_OPEN_PERM | FAN_EVENT_ON_CHILD, AT_FDCWD,
>>                 path);
>>   fanotify_mark(fd, FAN_MARK_ADD | \
>>                 FAN_MARK_IGNORED_SURV_MODIFY | FAN_MARK_IGNORED_MASK
>>                 FAN_OPEN_PERM | FAN_EVENT_ON_CHILD, AT_FDCWD,
>>                 FAN_CLOSE_WRITE, AT_FDCWD,
>>                 path);
>>   fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,
>>                 FAN_OPEN_PERM | FAN_CLOSE_WRITE, AT_FDCWD,
>>                 path);
>>
>> Without FAN_EVENT_ON_CHILD it works fine, but with FAN_EVENT_ON_CHILD,
>> something bad is going on and I did not have time to look into it.
>
> I had a look at the patches and the result does not look simpler than what
> we had before AFAICT. Sure we don't have to pass both marks into
> ->handle_event but is that really such a big win? And actually my patches
> for dropping SRCU lock when waiting for userspace response to fanotify
> permission event need both marks in ->handle_event because they both need
> to be protected against freeing when SRCU lock is dropped... So I don't
> think this is really viable path.
>

Sure.

> However one thing that may be worth cleaning up is that
> fanotify_should_send_event() needlessly checks the masks - send to group
> already did this. So I'd move the check for FS_EVENT_ON_CHILD from
> fanotify_should_send_event() to send_to_group() - arguably it belongs there
> - and then just completely drop checking of the masks from
> fanotify_should_send_event(). What do you think?
>

Right, so patch [1/4] plus deduplicating the tests in
fanotify_should_send_event().
In principle it makes sense. However, you probably noticed that the logic used
by fanotify_should_send_event() for FS_EVENT_ON_CHILD is different from
the generic logic in send_to_group().

The test in fanotify_should_send_event() is skipped if both inode and vfsmount
marks are present. My patch [1/4] changes this logic, because I thought it was
a bug, but my tests indicate that a bug related to FS_EVENT_ON_CHILD exists
before AND after my change.

So first, I need to isolate and analyse the bug. When I propose a fix, I will
make sure the FS_EVENT_ON_CHILD test ends up only in send_to_group().

>> In general, I would like to start working on an fsnotify testsuite,
>> so if you have any plans wrt writing extra tests or ideas about specific
>> missing tests, please let me know about them.
>
> That would be certainly worthwhile. Actually when I find some useful
> testcase I add it to LTP under the
> testcases/kernel/syscalls/{fanotify|inotify}. So please extend that if you
> have some more ideas for testcases.
>

Yes, I am aware of those testcases.
I find LTP quite heavy to build, so I though I would spin a dedicated
testsuite that will contain your testcases, but will also include
infrastructure for stress testing and profiling.
Keeping track of performance regressions is clearly a major aspect
of maintaining fsnotify.

Amir.
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux