All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: amir73il@gmail.com
Cc: Gabriel Krisman Bertazi <krisman@collabora.com>,
	kernel@collabora.com, "Darrick J . Wong" <djwong@kernel.org>,
	Theodore Ts'o <tytso@mit.edu>, Dave Chinner <david@fromorbit.com>,
	jack@suse.com, dhowells@redhat.com, khazhy@google.com,
	linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org
Subject: [PATCH 04/11] fanotify: Expose fanotify_mark
Date: Thu, 20 May 2021 22:41:27 -0400	[thread overview]
Message-ID: <20210521024134.1032503-5-krisman@collabora.com> (raw)
In-Reply-To: <20210521024134.1032503-1-krisman@collabora.com>

FAN_ERROR will require an error structure to be stored per mark.
Therefore, wrap fsnotify_mark in a fanotify specific structure in
preparation for that.

Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
---
 fs/notify/fanotify/fanotify.c      |  4 +++-
 fs/notify/fanotify/fanotify.h      | 10 ++++++++++
 fs/notify/fanotify/fanotify_user.c | 14 +++++++-------
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c
index 711b36a9483e..34e2ee759b39 100644
--- a/fs/notify/fanotify/fanotify.c
+++ b/fs/notify/fanotify/fanotify.c
@@ -869,7 +869,9 @@ static void fanotify_freeing_mark(struct fsnotify_mark *mark,
 
 static void fanotify_free_mark(struct fsnotify_mark *fsn_mark)
 {
-	kmem_cache_free(fanotify_mark_cache, fsn_mark);
+	struct fanotify_mark *mark = FANOTIFY_MARK(fsn_mark);
+
+	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..a399c5e2615d 100644
--- a/fs/notify/fanotify/fanotify.h
+++ b/fs/notify/fanotify/fanotify.h
@@ -129,6 +129,16 @@ static inline void fanotify_info_copy_name(struct fanotify_info *info,
 	       name->name);
 }
 
+struct fanotify_mark {
+	struct fsnotify_mark fsn_mark;
+	struct fanotify_error_event *error_event;
+};
+
+static inline struct fanotify_mark *FANOTIFY_MARK(struct fsnotify_mark *mark)
+{
+	return container_of(mark, struct fanotify_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 9cc6c8808ed5..00210535a78e 100644
--- a/fs/notify/fanotify/fanotify_user.c
+++ b/fs/notify/fanotify/fanotify_user.c
@@ -914,7 +914,7 @@ static struct fsnotify_mark *fanotify_add_new_mark(struct fsnotify_group *group,
 						   __kernel_fsid_t *fsid)
 {
 	struct ucounts *ucounts = group->fanotify_data.ucounts;
-	struct fsnotify_mark *mark;
+	struct fanotify_mark *mark;
 	int ret;
 
 	/*
@@ -926,20 +926,20 @@ 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 = kmem_cache_zalloc(fanotify_mark_cache, GFP_KERNEL);
 	if (!mark) {
 		ret = -ENOMEM;
 		goto out_dec_ucounts;
 	}
 
-	fsnotify_init_mark(mark, group);
-	ret = fsnotify_add_mark_locked(mark, connp, type, 0, fsid);
+	fsnotify_init_mark(&mark->fsn_mark, group);
+	ret = fsnotify_add_mark_locked(&mark->fsn_mark, connp, type, 0, fsid);
 	if (ret) {
-		fsnotify_put_mark(mark);
+		fsnotify_put_mark(&mark->fsn_mark);
 		goto out_dec_ucounts;
 	}
 
-	return mark;
+	return &mark->fsn_mark;
 
 out_dec_ucounts:
 	if (!FAN_GROUP_FLAG(group, FAN_UNLIMITED_MARKS))
@@ -1477,7 +1477,7 @@ static int __init fanotify_user_setup(void)
 	BUILD_BUG_ON(HWEIGHT32(FANOTIFY_INIT_FLAGS) != 10);
 	BUILD_BUG_ON(HWEIGHT32(FANOTIFY_MARK_FLAGS) != 9);
 
-	fanotify_mark_cache = KMEM_CACHE(fsnotify_mark,
+	fanotify_mark_cache = KMEM_CACHE(fanotify_mark,
 					 SLAB_PANIC|SLAB_ACCOUNT);
 	fanotify_fid_event_cachep = KMEM_CACHE(fanotify_fid_event,
 					       SLAB_PANIC);
-- 
2.31.0


  parent reply	other threads:[~2021-05-21  2:42 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-21  2:41 [PATCH 00/11] File system wide monitoring Gabriel Krisman Bertazi
2021-05-21  2:41 ` [PATCH 01/11] fanotify: Fold event size calculation to its own function Gabriel Krisman Bertazi
2021-05-21  2:41 ` [PATCH 02/11] fanotify: Split fsid check from other fid mode checks Gabriel Krisman Bertazi
2021-05-21  8:33   ` Amir Goldstein
2021-05-21  2:41 ` [PATCH 03/11] fanotify: Simplify directory sanity check in DFID_NAME mode Gabriel Krisman Bertazi
2021-05-21  8:37   ` Amir Goldstein
2021-05-21  2:41 ` Gabriel Krisman Bertazi [this message]
2021-05-21  9:06   ` [PATCH 04/11] fanotify: Expose fanotify_mark Amir Goldstein
2021-05-21  2:41 ` [PATCH 05/11] inotify: Don't force FS_IN_IGNORED Gabriel Krisman Bertazi
2021-05-21  9:07   ` Amir Goldstein
2021-05-21  2:41 ` [PATCH 06/11] fsnotify: Support FS_ERROR event type Gabriel Krisman Bertazi
2021-05-21  9:13   ` Amir Goldstein
2021-05-21  2:41 ` [PATCH 07/11] fsnotify: Introduce helpers to send error_events Gabriel Krisman Bertazi
2021-05-21  9:32   ` Amir Goldstein
2021-05-22 17:51   ` kernel test robot
2021-05-22 17:51     ` kernel test robot
2021-05-21  2:41 ` [PATCH 08/11] fanotify: Introduce FAN_ERROR event Gabriel Krisman Bertazi
2021-05-21 11:02   ` Amir Goldstein
2021-05-21 15:02   ` Darrick J. Wong
2021-05-21  2:41 ` [PATCH 09/11] ext4: Send notifications on error Gabriel Krisman Bertazi
2021-05-21  9:44   ` Amir Goldstein
2021-05-21  2:41 ` [PATCH 10/11] samples: Add fs error monitoring example Gabriel Krisman Bertazi
2021-05-21  9:48   ` Amir Goldstein
2021-05-26 23:37     ` Gabriel Krisman Bertazi
2021-05-22 20:21   ` kernel test robot
2021-05-22 20:21     ` kernel test robot
2021-05-21  2:41 ` [PATCH 11/11] Documentation: Document the FAN_ERROR event Gabriel Krisman Bertazi
2021-05-21  9:54   ` Amir Goldstein
2021-05-21  8:31 ` [PATCH 00/11] File system wide monitoring Amir Goldstein
2021-05-22 23:25 ` Theodore Y. Ts'o
2021-05-24 15:19   ` Gabriel Krisman Bertazi
2021-05-24  3:06 ` Ian Kent

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=20210521024134.1032503-5-krisman@collabora.com \
    --to=krisman@collabora.com \
    --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=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.