From: Joe Perches <joe@perches.com>
To: Mark Fasheh <mfasheh@suse.com>, Joel Becker <jlbec@evilplan.org>,
Andrew Morton <akpm@linux-foundation.org>
Cc: ocfs2-devel@oss.oracle.com, LKML <linux-kernel@vger.kernel.org>
Subject: [Ocfs2-devel] [PATCH next] ocfs2: Reduce object size of mlog uses
Date: Fri, 17 Apr 2015 00:17:50 -0700 [thread overview]
Message-ID: <1429255070.2850.84.camel@perches.com> (raw)
Using a function for __mlog_printk instead of a macro
reduces the object size of built-in.o more than 120KB, or
~10% overall (x86-64 defconfig with all ocfs2 options)
$ size fs/ocfs2/built-in.o*
text data bss dec hex filename
936255 118071 134408 1188734 12237e fs/ocfs2/built-in.o.new
1064081 118071 134408 1316560 1416d0 fs/ocfs2/built-in.o.old
Miscellanea:
o Neaten macros around the __mlog_printk uses.
o Use __func__ for __PRETTY_FUNCTION__
o Use ##__VA_ARGS__ for args...
Signed-off-by: Joe Perches <joe@perches.com>
---
Compiled/untested
fs/ocfs2/cluster/masklog.c | 17 +++++++++++++++++
fs/ocfs2/cluster/masklog.h | 28 +++++++++++++++++-----------
2 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/fs/ocfs2/cluster/masklog.c b/fs/ocfs2/cluster/masklog.c
index af7598b..5b7a351 100644
--- a/fs/ocfs2/cluster/masklog.c
+++ b/fs/ocfs2/cluster/masklog.c
@@ -64,6 +64,23 @@ static ssize_t mlog_mask_store(u64 mask, const char *buf, size_t count)
return count;
}
+void __mlog_printk(const char *level, const char *func, int line,
+ const char *fmt, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, fmt);
+
+ vaf.fmt = fmt;
+ vaf.va = &args;
+
+ printk("%s(%s,%u,%lu):%s:%d %pV",
+ level, current->comm, task_pid_nr(current), __mlog_cpu_guess,
+ func, line, &vaf);
+
+ va_end(args);
+}
struct mlog_attribute {
struct attribute attr;
u64 mask;
diff --git a/fs/ocfs2/cluster/masklog.h b/fs/ocfs2/cluster/masklog.h
index 7fdc25a..6036e6a 100644
--- a/fs/ocfs2/cluster/masklog.h
+++ b/fs/ocfs2/cluster/masklog.h
@@ -168,7 +168,8 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
* scream. just do this instead of trying to guess which we're building
* against.. *sigh*.
*/
-#define __mlog_cpu_guess ({ \
+#define __mlog_cpu_guess \
+({ \
unsigned long _cpu = get_cpu(); \
put_cpu(); \
_cpu; \
@@ -178,21 +179,25 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
* before ##args is intentional. Otherwise, gcc 2.95 will eat the
* previous token if args expands to nothing.
*/
-#define __mlog_printk(level, fmt, args...) \
- printk(level "(%s,%u,%lu):%s:%d " fmt, current->comm, \
- task_pid_nr(current), __mlog_cpu_guess, \
- __PRETTY_FUNCTION__, __LINE__ , ##args)
+__printf(4, 5)
+void __mlog_printk(const char *level, const char *func, int line,
+ const char *fmt, ...);
-#define mlog(mask, fmt, args...) do { \
+#define mlog(mask, fmt, ...) \
+do { \
u64 __m = MLOG_MASK_PREFIX | (mask); \
if ((__m & ML_ALLOWED_BITS) && \
__mlog_test_u64(__m, mlog_and_bits) && \
!__mlog_test_u64(__m, mlog_not_bits)) { \
if (__m & ML_ERROR) \
- __mlog_printk(KERN_ERR, "ERROR: "fmt , ##args); \
+ __mlog_printk(KERN_ERR, __func__, __LINE__, \
+ "ERROR: " fmt, ##__VA_ARGS__); \
else if (__m & ML_NOTICE) \
- __mlog_printk(KERN_NOTICE, fmt , ##args); \
- else __mlog_printk(KERN_INFO, fmt , ##args); \
+ __mlog_printk(KERN_NOTICE, __func__, __LINE__, \
+ fmt, ##__VA_ARGS__); \
+ else \
+ __mlog_printk(KERN_INFO, __func__, __LINE__, \
+ fmt, ##__VA_ARGS__); \
} \
} while (0)
@@ -205,10 +210,11 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
_st; \
})
-#define mlog_bug_on_msg(cond, fmt, args...) do { \
+#define mlog_bug_on_msg(cond, fmt, ...) \
+do { \
if (cond) { \
mlog(ML_ERROR, "bug expression: " #cond "\n"); \
- mlog(ML_ERROR, fmt, ##args); \
+ mlog(ML_ERROR, fmt, ##__VA_ARGS__); \
BUG(); \
} \
} while (0)
WARNING: multiple messages have this Message-ID (diff)
From: Joe Perches <joe@perches.com>
To: Mark Fasheh <mfasheh@suse.com>, Joel Becker <jlbec@evilplan.org>,
Andrew Morton <akpm@linux-foundation.org>
Cc: ocfs2-devel@oss.oracle.com, LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH next] ocfs2: Reduce object size of mlog uses
Date: Fri, 17 Apr 2015 00:17:50 -0700 [thread overview]
Message-ID: <1429255070.2850.84.camel@perches.com> (raw)
Using a function for __mlog_printk instead of a macro
reduces the object size of built-in.o more than 120KB, or
~10% overall (x86-64 defconfig with all ocfs2 options)
$ size fs/ocfs2/built-in.o*
text data bss dec hex filename
936255 118071 134408 1188734 12237e fs/ocfs2/built-in.o.new
1064081 118071 134408 1316560 1416d0 fs/ocfs2/built-in.o.old
Miscellanea:
o Neaten macros around the __mlog_printk uses.
o Use __func__ for __PRETTY_FUNCTION__
o Use ##__VA_ARGS__ for args...
Signed-off-by: Joe Perches <joe@perches.com>
---
Compiled/untested
fs/ocfs2/cluster/masklog.c | 17 +++++++++++++++++
fs/ocfs2/cluster/masklog.h | 28 +++++++++++++++++-----------
2 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/fs/ocfs2/cluster/masklog.c b/fs/ocfs2/cluster/masklog.c
index af7598b..5b7a351 100644
--- a/fs/ocfs2/cluster/masklog.c
+++ b/fs/ocfs2/cluster/masklog.c
@@ -64,6 +64,23 @@ static ssize_t mlog_mask_store(u64 mask, const char *buf, size_t count)
return count;
}
+void __mlog_printk(const char *level, const char *func, int line,
+ const char *fmt, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, fmt);
+
+ vaf.fmt = fmt;
+ vaf.va = &args;
+
+ printk("%s(%s,%u,%lu):%s:%d %pV",
+ level, current->comm, task_pid_nr(current), __mlog_cpu_guess,
+ func, line, &vaf);
+
+ va_end(args);
+}
struct mlog_attribute {
struct attribute attr;
u64 mask;
diff --git a/fs/ocfs2/cluster/masklog.h b/fs/ocfs2/cluster/masklog.h
index 7fdc25a..6036e6a 100644
--- a/fs/ocfs2/cluster/masklog.h
+++ b/fs/ocfs2/cluster/masklog.h
@@ -168,7 +168,8 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
* scream. just do this instead of trying to guess which we're building
* against.. *sigh*.
*/
-#define __mlog_cpu_guess ({ \
+#define __mlog_cpu_guess \
+({ \
unsigned long _cpu = get_cpu(); \
put_cpu(); \
_cpu; \
@@ -178,21 +179,25 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
* before ##args is intentional. Otherwise, gcc 2.95 will eat the
* previous token if args expands to nothing.
*/
-#define __mlog_printk(level, fmt, args...) \
- printk(level "(%s,%u,%lu):%s:%d " fmt, current->comm, \
- task_pid_nr(current), __mlog_cpu_guess, \
- __PRETTY_FUNCTION__, __LINE__ , ##args)
+__printf(4, 5)
+void __mlog_printk(const char *level, const char *func, int line,
+ const char *fmt, ...);
-#define mlog(mask, fmt, args...) do { \
+#define mlog(mask, fmt, ...) \
+do { \
u64 __m = MLOG_MASK_PREFIX | (mask); \
if ((__m & ML_ALLOWED_BITS) && \
__mlog_test_u64(__m, mlog_and_bits) && \
!__mlog_test_u64(__m, mlog_not_bits)) { \
if (__m & ML_ERROR) \
- __mlog_printk(KERN_ERR, "ERROR: "fmt , ##args); \
+ __mlog_printk(KERN_ERR, __func__, __LINE__, \
+ "ERROR: " fmt, ##__VA_ARGS__); \
else if (__m & ML_NOTICE) \
- __mlog_printk(KERN_NOTICE, fmt , ##args); \
- else __mlog_printk(KERN_INFO, fmt , ##args); \
+ __mlog_printk(KERN_NOTICE, __func__, __LINE__, \
+ fmt, ##__VA_ARGS__); \
+ else \
+ __mlog_printk(KERN_INFO, __func__, __LINE__, \
+ fmt, ##__VA_ARGS__); \
} \
} while (0)
@@ -205,10 +210,11 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
_st; \
})
-#define mlog_bug_on_msg(cond, fmt, args...) do { \
+#define mlog_bug_on_msg(cond, fmt, ...) \
+do { \
if (cond) { \
mlog(ML_ERROR, "bug expression: " #cond "\n"); \
- mlog(ML_ERROR, fmt, ##args); \
+ mlog(ML_ERROR, fmt, ##__VA_ARGS__); \
BUG(); \
} \
} while (0)
next reply other threads:[~2015-04-17 7:17 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-17 7:17 Joe Perches [this message]
2015-04-17 7:17 ` [PATCH next] ocfs2: Reduce object size of mlog uses Joe Perches
2015-04-22 22:46 ` [Ocfs2-devel] " Andrew Morton
2015-04-22 22:46 ` Andrew Morton
2015-04-23 2:34 ` [Ocfs2-devel] " Joe Perches
2015-04-23 2:34 ` Joe Perches
2015-04-23 7:25 ` [Ocfs2-devel] [PATCH V2 -next] " Joe Perches
2015-04-23 7:25 ` Joe Perches
2015-04-23 23:04 ` [Ocfs2-devel] [PATCH next] " Mark Fasheh
2015-04-23 23:04 ` Mark Fasheh
2015-04-23 23:19 ` [Ocfs2-devel] " Andrew Morton
2015-04-23 23:19 ` Andrew Morton
2015-04-23 23:37 ` [Ocfs2-devel] " Richard Weinberger
2015-04-23 23:37 ` Richard Weinberger
2015-04-24 20:31 ` [Ocfs2-devel] " Mark Fasheh
2015-04-24 20:31 ` Mark Fasheh
2015-04-23 23:35 ` Joe Perches
2015-04-23 23:35 ` Joe Perches
2015-04-28 18:30 ` [Ocfs2-devel] " Mark Fasheh
2015-04-28 18:30 ` Mark Fasheh
2015-04-30 5:05 ` Joe Perches
2015-04-30 5:05 ` Joe Perches
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=1429255070.2850.84.camel@perches.com \
--to=joe@perches.com \
--cc=akpm@linux-foundation.org \
--cc=jlbec@evilplan.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mfasheh@suse.com \
--cc=ocfs2-devel@oss.oracle.com \
/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 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.