Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec7147a9 authored by Jamie Bainbridge's avatar Jamie Bainbridge Committed by Steve French
Browse files

cifs: Ratelimit kernel log messages



Under some conditions, CIFS can repeatedly call the cifs_dbg() logging
wrapper. If done rapidly enough, the console framebuffer can softlockup
or "rcu_sched self-detected stall". Apply the built-in log ratelimiters
to prevent such hangs.

Signed-off-by: default avatarJamie Bainbridge <jamie.bainbridge@gmail.com>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
CC: Stable <stable@vger.kernel.org>
parent 7fdec82a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ void cifs_vfs_err(const char *fmt, ...)
	vaf.fmt = fmt;
	vaf.va = &args;

	pr_err("CIFS VFS: %pV", &vaf);
	pr_err_ratelimited("CIFS VFS: %pV", &vaf);

	va_end(args);
}
+4 −5
Original line number Diff line number Diff line
@@ -51,14 +51,13 @@ __printf(1, 2) void cifs_vfs_err(const char *fmt, ...);
/* information message: e.g., configuration, major event */
#define cifs_dbg(type, fmt, ...)					\
do {									\
	if (type == FYI) {						\
		if (cifsFYI & CIFS_INFO) {				\
			pr_debug("%s: " fmt, __FILE__, ##__VA_ARGS__);	\
		}							\
	if (type == FYI && cifsFYI & CIFS_INFO) {			\
		pr_debug_ratelimited("%s: "				\
			    fmt, __FILE__, ##__VA_ARGS__);		\
	} else if (type == VFS) {					\
		cifs_vfs_err(fmt, ##__VA_ARGS__);			\
	} else if (type == NOISY && type != 0) {			\
		pr_debug(fmt, ##__VA_ARGS__);				\
		pr_debug_ratelimited(fmt, ##__VA_ARGS__);		\
	}								\
} while (0)