All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amir Goldstein <amir73il@gmail.com>
To: Gabriel Krisman Bertazi <krisman@collabora.com>
Cc: "Darrick J. Wong" <djwong@kernel.org>,
	Theodore Tso <tytso@mit.edu>, Dave Chinner <david@fromorbit.com>,
	Jan Kara <jack@suse.com>, David Howells <dhowells@redhat.com>,
	Khazhismel Kumykov <khazhy@google.com>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Ext4 <linux-ext4@vger.kernel.org>,
	kernel@collabora.com
Subject: Re: [PATCH v3 04/15] fanotify: Split superblock marks out to a new cache
Date: Wed, 30 Jun 2021 06:17:27 +0300	[thread overview]
Message-ID: <CAOQ4uxgNzHAhLKh5eOO5aDgCr5zirDrdh_a0H1i4ZrxtzJgqTQ@mail.gmail.com> (raw)
In-Reply-To: <20210629191035.681913-5-krisman@collabora.com>

On Tue, Jun 29, 2021 at 10:12 PM Gabriel Krisman Bertazi
<krisman@collabora.com> wrote:
>
> FAN_ERROR will require an error structure to be stored per mark.  But,
> since FAN_ERROR doesn't apply to inode/mount marks, it should suffice to
FAN_FS_ERROR

> only expose this information for superblock marks. Therefore, wrap this
> kind of marks into a container and plumb it for the future.
>
> Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
>

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

> ---
> Changes since v2:
>   - Move mark initialization to fanotify_alloc_mark (Amir)
>
> Changes since v1:
>   - Only extend superblock marks (Amir)
> ---
>  fs/notify/fanotify/fanotify.c      | 10 ++++++--
>  fs/notify/fanotify/fanotify.h      | 13 ++++++++++
>  fs/notify/fanotify/fanotify_user.c | 38 ++++++++++++++++++++++++++++--
>  include/linux/fsnotify_backend.h   |  1 +
>  4 files changed, 58 insertions(+), 4 deletions(-)
>
> diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c
> index 310246f8d3f1..0f760770d4c9 100644
> --- a/fs/notify/fanotify/fanotify.c
> +++ b/fs/notify/fanotify/fanotify.c
> @@ -869,9 +869,15 @@ static void fanotify_freeing_mark(struct fsnotify_mark *mark,
>                 dec_ucount(group->fanotify_data.ucounts, UCOUNT_FANOTIFY_MARKS);
>  }
>
> -static void fanotify_free_mark(struct fsnotify_mark *fsn_mark)
> +static void fanotify_free_mark(struct fsnotify_mark *mark)
>  {
> -       kmem_cache_free(fanotify_mark_cache, fsn_mark);
> +       if (mark->flags & FSNOTIFY_MARK_FLAG_SB) {
> +               struct fanotify_sb_mark *fa_mark = FANOTIFY_SB_MARK(mark);

I guess you meant sb_mark?

> +
> +               kmem_cache_free(fanotify_sb_mark_cache, fa_mark);
> +       } else {
> +               kmem_cache_free(fanotify_mark_cache, mark);
> +       }
>  }
>
>  const struct fsnotify_ops fanotify_fsnotify_ops = {
> diff --git a/fs/notify/fanotify/fanotify.h b/fs/notify/fanotify/fanotify.h
> index 4a5e555dc3d2..fd125a949187 100644
> --- a/fs/notify/fanotify/fanotify.h
> +++ b/fs/notify/fanotify/fanotify.h
> @@ -6,6 +6,7 @@
>  #include <linux/hashtable.h>
>
>  extern struct kmem_cache *fanotify_mark_cache;
> +extern struct kmem_cache *fanotify_sb_mark_cache;
>  extern struct kmem_cache *fanotify_fid_event_cachep;
>  extern struct kmem_cache *fanotify_path_event_cachep;
>  extern struct kmem_cache *fanotify_perm_event_cachep;
> @@ -129,6 +130,18 @@ static inline void fanotify_info_copy_name(struct fanotify_info *info,
>                name->name);
>  }
>
> +struct fanotify_sb_mark {
> +       struct fsnotify_mark fsn_mark;
> +};
> +
> +static inline
> +struct fanotify_sb_mark *FANOTIFY_SB_MARK(struct fsnotify_mark *mark)
> +{
> +       WARN_ON(!(mark->flags & FSNOTIFY_MARK_FLAG_SB));
> +
> +       return container_of(mark, struct fanotify_sb_mark, fsn_mark);
> +}
> +
>  /*
>   * Common structure for fanotify events. Concrete structs are allocated in
>   * fanotify_handle_event() and freed when the information is retrieved by
> diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
> index 67b18dfe0025..a42521e140e6 100644
> --- a/fs/notify/fanotify/fanotify_user.c
> +++ b/fs/notify/fanotify/fanotify_user.c
> @@ -99,6 +99,7 @@ struct ctl_table fanotify_table[] = {
>  extern const struct fsnotify_ops fanotify_fsnotify_ops;
>
>  struct kmem_cache *fanotify_mark_cache __read_mostly;
> +struct kmem_cache *fanotify_sb_mark_cache __read_mostly;
>  struct kmem_cache *fanotify_fid_event_cachep __read_mostly;
>  struct kmem_cache *fanotify_path_event_cachep __read_mostly;
>  struct kmem_cache *fanotify_perm_event_cachep __read_mostly;
> @@ -915,6 +916,38 @@ static __u32 fanotify_mark_add_to_mask(struct fsnotify_mark *fsn_mark,
>         return mask & ~oldmask;
>  }
>
> +static struct fsnotify_mark *fanotify_alloc_mark(struct fsnotify_group *group,
> +                                                unsigned int type)
> +{
> +       struct fanotify_sb_mark *sb_mark;
> +       struct fsnotify_mark *mark;
> +
> +       switch (type) {
> +       case FSNOTIFY_OBJ_TYPE_SB:
> +               sb_mark = kmem_cache_zalloc(fanotify_sb_mark_cache, GFP_KERNEL);
> +               if (!sb_mark)
> +                       return NULL;
> +               mark = &sb_mark->fsn_mark;
> +               break;
> +
> +       case FSNOTIFY_OBJ_TYPE_INODE:
> +       case FSNOTIFY_OBJ_TYPE_PARENT:
> +       case FSNOTIFY_OBJ_TYPE_VFSMOUNT:
> +               mark = kmem_cache_alloc(fanotify_mark_cache, GFP_KERNEL);
> +               break;
> +       default:
> +               WARN_ON(1);
> +               return NULL;
> +       }
> +
> +       fsnotify_init_mark(mark, group);
> +
> +       if (type == FSNOTIFY_OBJ_TYPE_SB)
> +               mark->flags |= FSNOTIFY_MARK_FLAG_SB;
> +
> +       return mark;
> +}
> +
>  static struct fsnotify_mark *fanotify_add_new_mark(struct fsnotify_group *group,
>                                                    fsnotify_connp_t *connp,
>                                                    unsigned int type,
> @@ -933,13 +966,12 @@ static struct fsnotify_mark *fanotify_add_new_mark(struct fsnotify_group *group,
>             !inc_ucount(ucounts->ns, ucounts->uid, UCOUNT_FANOTIFY_MARKS))
>                 return ERR_PTR(-ENOSPC);
>
> -       mark = kmem_cache_alloc(fanotify_mark_cache, GFP_KERNEL);
> +       mark = fanotify_alloc_mark(group, type);
>         if (!mark) {
>                 ret = -ENOMEM;
>                 goto out_dec_ucounts;
>         }
>
> -       fsnotify_init_mark(mark, group);
>         ret = fsnotify_add_mark_locked(mark, connp, type, 0, fsid);
>         if (ret) {
>                 fsnotify_put_mark(mark);
> @@ -1497,6 +1529,8 @@ static int __init fanotify_user_setup(void)
>
>         fanotify_mark_cache = KMEM_CACHE(fsnotify_mark,
>                                          SLAB_PANIC|SLAB_ACCOUNT);
> +       fanotify_sb_mark_cache = KMEM_CACHE(fanotify_sb_mark,
> +                                           SLAB_PANIC|SLAB_ACCOUNT);
>         fanotify_fid_event_cachep = KMEM_CACHE(fanotify_fid_event,
>                                                SLAB_PANIC);
>         fanotify_path_event_cachep = KMEM_CACHE(fanotify_path_event,
> diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h
> index 1ce66748a2d2..c4473b467c28 100644
> --- a/include/linux/fsnotify_backend.h
> +++ b/include/linux/fsnotify_backend.h
> @@ -401,6 +401,7 @@ struct fsnotify_mark {
>  #define FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY 0x01
>  #define FSNOTIFY_MARK_FLAG_ALIVE               0x02
>  #define FSNOTIFY_MARK_FLAG_ATTACHED            0x04
> +#define FSNOTIFY_MARK_FLAG_SB                  0x08
>         unsigned int flags;             /* flags [mark->lock] */
>  };
>
> --
> 2.32.0
>

  reply	other threads:[~2021-06-30  3:17 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-29 19:10 [PATCH v3 00/15] File system wide monitoring Gabriel Krisman Bertazi
2021-06-29 19:10 ` [PATCH v3 01/15] fsnotify: Don't insert unmergeable events in hashtable Gabriel Krisman Bertazi
2021-06-30  3:12   ` Amir Goldstein
2021-07-07 19:21   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 02/15] fanotify: Fold event size calculation to its own function Gabriel Krisman Bertazi
2021-07-07 19:22   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 03/15] fanotify: Split fsid check from other fid mode checks Gabriel Krisman Bertazi
2021-06-30  3:14   ` Amir Goldstein
2021-07-07 19:24   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 04/15] fanotify: Split superblock marks out to a new cache Gabriel Krisman Bertazi
2021-06-30  3:17   ` Amir Goldstein [this message]
2021-07-07 20:13   ` Jan Kara
2021-07-08  6:16     ` Amir Goldstein
2021-06-29 19:10 ` [PATCH v3 05/15] inotify: Don't force FS_IN_IGNORED Gabriel Krisman Bertazi
2021-07-07 19:37   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 06/15] fsnotify: Add helper to detect overflow_event Gabriel Krisman Bertazi
2021-07-07 20:14   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 07/15] fsnotify: pass arguments of fsnotify() in struct fsnotify_event_info Gabriel Krisman Bertazi
2021-06-29 20:39   ` kernel test robot
2021-06-29 20:39     ` kernel test robot
2021-06-29 23:16   ` kernel test robot
2021-06-30  8:11     ` Dan Carpenter
2021-06-30  8:11     ` Dan Carpenter
2021-06-30  8:35     ` Amir Goldstein
2021-06-30  8:35       ` Amir Goldstein
2021-06-30  8:45       ` Dan Carpenter
2021-06-30  8:45         ` Dan Carpenter
2021-06-30  8:45         ` Dan Carpenter
2021-06-30  9:32         ` Amir Goldstein
2021-06-30  9:32           ` Amir Goldstein
2021-06-30  9:34           ` Amir Goldstein
2021-06-30  9:34             ` Amir Goldstein
2021-06-30 10:49           ` Dan Carpenter
2021-06-30 10:49             ` Dan Carpenter
2021-06-30 10:49             ` Dan Carpenter
2021-06-30 12:51             ` Amir Goldstein
2021-06-30 12:51               ` Amir Goldstein
2021-06-30  0:10   ` kernel test robot
2021-06-30  0:10     ` kernel test robot
2021-06-30  3:29   ` Amir Goldstein
2021-07-08 10:43   ` Jan Kara
2021-07-08 11:09     ` Amir Goldstein
2021-07-08 11:37       ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 08/15] fsnotify: Support passing argument to insert callback on add_event Gabriel Krisman Bertazi
2021-06-30  3:40   ` Amir Goldstein
2021-07-08 10:48   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 09/15] fsnotify: Always run the merge hook Gabriel Krisman Bertazi
2021-06-30  3:42   ` Amir Goldstein
2021-06-29 19:10 ` [PATCH v3 10/15] fsnotify: Support FS_ERROR event type Gabriel Krisman Bertazi
2021-07-08 10:53   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 11/15] fsnotify: Introduce helpers to send error_events Gabriel Krisman Bertazi
2021-06-30  3:44   ` Amir Goldstein
2021-07-08 11:02   ` Jan Kara
2021-06-29 19:10 ` [PATCH v3 12/15] fanotify: Introduce FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-06-30 10:26   ` Amir Goldstein
2021-06-30 17:43     ` Gabriel Krisman Bertazi
2021-07-01  6:37       ` Amir Goldstein
2021-06-30 14:03   ` Amir Goldstein
2021-06-29 19:10 ` [PATCH v3 13/15] ext4: Send notifications on error Gabriel Krisman Bertazi
2021-06-29 19:10 ` [PATCH v3 14/15] samples: Add fs error monitoring example Gabriel Krisman Bertazi
2021-06-30  2:42   ` kernel test robot
2021-06-30  2:42     ` kernel test robot
2021-07-19 14:36     ` Gabriel Krisman Bertazi
2021-07-19 14:36       ` Gabriel Krisman Bertazi
2021-07-20 19:49       ` Dan Carpenter
2021-07-20 19:49         ` Dan Carpenter
2021-07-22 12:54         ` Chen, Rong A
2021-07-22 12:54           ` Chen, Rong A
2021-07-22 16:15           ` Gabriel Krisman Bertazi
2021-07-22 16:15             ` Gabriel Krisman Bertazi
2021-07-23  1:35             ` Chen, Rong A
2021-07-23  1:35               ` Chen, Rong A
2021-06-30  3:46   ` kernel test robot
2021-06-30  3:46     ` kernel test robot
2021-06-30  3:58   ` Amir Goldstein
2021-06-29 19:10 ` [PATCH v3 15/15] docs: Document the FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-06-30  4:18   ` Amir Goldstein
2021-06-30  5:10 ` [PATCH v3 00/15] File system wide monitoring Amir Goldstein
2021-07-08 11:32   ` Jan Kara
2021-07-08 12:25     ` Amir Goldstein

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=CAOQ4uxgNzHAhLKh5eOO5aDgCr5zirDrdh_a0H1i4ZrxtzJgqTQ@mail.gmail.com \
    --to=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-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 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.