From: Jan Kara <jack@suse.cz>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Gabriel Krisman Bertazi <krisman@collabora.com>,
Jan Kara <jack@suse.com>, "Darrick J. Wong" <djwong@kernel.org>,
Theodore Tso <tytso@mit.edu>, Dave Chinner <david@fromorbit.com>,
David Howells <dhowells@redhat.com>,
Khazhismel Kumykov <khazhy@google.com>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Ext4 <linux-ext4@vger.kernel.org>,
Linux API <linux-api@vger.kernel.org>,
kernel@collabora.com
Subject: Re: [PATCH v8 20/32] fanotify: Dynamically resize the FAN_FS_ERROR pool
Date: Tue, 19 Oct 2021 14:03:16 +0200 [thread overview]
Message-ID: <20211019120316.GI3255@quack2.suse.cz> (raw)
In-Reply-To: <CAOQ4uxi3C7MQxGPc1fD8ZyRTkyJZQac3_M-0aGYzPKbJ6AK8Jg@mail.gmail.com>
On Tue 19-10-21 08:50:23, Amir Goldstein wrote:
> On Tue, Oct 19, 2021 at 3:03 AM Gabriel Krisman Bertazi
> <krisman@collabora.com> wrote:
> >
> > Allow the FAN_FS_ERROR group mempool to grow up to an upper limit
> > dynamically, instead of starting already at the limit. This doesn't
> > bother resizing on mark removal, but next time a mark is added, the slot
> > will be either reused or resized. Also, if several marks are being
> > removed at once, most likely the group is going away anyway.
> >
> > Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
> > ---
> > fs/notify/fanotify/fanotify_user.c | 26 +++++++++++++++++++++-----
> > include/linux/fsnotify_backend.h | 1 +
> > 2 files changed, 22 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
> > index f77581c5b97f..a860c286e885 100644
> > --- a/fs/notify/fanotify/fanotify_user.c
> > +++ b/fs/notify/fanotify/fanotify_user.c
> > @@ -959,6 +959,10 @@ static int fanotify_remove_mark(struct fsnotify_group *group,
> >
> > removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags,
> > umask, &destroy_mark);
> > +
> > + if (removed & FAN_FS_ERROR)
> > + group->fanotify_data.error_event_marks--;
> > +
> > if (removed & fsnotify_conn_mask(fsn_mark->connector))
> > fsnotify_recalc_mask(fsn_mark->connector);
> > if (destroy_mark)
> > @@ -1057,12 +1061,24 @@ static struct fsnotify_mark *fanotify_add_new_mark(struct fsnotify_group *group,
> >
> > static int fanotify_group_init_error_pool(struct fsnotify_group *group)
> > {
> > - if (mempool_initialized(&group->fanotify_data.error_events_pool))
> > - return 0;
> > + int ret;
> > +
> > + if (group->fanotify_data.error_event_marks >=
> > + FANOTIFY_DEFAULT_MAX_FEE_POOL)
> > + return -ENOMEM;
> >
> > - return mempool_init_kmalloc_pool(&group->fanotify_data.error_events_pool,
> > - FANOTIFY_DEFAULT_MAX_FEE_POOL,
> > - sizeof(struct fanotify_error_event));
> > + if (!mempool_initialized(&group->fanotify_data.error_events_pool))
> > + ret = mempool_init_kmalloc_pool(
> > + &group->fanotify_data.error_events_pool,
> > + 1, sizeof(struct fanotify_error_event));
> > + else
> > + ret = mempool_resize(&group->fanotify_data.error_events_pool,
> > + group->fanotify_data.error_event_marks + 1);
> > +
> > + if (!ret)
> > + group->fanotify_data.error_event_marks++;
> > +
> > + return ret;
> > }
>
> This is not what I had in mind.
> I was thinking start with ~32 and double each time limit is reached.
Do you mean when number of FS_ERROR marks reaches the number of preallocated
events? We could do that but note that due to mempool implementation limits
there cannot be more than 255 preallocated events, also mempool_resize()
will only update number of slots for preallocated events but these slots
will be empty. You have to manually allocate and free events to fill these
slots with preallocated events.
> And also, this code grows the pool to infinity with add/remove mark loop.
I see a cap at FANOTIFY_DEFAULT_MAX_FEE_POOL in the code there. But I don't
think there's a good enough reason to hard-limit number of FS_ERROR marks
at 128. As I explained in the previous version of the series, in vast
majority of cases we will not use even a single preallocated event...
> Anyway, since I clearly did not understand how mempool works and
> Jan had some different ideas I would leave it to Jan to explain
> how he wants the mempool init limit and resize to be implemented.
Honestly, I'm for keeping it simple for now. Just 32 preallocated events
and try to come up with something more clever only if someone actually
complains.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2021-10-19 12:03 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-18 23:59 [PATCH v8 00/32] file system-wide error monitoring Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 01/32] fsnotify: pass data_type to fsnotify_name() Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 02/32] fsnotify: pass dentry instead of inode data Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 03/32] fsnotify: clarify contract for create event hooks Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 04/32] fsnotify: Don't insert unmergeable events in hashtable Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 05/32] fanotify: Fold event size calculation to its own function Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 06/32] fanotify: Split fsid check from other fid mode checks Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 07/32] inotify: Don't force FS_IN_IGNORED Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 08/32] fsnotify: Add helper to detect overflow_event Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 09/32] fsnotify: Add wrapper around fsnotify_add_event Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 10/32] fsnotify: Retrieve super block from the data field Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 11/32] fsnotify: Protect fsnotify_handle_inode_event from no-inode events Gabriel Krisman Bertazi
2021-10-19 5:34 ` Amir Goldstein
2021-10-19 10:01 ` Jan Kara
2021-10-18 23:59 ` [PATCH v8 12/32] fsnotify: Pass group argument to free_event Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 13/32] fanotify: Support null inode event in fanotify_dfid_inode Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 14/32] fanotify: Allow file handle encoding for unhashed events Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 15/32] fanotify: Encode empty file handle when no inode is provided Gabriel Krisman Bertazi
2021-10-18 23:59 ` [PATCH v8 16/32] fanotify: Require fid_mode for any non-fd event Gabriel Krisman Bertazi
2021-10-19 0:00 ` [PATCH v8 17/32] fsnotify: Support FS_ERROR event type Gabriel Krisman Bertazi
2021-10-19 0:00 ` [PATCH v8 18/32] fanotify: Reserve UAPI bits for FAN_FS_ERROR Gabriel Krisman Bertazi
2021-10-19 0:00 ` [PATCH v8 19/32] fanotify: Pre-allocate pool of error events Gabriel Krisman Bertazi
2021-10-19 5:38 ` Amir Goldstein
2021-10-19 11:52 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 20/32] fanotify: Dynamically resize the FAN_FS_ERROR pool Gabriel Krisman Bertazi
2021-10-19 5:50 ` Amir Goldstein
2021-10-19 12:03 ` Jan Kara [this message]
2021-10-21 18:17 ` Gabriel Krisman Bertazi
2021-10-21 19:29 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 21/32] fanotify: Support enqueueing of error events Gabriel Krisman Bertazi
2021-10-19 5:52 ` Amir Goldstein
2021-10-19 0:00 ` [PATCH v8 22/32] fanotify: Support merging " Gabriel Krisman Bertazi
2021-10-19 5:56 ` Amir Goldstein
2021-10-19 13:52 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 23/32] fanotify: Wrap object_fh inline space in a creator macro Gabriel Krisman Bertazi
2021-10-19 6:09 ` Amir Goldstein
2021-10-19 13:58 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 24/32] fanotify: Add helpers to decide whether to report FID/DFID Gabriel Krisman Bertazi
2021-10-19 6:12 ` Amir Goldstein
2021-10-19 14:03 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 25/32] fanotify: Report fid entry even for zero-length file_handle Gabriel Krisman Bertazi
2021-10-19 6:13 ` Amir Goldstein
2021-10-19 14:08 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 26/32] fanotify: WARN_ON against too large file handles Gabriel Krisman Bertazi
2021-10-19 6:02 ` Amir Goldstein
2021-10-19 14:06 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 27/32] fanotify: Report fid info for file related file system errors Gabriel Krisman Bertazi
2021-10-19 6:07 ` Amir Goldstein
2021-10-19 14:41 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 28/32] fanotify: Emit generic error info for error event Gabriel Krisman Bertazi
2021-10-19 0:00 ` [PATCH v8 29/32] fanotify: Allow users to request FAN_FS_ERROR events Gabriel Krisman Bertazi
2021-10-19 5:57 ` Amir Goldstein
2021-10-19 15:24 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 30/32] ext4: Send notifications on error Gabriel Krisman Bertazi
2021-10-19 15:44 ` Jan Kara
2021-10-19 16:01 ` Jan Kara
2021-10-19 16:54 ` Gabriel Krisman Bertazi
2021-10-20 3:11 ` Theodore Ts'o
2021-10-19 0:00 ` [PATCH v8 31/32] samples: Add fs error monitoring example Gabriel Krisman Bertazi
2021-10-19 15:49 ` Jan Kara
2021-10-28 15:18 ` Guenter Roeck
2021-10-28 18:56 ` Gabriel Krisman Bertazi
2021-10-28 19:56 ` Guenter Roeck
2021-11-01 11:42 ` Jan Kara
2021-10-19 0:00 ` [PATCH v8 32/32] docs: Document the FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-10-19 16:47 ` Jan Kara
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=20211019120316.GI3255@quack2.suse.cz \
--to=jack@suse.cz \
--cc=amir73il@gmail.com \
--cc=david@fromorbit.com \
--cc=dhowells@redhat.com \
--cc=djwong@kernel.org \
--cc=jack@suse.com \
--cc=kernel@collabora.com \
--cc=khazhy@google.com \
--cc=krisman@collabora.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=tytso@mit.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).