From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754775AbdCBRuj (ORCPT ); Thu, 2 Mar 2017 12:50:39 -0500 Received: from smtprelay0082.hostedemail.com ([216.40.44.82]:46490 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753834AbdCBRuV (ORCPT ); Thu, 2 Mar 2017 12:50:21 -0500 X-Session-Marker: 6A6F6540706572636865732E636F6D X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,joe@perches.com,:::::::::::::::::::::,RULES_HIT:41:355:379:541:599:800:960:973:988:989:1260:1277:1311:1313:1314:1345:1359:1373:1431:1437:1515:1516:1518:1534:1543:1593:1594:1711:1730:1747:1777:1792:2198:2199:2393:2559:2562:2828:3138:3139:3140:3141:3142:3355:3622:3865:3866:3867:3870:3871:3872:3874:4321:4605:5007:6119:7903:8603:9713:10004:10400:10848:11026:11232:11473:11658:11914:12296:12438:12555:12663:12740:12760:12895:13439:14093:14097:14181:14659:14721:21080:21451:30012:30054:30070:30091,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:2,LUA_SUMMARY:none X-HE-Tag: sink78_7047819055435 X-Filterd-Recvd-Size: 4412 Message-ID: <1488476770.2179.6.camel@perches.com> Subject: Re: [PATCH 24/26] ocfs2: reduce stack size with KASAN From: Joe Perches To: Arnd Bergmann , kasan-dev@googlegroups.com Cc: Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-wireless@vger.kernel.org, kernel-build-reports@lists.linaro.org, "David S . Miller" Date: Thu, 02 Mar 2017 09:46:10 -0800 In-Reply-To: <20170302163834.2273519-25-arnd@arndb.de> References: <20170302163834.2273519-1-arnd@arndb.de> <20170302163834.2273519-25-arnd@arndb.de> Content-Type: text/plain; charset="ISO-8859-1" X-Mailer: Evolution 3.22.3-0ubuntu0.1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2017-03-02 at 17:38 +0100, Arnd Bergmann wrote: > The internal logging infrastructure in ocfs2 causes special warning code to be > used with KASAN, which produces rather large stack frames: > fs/ocfs2/super.c: In function 'ocfs2_fill_super': > fs/ocfs2/super.c:1219:1: error: the frame size of 3264 bytes is larger than 3072 bytes [-Werror=frame-larger-than=] At least by default it doesn't seem to. gcc 6.2 allyesconfig, CONFIG_KASAN=y with either CONFIG_KASAN_INLINE or CONFIG_KASAN_OUTLINE gcc doesn't emit a stack warning > By simply passing the mask by value instead of reference, we can avoid the > problem completely. Any idea why that's so? > On 64-bit architectures, this is also more efficient, Efficient true, but the same overall stack no? > while on the less common (at least among ocfs2 users) 32-bit architectures, > I'm guessing that the resulting code is comparable to what it was before. > > The current version was introduced by Joe Perches as an optimization, maybe > he can see if my change regresses compared to his. I don't see it. > Cc: Joe Perches > Fixes: 7c2bd2f930ae ("ocfs2: reduce object size of mlog uses") > Signed-off-by: Arnd Bergmann > --- > fs/ocfs2/cluster/masklog.c | 10 +++++----- > fs/o cfs2/cluster/masklog.h | 4 ++-- > 2 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/fs/ocfs2/cluster/masklog.c b/fs/ocfs2/cluster/masklog.c > index d331c2386b94..9720c5443e4d 100644 > --- a/fs/ocfs2/cluster/masklog.c > +++ b/fs/ocfs2/cluster/masklog.c > @@ -64,7 +64,7 @@ static ssize_t mlog_mask_store(u64 mask, const char *buf, size_t count) > return count; > } > > -void __mlog_printk(const u64 *mask, const char *func, int line, > +void __mlog_printk(const u64 mask, const char *func, int line, > const char *fmt, ...) > { > struct va_format vaf; > @@ -72,14 +72,14 @@ void __mlog_printk(const u64 *mask, const char *func, int line, > const char *level; > const char *prefix = ""; > > - if (!__mlog_test_u64(*mask, mlog_and_bits) || > - __mlog_test_u64(*mask, mlog_not_bits)) > + if (!__mlog_test_u64(mask, mlog_and_bits) || > + __mlog_test_u64(mask, mlog_not_bits)) > return; > > - if (*mask & ML_ERROR) { > + if (mask & ML_ERROR) { > level = KERN_ERR; > prefix = "ERROR: "; > - } else if (*mask & ML_NOTICE) { > + } else if (mask & ML_NOTICE) { > level = KERN_NOTICE; > } else { > level = KERN_INFO; > diff --git a/fs/ocfs2/cluster/masklog.h b/fs/ocfs2/cluster/masklog.h > index 308ea0eb35fd..0d0f4bf2c3d8 100644 > --- a/fs/ocfs2/cluster/masklog.h > +++ b/fs/ocfs2/cluster/masklog.h > @@ -163,7 +163,7 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits; > #endif > > __printf(4, 5) > -void __mlog_printk(const u64 *m, const char *func, int line, > +void __mlog_printk(const u64 m, const char *func, int line, > const char *fmt, ...); > > /* > @@ -174,7 +174,7 @@ void __mlog_printk(const u64 *m, const char *func, int line, > do { \ > u64 _m = MLOG_MASK_PREFIX | (mask); \ > if (_m & ML_ALLOWED_BITS) \ > - __mlog_printk(&_m, __func__, __LINE__, fmt, \ > + __mlog_printk(_m, __func__, __LINE__, fmt, \ > ##__VA_ARGS__); \ > } while (0) >