Thread (59 messages) read the whole thread 59 messages, 4 authors, 2021-10-28

Re: [PATCH v8 23/32] fanotify: Wrap object_fh inline space in a creator macro

From: Amir Goldstein <amir73il@gmail.com>
Date: 2021-10-19 06:09:49
Also in: linux-ext4, linux-fsdevel

On Tue, Oct 19, 2021 at 3:03 AM Gabriel Krisman Bertazi
[off-list ref] wrote:
fanotify_error_event would duplicate this sequence of declarations that
already exist elsewhere with a slight different size.  Create a helper
macro to avoid code duplication.

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

with minor nit
---
Among the suggestions, I think this is simpler because it avoids
deep nesting the variable-sized attribute, which would have been hidden
inside fee->ffe->object_fh.buf.

It also avoids touching the allocators, which are nicely hidden inside
helper KMEM_CACHE() macros that hides several parameters.
I like this option best as well.
quoted hunk ↗ jump to hunk
---
 fs/notify/fanotify/fanotify.h | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/fs/notify/fanotify/fanotify.h b/fs/notify/fanotify/fanotify.h
index 2b032b79d5b0..a5e81d759f65 100644
--- a/fs/notify/fanotify/fanotify.h
+++ b/fs/notify/fanotify/fanotify.h
@@ -171,12 +171,19 @@ static inline void fanotify_init_event(struct fanotify_event *event,
        event->pid = NULL;
 }

+#define FANOTIFY_INLINE_FH(size)                                       \
+struct {                                                               \
+       struct fanotify_fh object_fh;                                   \
+       /* Space for object_fh.buf[] - access with fanotify_fh_buf() */ \
+       unsigned char _inline_fh_buf[(size)];                           \
+}
+
 struct fanotify_fid_event {
        struct fanotify_event fae;
        __kernel_fsid_t fsid;
-       struct fanotify_fh object_fh;
-       /* Reserve space in object_fh.buf[] - access with fanotify_fh_buf() */
-       unsigned char _inline_fh_buf[FANOTIFY_INLINE_FH_LEN];
+
+       /* This must be the last element of the structure. */
+       FANOTIFY_INLINE_FH(FANOTIFY_INLINE_FH_LEN);
 };
It's not true that is must be the last element.
this is only true for struct fanotify_fh with zero size buf[].

Thanks,
Amir.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help