All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amir Goldstein <amir73il@gmail.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Paul Moore <paul@paul-moore.com>,
	Miklos Szeredi <miklos@szeredi.hu>
Subject: Re: [PATCH 06/25] fsnotify: Attach marks to object via dedicated head structure
Date: Wed, 1 Feb 2017 15:17:04 +0200	[thread overview]
Message-ID: <CAOQ4uxjsnvbosiAFOY9iQLVeb3-LyogRrCxtUYqPfLBKEYwnPA@mail.gmail.com> (raw)
In-Reply-To: <20170201104457.23194-7-jack@suse.cz>

On Wed, Feb 1, 2017 at 12:44 PM, Jan Kara <jack@suse.cz> wrote:
> Currently notification marks are attached to object (inode or vfsmnt) by
> a hlist_head in the object. The list is also protected by a spinlock in
> the object. So while there is any mark attached to the list of marks,
> the object must be pinned in memory (and thus e.g. last iput() deleting
> inode cannot happen). Also for list iteration in fsnotify() to work, we
> must hold fsnotify_mark_srcu lock so that mark itself and
> mark->obj_list.next cannot get freed. Thus we are required to wait for
> response to fanotify events from userspace process with
> fsnotify_mark_srcu lock held. That causes issues when userspace process
> is buggy and does not reply to some event - basically the whole
> notification subsystem gets eventually stuck.
>
> So to be able to drop fsnotify_mark_srcu lock while waiting for
> response, we have to pin the mark in memory and make sure it stays in
> the object list (as removing the mark waiting for response could lead to
> lost notification events for groups later in the list). However we don't
> want inode reclaim to block on such mark as that would lead to system
> just locking up elsewhere.
>
> This commit tries to pave a way towards solving these conflicting
> lifetime needs. Instead of anchoring the list of marks directly in the
> object, we anchor it in a dedicated structure (fsnotify_mark_connector)
> and just point to that structure from the object. In the following patch
> we will also protect the list by a spinlock contained in that structure.
> With this, we will be able to detach notification marks from object
> without having to modify the list itself.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---

The patch split was useful for review on one hand, but it generated some weird
looking functions like fsnotify_destroy_marks() and grab_connector(), which
whose name does not accurately reflect what they do in the context of
this patch.
However, since those are totally reshuffled in next patches, you may re-add

Reviewed-by: Amir Goldstein <amir73il@gmail.com>

  reply	other threads:[~2017-02-01 13:17 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-01 10:44 [PATCH 0/25 v4] fsnotify: Avoid SRCU stalls with fanotify permission events Jan Kara
2017-02-01 10:44 ` [PATCH 01/25] fsnotify: Remove unnecessary tests when showing fdinfo Jan Kara
2017-02-01 10:44 ` [PATCH 02/25] inotify: Remove inode pointers from debug messages Jan Kara
2017-02-01 10:44 ` [PATCH 03/25] fanotify: Move recalculation of inode / vfsmount mask under mark_mutex Jan Kara
2017-02-01 10:44 ` [PATCH 04/25] audit: Abstract hash key handling Jan Kara
2017-02-01 10:44 ` [PATCH 05/25] fsnotify: Update comments Jan Kara
2017-02-01 10:44 ` [PATCH 06/25] fsnotify: Attach marks to object via dedicated head structure Jan Kara
2017-02-01 13:17   ` Amir Goldstein [this message]
2017-02-06 19:44   ` Miklos Szeredi
2017-02-07 19:06     ` Amir Goldstein
2017-03-14 15:49     ` Jan Kara
2017-02-01 10:44 ` [PATCH 07/25] fsnotify: Move fsnotify_destroy_marks() Jan Kara
2017-02-01 13:18   ` Amir Goldstein
2017-02-01 10:44 ` [PATCH 08/25] fsnotify: Lock object list with connector lock Jan Kara
2017-02-01 13:22   ` Amir Goldstein
2017-02-02 15:06     ` Jan Kara
2017-02-01 10:44 ` [PATCH 09/25] fsnotify: Free fsnotify_mark_connector when there is no mark attached Jan Kara
2017-02-01 13:25   ` Amir Goldstein
2017-02-07 16:04   ` Miklos Szeredi
2017-02-09 16:19     ` Jan Kara
2017-02-01 10:44 ` [PATCH 10/25] inotify: Do not drop mark reference under idr_lock Jan Kara
2017-02-01 10:44 ` [PATCH 11/25] fsnotify: Move queueing of mark for destruction into fsnotify_put_mark() Jan Kara
2017-02-01 10:44 ` [PATCH 12/25] fsnotify: Detach mark from object list when last reference is dropped Jan Kara
2017-02-01 10:44 ` [PATCH 13/25] fsnotify: Remove special handling of mark destruction on group shutdown Jan Kara
2017-02-01 10:44 ` [PATCH 14/25] fsnotify: Provide framework for dropping SRCU lock in ->handle_event Jan Kara
2017-02-01 10:44 ` [PATCH 15/25] fsnotify: Pass fsnotify_iter_info into handle_event handler Jan Kara
2017-02-01 10:44 ` [PATCH 16/25] fanotify: Release SRCU lock when waiting for userspace response Jan Kara
2017-02-01 10:44 ` [PATCH 17/25] fsnotify: Remove fsnotify_set_mark_{,ignored_}mask_locked() Jan Kara
2017-02-01 10:44 ` [PATCH 18/25] fsnotify: Remove fsnotify_recalc_{inode|vfsmount}_mask() Jan Kara
2017-02-01 10:44 ` [PATCH 19/25] fsnotify: Inline fsnotify_clear_{inode|vfsmount}_mark_group() Jan Kara
2017-02-01 10:44 ` [PATCH 20/25] fsnotify: Rename fsnotify_clear_marks_by_group_flags() Jan Kara
2017-02-01 10:44 ` [PATCH 21/25] fsnotify: Remove fsnotify_detach_group_marks() Jan Kara
2017-02-01 10:44 ` [PATCH 22/25] fsnotify: Remove fsnotify_find_{inode|vfsmount}_mark() Jan Kara
2017-02-01 10:44 ` [PATCH 23/25] fsnotify: Drop inode_mark.c Jan Kara
2017-02-01 10:44 ` [PATCH 24/25] fsnotify: Add group pointer in fsnotify_init_mark() Jan Kara
2017-02-01 11:24   ` Amir Goldstein
2017-02-01 10:44 ` [PATCH 25/25] fsnotify: Move ->free_mark callback to fsnotify_ops Jan Kara
2017-02-01 16:18 ` [PATCH 0/25 v4] fsnotify: Avoid SRCU stalls with fanotify permission events Miklos Szeredi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOQ4uxjsnvbosiAFOY9iQLVeb3-LyogRrCxtUYqPfLBKEYwnPA@mail.gmail.com \
    --to=amir73il@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=paul@paul-moore.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.