All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes
@ 2024-07-24 19:06 cel
  2024-07-24 19:06 ` [PATCH v5.15.y 1/4] samples: Add fs error monitoring example cel
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: cel @ 2024-07-24 19:06 UTC (permalink / raw)
  To: amir73il, krisman
  Cc: gregkh, jack, sashal, stable, adilger.kernel, linux-ext4, tytso,
	alexey.makhalov, vasavi.sirnapalli, florian.fainelli, Chuck Lever

From: Chuck Lever <chuck.lever@oracle.com>

These extra commits were requested by Amir Goldstein
<amir73il@gmail.com>. Note that c0baf9ac0b05 ("docs: Document the
FAN_FS_ERROR event") is already applied to v5.15.y.

Gabriel Krisman Bertazi (3):
  samples: Add fs error monitoring example
  samples: Make fs-monitor depend on libc and headers
  docs: Fix formatting of literal sections in fanotify docs

Linus Torvalds (1):
  Add gitignore file for samples/fanotify/ subdirectory

 .../admin-guide/filesystem-monitoring.rst     |  20 ++-
 samples/Kconfig                               |   9 ++
 samples/Makefile                              |   1 +
 samples/fanotify/.gitignore                   |   1 +
 samples/fanotify/Makefile                     |   5 +
 samples/fanotify/fs-monitor.c                 | 142 ++++++++++++++++++
 6 files changed, 170 insertions(+), 8 deletions(-)
 create mode 100644 samples/fanotify/.gitignore
 create mode 100644 samples/fanotify/Makefile
 create mode 100644 samples/fanotify/fs-monitor.c

-- 
2.45.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v5.15.y 1/4] samples: Add fs error monitoring example
  2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
@ 2024-07-24 19:06 ` cel
  2024-07-24 19:06 ` [PATCH v5.15.y 2/4] samples: Make fs-monitor depend on libc and headers cel
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: cel @ 2024-07-24 19:06 UTC (permalink / raw)
  To: amir73il, krisman
  Cc: gregkh, jack, sashal, stable, adilger.kernel, linux-ext4, tytso,
	alexey.makhalov, vasavi.sirnapalli, florian.fainelli

From: Gabriel Krisman Bertazi <krisman@collabora.com>

[ Upstream commit 5451093081db6ca1a708d149e11cfd219800bc4c ]

Introduce an example of a FAN_FS_ERROR fanotify user to track filesystem
errors.

Link: https://lore.kernel.org/r/20211025192746.66445-31-krisman@collabora.com
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 samples/Kconfig               |   9 +++
 samples/Makefile              |   1 +
 samples/fanotify/Makefile     |   5 ++
 samples/fanotify/fs-monitor.c | 142 ++++++++++++++++++++++++++++++++++
 4 files changed, 157 insertions(+)
 create mode 100644 samples/fanotify/Makefile
 create mode 100644 samples/fanotify/fs-monitor.c

diff --git a/samples/Kconfig b/samples/Kconfig
index b0503ef058d3..88353b8eac0b 100644
--- a/samples/Kconfig
+++ b/samples/Kconfig
@@ -120,6 +120,15 @@ config SAMPLE_CONNECTOR
 	  with it.
 	  See also Documentation/driver-api/connector.rst
 
+config SAMPLE_FANOTIFY_ERROR
+	bool "Build fanotify error monitoring sample"
+	depends on FANOTIFY
+	help
+	  When enabled, this builds an example code that uses the
+	  FAN_FS_ERROR fanotify mechanism to monitor filesystem
+	  errors.
+	  See also Documentation/admin-guide/filesystem-monitoring.rst.
+
 config SAMPLE_HIDRAW
 	bool "hidraw sample"
 	depends on CC_CAN_LINK && HEADERS_INSTALL
diff --git a/samples/Makefile b/samples/Makefile
index 087e0988ccc5..931a81847c48 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -5,6 +5,7 @@ subdir-$(CONFIG_SAMPLE_AUXDISPLAY)	+= auxdisplay
 subdir-$(CONFIG_SAMPLE_ANDROID_BINDERFS) += binderfs
 obj-$(CONFIG_SAMPLE_CONFIGFS)		+= configfs/
 obj-$(CONFIG_SAMPLE_CONNECTOR)		+= connector/
+obj-$(CONFIG_SAMPLE_FANOTIFY_ERROR)	+= fanotify/
 subdir-$(CONFIG_SAMPLE_HIDRAW)		+= hidraw
 obj-$(CONFIG_SAMPLE_HW_BREAKPOINT)	+= hw_breakpoint/
 obj-$(CONFIG_SAMPLE_KDB)		+= kdb/
diff --git a/samples/fanotify/Makefile b/samples/fanotify/Makefile
new file mode 100644
index 000000000000..e20db1bdde3b
--- /dev/null
+++ b/samples/fanotify/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0-only
+userprogs-always-y += fs-monitor
+
+userccflags += -I usr/include -Wall
+
diff --git a/samples/fanotify/fs-monitor.c b/samples/fanotify/fs-monitor.c
new file mode 100644
index 000000000000..a0e44cd31e6f
--- /dev/null
+++ b/samples/fanotify/fs-monitor.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2021, Collabora Ltd.
+ */
+
+#define _GNU_SOURCE
+#include <errno.h>
+#include <err.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/fanotify.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#ifndef FAN_FS_ERROR
+#define FAN_FS_ERROR		0x00008000
+#define FAN_EVENT_INFO_TYPE_ERROR	5
+
+struct fanotify_event_info_error {
+	struct fanotify_event_info_header hdr;
+	__s32 error;
+	__u32 error_count;
+};
+#endif
+
+#ifndef FILEID_INO32_GEN
+#define FILEID_INO32_GEN	1
+#endif
+
+#ifndef FILEID_INVALID
+#define	FILEID_INVALID		0xff
+#endif
+
+static void print_fh(struct file_handle *fh)
+{
+	int i;
+	uint32_t *h = (uint32_t *) fh->f_handle;
+
+	printf("\tfh: ");
+	for (i = 0; i < fh->handle_bytes; i++)
+		printf("%hhx", fh->f_handle[i]);
+	printf("\n");
+
+	printf("\tdecoded fh: ");
+	if (fh->handle_type == FILEID_INO32_GEN)
+		printf("inode=%u gen=%u\n", h[0], h[1]);
+	else if (fh->handle_type == FILEID_INVALID && !fh->handle_bytes)
+		printf("Type %d (Superblock error)\n", fh->handle_type);
+	else
+		printf("Type %d (Unknown)\n", fh->handle_type);
+
+}
+
+static void handle_notifications(char *buffer, int len)
+{
+	struct fanotify_event_metadata *event =
+		(struct fanotify_event_metadata *) buffer;
+	struct fanotify_event_info_header *info;
+	struct fanotify_event_info_error *err;
+	struct fanotify_event_info_fid *fid;
+	int off;
+
+	for (; FAN_EVENT_OK(event, len); event = FAN_EVENT_NEXT(event, len)) {
+
+		if (event->mask != FAN_FS_ERROR) {
+			printf("unexpected FAN MARK: %llx\n", event->mask);
+			goto next_event;
+		}
+
+		if (event->fd != FAN_NOFD) {
+			printf("Unexpected fd (!= FAN_NOFD)\n");
+			goto next_event;
+		}
+
+		printf("FAN_FS_ERROR (len=%d)\n", event->event_len);
+
+		for (off = sizeof(*event) ; off < event->event_len;
+		     off += info->len) {
+			info = (struct fanotify_event_info_header *)
+				((char *) event + off);
+
+			switch (info->info_type) {
+			case FAN_EVENT_INFO_TYPE_ERROR:
+				err = (struct fanotify_event_info_error *) info;
+
+				printf("\tGeneric Error Record: len=%d\n",
+				       err->hdr.len);
+				printf("\terror: %d\n", err->error);
+				printf("\terror_count: %d\n", err->error_count);
+				break;
+
+			case FAN_EVENT_INFO_TYPE_FID:
+				fid = (struct fanotify_event_info_fid *) info;
+
+				printf("\tfsid: %x%x\n",
+				       fid->fsid.val[0], fid->fsid.val[1]);
+				print_fh((struct file_handle *) &fid->handle);
+				break;
+
+			default:
+				printf("\tUnknown info type=%d len=%d:\n",
+				       info->info_type, info->len);
+			}
+		}
+next_event:
+		printf("---\n\n");
+	}
+}
+
+int main(int argc, char **argv)
+{
+	int fd;
+
+	char buffer[BUFSIZ];
+
+	if (argc < 2) {
+		printf("Missing path argument\n");
+		return 1;
+	}
+
+	fd = fanotify_init(FAN_CLASS_NOTIF|FAN_REPORT_FID, O_RDONLY);
+	if (fd < 0)
+		errx(1, "fanotify_init");
+
+	if (fanotify_mark(fd, FAN_MARK_ADD|FAN_MARK_FILESYSTEM,
+			  FAN_FS_ERROR, AT_FDCWD, argv[1])) {
+		errx(1, "fanotify_mark");
+	}
+
+	while (1) {
+		int n = read(fd, buffer, BUFSIZ);
+
+		if (n < 0)
+			errx(1, "read");
+
+		handle_notifications(buffer, n);
+	}
+
+	return 0;
+}
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5.15.y 2/4] samples: Make fs-monitor depend on libc and headers
  2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
  2024-07-24 19:06 ` [PATCH v5.15.y 1/4] samples: Add fs error monitoring example cel
@ 2024-07-24 19:06 ` cel
  2024-07-24 19:06 ` [PATCH v5.15.y 3/4] docs: Fix formatting of literal sections in fanotify docs cel
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: cel @ 2024-07-24 19:06 UTC (permalink / raw)
  To: amir73il, krisman
  Cc: gregkh, jack, sashal, stable, adilger.kernel, linux-ext4, tytso,
	alexey.makhalov, vasavi.sirnapalli, florian.fainelli,
	Guenter Roeck

From: Gabriel Krisman Bertazi <krisman@collabora.com>

[ Upstream commit 8fc70b3a142f97f7859bf052151df896933d2586 ]

Prevent build errors when headers or libc are not available, such as on
kernel build bots, like the below:

samples/fanotify/fs-monitor.c:7:10: fatal error: errno.h: No such file
or directory
  7 | #include <errno.h>
    |          ^~~~~~~~~

Link: https://lore.kernel.org/r/87fsslasgz.fsf@collabora.com
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 samples/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/samples/Kconfig b/samples/Kconfig
index 88353b8eac0b..56539b21f2c7 100644
--- a/samples/Kconfig
+++ b/samples/Kconfig
@@ -122,7 +122,7 @@ config SAMPLE_CONNECTOR
 
 config SAMPLE_FANOTIFY_ERROR
 	bool "Build fanotify error monitoring sample"
-	depends on FANOTIFY
+	depends on FANOTIFY && CC_CAN_LINK && HEADERS_INSTALL
 	help
 	  When enabled, this builds an example code that uses the
 	  FAN_FS_ERROR fanotify mechanism to monitor filesystem
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5.15.y 3/4] docs: Fix formatting of literal sections in fanotify docs
  2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
  2024-07-24 19:06 ` [PATCH v5.15.y 1/4] samples: Add fs error monitoring example cel
  2024-07-24 19:06 ` [PATCH v5.15.y 2/4] samples: Make fs-monitor depend on libc and headers cel
@ 2024-07-24 19:06 ` cel
  2024-07-24 19:06 ` [PATCH v5.15.y 4/4] Add gitignore file for samples/fanotify/ subdirectory cel
  2024-07-25 12:29 ` [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes Greg KH
  4 siblings, 0 replies; 6+ messages in thread
From: cel @ 2024-07-24 19:06 UTC (permalink / raw)
  To: amir73il, krisman
  Cc: gregkh, jack, sashal, stable, adilger.kernel, linux-ext4, tytso,
	alexey.makhalov, vasavi.sirnapalli, florian.fainelli,
	Stephen Rothwell

From: Gabriel Krisman Bertazi <krisman@collabora.com>

[ Upstream commit 9abeae5d4458326e16df7ea237104b58c27dfd77 ]

Stephen Rothwell reported the following warning was introduced by commit
c0baf9ac0b05 ("docs: Document the FAN_FS_ERROR event").

Documentation/admin-guide/filesystem-monitoring.rst:60: WARNING:
 Definition list ends without a blank line; unexpected unindent.

Link: https://lore.kernel.org/r/87y26camhe.fsf@collabora.com
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 .../admin-guide/filesystem-monitoring.rst     | 20 +++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/Documentation/admin-guide/filesystem-monitoring.rst b/Documentation/admin-guide/filesystem-monitoring.rst
index 5a3c84e60095..ab8dba76283c 100644
--- a/Documentation/admin-guide/filesystem-monitoring.rst
+++ b/Documentation/admin-guide/filesystem-monitoring.rst
@@ -35,9 +35,11 @@ notifications is Ext4.
 
 A FAN_FS_ERROR Notification has the following format::
 
-  [ Notification Metadata (Mandatory) ]
-  [ Generic Error Record  (Mandatory) ]
-  [ FID record            (Mandatory) ]
+  ::
+
+     [ Notification Metadata (Mandatory) ]
+     [ Generic Error Record  (Mandatory) ]
+     [ FID record            (Mandatory) ]
 
 The order of records is not guaranteed, and new records might be added
 in the future.  Therefore, applications must not rely on the order and
@@ -53,11 +55,13 @@ providing any additional details about the problem.  This record is
 identified by ``struct fanotify_event_info_header.info_type`` being set
 to FAN_EVENT_INFO_TYPE_ERROR.
 
-  struct fanotify_event_info_error {
-	struct fanotify_event_info_header hdr;
-	__s32 error;
-	__u32 error_count;
-  };
+  ::
+
+     struct fanotify_event_info_error {
+          struct fanotify_event_info_header hdr;
+         __s32 error;
+         __u32 error_count;
+     };
 
 The `error` field identifies the type of error using errno values.
 `error_count` tracks the number of errors that occurred and were
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v5.15.y 4/4] Add gitignore file for samples/fanotify/ subdirectory
  2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
                   ` (2 preceding siblings ...)
  2024-07-24 19:06 ` [PATCH v5.15.y 3/4] docs: Fix formatting of literal sections in fanotify docs cel
@ 2024-07-24 19:06 ` cel
  2024-07-25 12:29 ` [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes Greg KH
  4 siblings, 0 replies; 6+ messages in thread
From: cel @ 2024-07-24 19:06 UTC (permalink / raw)
  To: amir73il, krisman
  Cc: gregkh, jack, sashal, stable, adilger.kernel, linux-ext4, tytso,
	alexey.makhalov, vasavi.sirnapalli, florian.fainelli,
	Linus Torvalds

From: Linus Torvalds <torvalds@linux-foundation.org>

[ Upstream commit c107fb9b4f8338375b3e865c3d2c1d98ccb3a95a ]

Commit 5451093081db ("samples: Add fs error monitoring example") added a
new sample program, but didn't teach git to ignore the new generated
files, causing unnecessary noise from 'git status' after a full build.

Add the 'fs-monitor' sample executable to the .gitignore for this
subdirectory to silence it all again.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 samples/fanotify/.gitignore | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 samples/fanotify/.gitignore

diff --git a/samples/fanotify/.gitignore b/samples/fanotify/.gitignore
new file mode 100644
index 000000000000..d74593e8b2de
--- /dev/null
+++ b/samples/fanotify/.gitignore
@@ -0,0 +1 @@
+fs-monitor
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes
  2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
                   ` (3 preceding siblings ...)
  2024-07-24 19:06 ` [PATCH v5.15.y 4/4] Add gitignore file for samples/fanotify/ subdirectory cel
@ 2024-07-25 12:29 ` Greg KH
  4 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2024-07-25 12:29 UTC (permalink / raw)
  To: cel
  Cc: amir73il, krisman, jack, sashal, stable, adilger.kernel,
	linux-ext4, tytso, alexey.makhalov, vasavi.sirnapalli,
	florian.fainelli, Chuck Lever

On Wed, Jul 24, 2024 at 03:06:19PM -0400, cel@kernel.org wrote:
> From: Chuck Lever <chuck.lever@oracle.com>
> 
> These extra commits were requested by Amir Goldstein
> <amir73il@gmail.com>. Note that c0baf9ac0b05 ("docs: Document the
> FAN_FS_ERROR event") is already applied to v5.15.y.
> 
> Gabriel Krisman Bertazi (3):
>   samples: Add fs error monitoring example
>   samples: Make fs-monitor depend on libc and headers
>   docs: Fix formatting of literal sections in fanotify docs
> 
> Linus Torvalds (1):
>   Add gitignore file for samples/fanotify/ subdirectory
> 
>  .../admin-guide/filesystem-monitoring.rst     |  20 ++-
>  samples/Kconfig                               |   9 ++
>  samples/Makefile                              |   1 +
>  samples/fanotify/.gitignore                   |   1 +
>  samples/fanotify/Makefile                     |   5 +
>  samples/fanotify/fs-monitor.c                 | 142 ++++++++++++++++++
>  6 files changed, 170 insertions(+), 8 deletions(-)
>  create mode 100644 samples/fanotify/.gitignore
>  create mode 100644 samples/fanotify/Makefile
>  create mode 100644 samples/fanotify/fs-monitor.c
> 
> -- 
> 2.45.2
> 
> 

All now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-07-25 12:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-24 19:06 [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes cel
2024-07-24 19:06 ` [PATCH v5.15.y 1/4] samples: Add fs error monitoring example cel
2024-07-24 19:06 ` [PATCH v5.15.y 2/4] samples: Make fs-monitor depend on libc and headers cel
2024-07-24 19:06 ` [PATCH v5.15.y 3/4] docs: Fix formatting of literal sections in fanotify docs cel
2024-07-24 19:06 ` [PATCH v5.15.y 4/4] Add gitignore file for samples/fanotify/ subdirectory cel
2024-07-25 12:29 ` [PATCH v5.15.y 0/4] Apply fanotify-related documentation changes Greg KH

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.