Thread (25 messages) flat view 25 messages, 3 authors, 2021-06-16

Re: [PATCH v2 10/14] fsnotify: Introduce helpers to send error_events

From: Amir Goldstein <amir73il@gmail.com>
Date: 2021-06-16 09:38:51
Also in: linux-fsdevel

On Wed, Jun 16, 2021 at 2:56 AM Gabriel Krisman Bertazi
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
Introduce helpers for filesystems interested in reporting FS_ERROR
events.

Signed-off-by: Gabriel Krisman Bertazi <redacted>

---
Changes since v1:
  - Use the inode argument (Amir)
  - Protect s_fsnotify_marks with ifdef guard
---
 fs/notify/fsnotify.c             |  2 +-
 include/linux/fsnotify.h         | 20 ++++++++++++++++++++
 include/linux/fsnotify_backend.h |  1 +
 3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
index 36205a769dde..ac05eb3fb368 100644
--- a/fs/notify/fsnotify.c
+++ b/fs/notify/fsnotify.c
@@ -491,7 +491,7 @@ int __fsnotify(__u32 mask, const struct fsnotify_event_info *event_info)
                 */
                parent = event_info->dir;
        }
-       sb = inode->i_sb;
+       sb = event_info->sb ?: inode->i_sb;

        /*
         * Optimization: srcu_read_lock() has a memory barrier which can
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
index 8c2c681b4495..c0dbc5a65381 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -326,4 +326,24 @@ static inline void fsnotify_change(struct dentry *dentry, unsigned int ia_valid)
                fsnotify_dentry(dentry, mask);
 }

+static inline int fsnotify_sb_error(struct super_block *sb, struct inode *inode,
+                                       int error)
+{
+#ifdef CONFIG_FSNOTIFY
+       if (sb->s_fsnotify_marks) {
__fsnotify() has this optimization very early
so you do not need it here and you do not need the ifdef.
performance of fsnotify_sb_error() is utterly not important.
+               struct fs_error_report report = {
+                       .error = error,
+                       .inode = inode,
+               };
+
+               return __fsnotify(FS_ERROR, &(struct fsnotify_event_info) {
+                               .data = &report,
+                               .data_type = FSNOTIFY_EVENT_ERROR,
+                               .inode = NULL, .cookie = 0, .sb = sb
No need to set members to 0/NULL with this type of initializer.

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