linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: amir73il@gmail.com, jack@suse.com
Cc: djwong@kernel.org, tytso@mit.edu, david@fromorbit.com,
	dhowells@redhat.com, khazhy@google.com,
	linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org,
	linux-ext4@vger.kernel.org,
	Gabriel Krisman Bertazi <krisman@collabora.com>,
	kernel@collabora.com, Jan Kara <jack@suse.cz>
Subject: [PATCH v9 05/31] fanotify: Fold event size calculation to its own function
Date: Mon, 25 Oct 2021 16:27:20 -0300	[thread overview]
Message-ID: <20211025192746.66445-6-krisman@collabora.com> (raw)
In-Reply-To: <20211025192746.66445-1-krisman@collabora.com>

Every time this function is invoked, it is immediately added to
FAN_EVENT_METADATA_LEN, since there is no need to just calculate the
length of info records. This minor clean up folds the rest of the
calculation into the function, which now operates in terms of events,
returning the size of the entire event, including metadata.

Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>

---
Changes since v6:
  - Rebase on top of pidfd patches
Changes since v1:
  - rebased on top of hashing patches
---
 fs/notify/fanotify/fanotify_user.c | 35 +++++++++++++++++-------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
index 6facdf476255..6895ec310b5d 100644
--- a/fs/notify/fanotify/fanotify_user.c
+++ b/fs/notify/fanotify/fanotify_user.c
@@ -126,17 +126,24 @@ static int fanotify_fid_info_len(int fh_len, int name_len)
 		       FANOTIFY_EVENT_ALIGN);
 }
 
-static int fanotify_event_info_len(unsigned int info_mode,
-				   struct fanotify_event *event)
+static size_t fanotify_event_len(unsigned int info_mode,
+				 struct fanotify_event *event)
 {
-	struct fanotify_info *info = fanotify_event_info(event);
-	int dir_fh_len = fanotify_event_dir_fh_len(event);
-	int fh_len = fanotify_event_object_fh_len(event);
-	int info_len = 0;
+	size_t event_len = FAN_EVENT_METADATA_LEN;
+	struct fanotify_info *info;
+	int dir_fh_len;
+	int fh_len;
 	int dot_len = 0;
 
+	if (!info_mode)
+		return event_len;
+
+	info = fanotify_event_info(event);
+	dir_fh_len = fanotify_event_dir_fh_len(event);
+	fh_len = fanotify_event_object_fh_len(event);
+
 	if (dir_fh_len) {
-		info_len += fanotify_fid_info_len(dir_fh_len, info->name_len);
+		event_len += fanotify_fid_info_len(dir_fh_len, info->name_len);
 	} else if ((info_mode & FAN_REPORT_NAME) &&
 		   (event->mask & FAN_ONDIR)) {
 		/*
@@ -147,12 +154,12 @@ static int fanotify_event_info_len(unsigned int info_mode,
 	}
 
 	if (info_mode & FAN_REPORT_PIDFD)
-		info_len += FANOTIFY_PIDFD_INFO_HDR_LEN;
+		event_len += FANOTIFY_PIDFD_INFO_HDR_LEN;
 
 	if (fh_len)
-		info_len += fanotify_fid_info_len(fh_len, dot_len);
+		event_len += fanotify_fid_info_len(fh_len, dot_len);
 
-	return info_len;
+	return event_len;
 }
 
 /*
@@ -181,7 +188,7 @@ static void fanotify_unhash_event(struct fsnotify_group *group,
 static struct fanotify_event *get_one_event(struct fsnotify_group *group,
 					    size_t count)
 {
-	size_t event_size = FAN_EVENT_METADATA_LEN;
+	size_t event_size;
 	struct fanotify_event *event = NULL;
 	struct fsnotify_event *fsn_event;
 	unsigned int info_mode = FAN_GROUP_FLAG(group, FANOTIFY_INFO_MODES);
@@ -194,8 +201,7 @@ static struct fanotify_event *get_one_event(struct fsnotify_group *group,
 		goto out;
 
 	event = FANOTIFY_E(fsn_event);
-	if (info_mode)
-		event_size += fanotify_event_info_len(info_mode, event);
+	event_size = fanotify_event_len(info_mode, event);
 
 	if (event_size > count) {
 		event = ERR_PTR(-EINVAL);
@@ -537,8 +543,7 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group,
 
 	pr_debug("%s: group=%p event=%p\n", __func__, group, event);
 
-	metadata.event_len = FAN_EVENT_METADATA_LEN +
-				fanotify_event_info_len(info_mode, event);
+	metadata.event_len = fanotify_event_len(info_mode, event);
 	metadata.metadata_len = FAN_EVENT_METADATA_LEN;
 	metadata.vers = FANOTIFY_METADATA_VERSION;
 	metadata.reserved = 0;
-- 
2.33.0


  parent reply	other threads:[~2021-10-25 19:30 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-25 19:27 [PATCH v9 00/31] file system-wide error monitoring Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 01/31] fsnotify: pass data_type to fsnotify_name() Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 02/31] fsnotify: pass dentry instead of inode data Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 03/31] fsnotify: clarify contract for create event hooks Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 04/31] fsnotify: Don't insert unmergeable events in hashtable Gabriel Krisman Bertazi
2021-10-25 19:27 ` Gabriel Krisman Bertazi [this message]
2021-10-25 19:27 ` [PATCH v9 06/31] fanotify: Split fsid check from other fid mode checks Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 07/31] inotify: Don't force FS_IN_IGNORED Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 08/31] fsnotify: Add helper to detect overflow_event Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 09/31] fsnotify: Add wrapper around fsnotify_add_event Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 10/31] fsnotify: Retrieve super block from the data field Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 11/31] fsnotify: Protect fsnotify_handle_inode_event from no-inode events Gabriel Krisman Bertazi
2021-10-26  7:01   ` Amir Goldstein
2021-10-26 11:47   ` Jan Kara
2021-10-25 19:27 ` [PATCH v9 12/31] fsnotify: Pass group argument to free_event Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 13/31] fanotify: Support null inode event in fanotify_dfid_inode Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 14/31] fanotify: Allow file handle encoding for unhashed events Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 15/31] fanotify: Encode empty file handle when no inode is provided Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 16/31] fanotify: Require fid_mode for any non-fd event Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 17/31] fsnotify: Support FS_ERROR event type Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 18/31] fanotify: Reserve UAPI bits for FAN_FS_ERROR Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 19/31] fanotify: Pre-allocate pool of error events Gabriel Krisman Bertazi
2021-10-26  7:09   ` Amir Goldstein
2021-10-25 19:27 ` [PATCH v9 20/31] fanotify: Support enqueueing " Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 21/31] fanotify: Support merging " Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 22/31] fanotify: Wrap object_fh inline space in a creator macro Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 23/31] fanotify: Add helpers to decide whether to report FID/DFID Gabriel Krisman Bertazi
2021-10-26  7:02   ` Amir Goldstein
2021-10-25 19:27 ` [PATCH v9 24/31] fanotify: Report fid entry even for zero-length file_handle Gabriel Krisman Bertazi
2021-10-26  9:09   ` Amir Goldstein
2021-10-26 12:06     ` Jan Kara
2021-10-25 19:27 ` [PATCH v9 25/31] fanotify: WARN_ON against too large file handles Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 26/31] fanotify: Report fid info for file related file system errors Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 27/31] fanotify: Emit generic error info for error event Gabriel Krisman Bertazi
2021-10-26 12:11   ` Jan Kara
2021-10-25 19:27 ` [PATCH v9 28/31] fanotify: Allow users to request FAN_FS_ERROR events Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 29/31] ext4: Send notifications on error Gabriel Krisman Bertazi
2021-10-26  4:00   ` Theodore Ts'o
2021-10-26  7:05   ` Amir Goldstein
2021-10-26 12:12   ` Jan Kara
2021-10-25 19:27 ` [PATCH v9 30/31] samples: Add fs error monitoring example Gabriel Krisman Bertazi
2021-10-25 19:27 ` [PATCH v9 31/31] docs: Document the FAN_FS_ERROR event Gabriel Krisman Bertazi
2021-10-26 12:19   ` Jan Kara
2021-10-26  9:12 ` [PATCH v9 00/31] file system-wide error monitoring Amir Goldstein
2021-10-27 11:22   ` Jan Kara
2021-10-27 12:36     ` Amir Goldstein
2021-10-27 13:03       ` Gabriel Krisman Bertazi
2021-10-28  5:55         ` Amir Goldstein
2021-10-29 22:23           ` Gabriel Krisman Bertazi
2021-10-30  6:53             ` 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=20211025192746.66445-6-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=jack@suse.cz \
    --cc=kernel@collabora.com \
    --cc=khazhy@google.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).