From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Ren Subject: Re: linux-next: build failure after merge of the akpm-current tree Date: Thu, 12 Jan 2017 13:06:01 +0800 Message-ID: <8af7e322-9d1f-112e-3ab3-b8b310939d6f@suse.com> References: <20170112144933.7f161c69@canb.auug.org.au> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from smtp2.provo.novell.com ([137.65.250.81]:44552 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750704AbdALFHJ (ORCPT ); Thu, 12 Jan 2017 00:07:09 -0500 In-Reply-To: <20170112144933.7f161c69@canb.auug.org.au> Sender: linux-next-owner@vger.kernel.org List-ID: To: Stephen Rothwell , Andrew Morton Cc: linux-next@vger.kernel.org, linux-kernel@vger.kernel.org Hi Stephen, Thanks for your report and the fix for it. The 0-day project has reported several days ago, but this patch set is still in discussion, so I am waiting for more days to see if other developers have any other questions. I am confused that how to deal with your patch if I need to work out the V2 patch set. Perhaps, pick up your fix and add your efforts in the change log? Thanks, Eric On 01/12/2017 11:49 AM, Stephen Rothwell wrote: > Hi Andrew, > > After merging the akpm tree, today's linux-next build (powerpc > allyesconfig) failed like this: > > In file included from fs/ocfs2/file.c:49:0: > fs/ocfs2/file.c: In function 'ocfs2_permission': > fs/ocfs2/dlmglue.h:189:29: error: inlining failed in call to always_inline 'ocfs2_is_locked_by_me': function body not available > inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > ^ > fs/ocfs2/file.c:1345:16: error: called from here > has_locked = (ocfs2_is_locked_by_me(lockres) != NULL); > ^ > In file included from fs/ocfs2/file.c:49:0: > fs/ocfs2/dlmglue.h:189:29: error: inlining failed in call to always_inline 'ocfs2_is_locked_by_me': function body not available > inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > ^ > fs/ocfs2/file.c:1345:16: error: called from here > has_locked = (ocfs2_is_locked_by_me(lockres) != NULL); > ^ > In file included from fs/ocfs2/file.c:49:0: > fs/ocfs2/dlmglue.h:185:13: error: inlining failed in call to always_inline 'ocfs2_add_holder': function body not available > inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > ^ > fs/ocfs2/file.c:1353:3: error: called from here > ocfs2_add_holder(lockres, &oh); > ^ > In file included from fs/ocfs2/file.c:49:0: > fs/ocfs2/dlmglue.h:187:13: error: inlining failed in call to always_inline 'ocfs2_remove_holder': function body not available > inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > ^ > fs/ocfs2/file.c:1359:3: error: called from here > ocfs2_remove_holder(lockres, &oh); > ^ > In file included from fs/ocfs2/acl.c:31:0: > fs/ocfs2/acl.c: In function 'ocfs2_iop_set_acl': > fs/ocfs2/dlmglue.h:189:29: error: inlining failed in call to always_inline 'ocfs2_is_locked_by_me': function body not available > inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > ^ > fs/ocfs2/acl.c:292:16: error: called from here > has_locked = (ocfs2_is_locked_by_me(lockres) != NULL); > ^ > In file included from fs/ocfs2/acl.c:31:0: > fs/ocfs2/dlmglue.h:189:29: error: inlining failed in call to always_inline 'ocfs2_is_locked_by_me': function body not available > inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > ^ > fs/ocfs2/acl.c:292:16: error: called from here > has_locked = (ocfs2_is_locked_by_me(lockres) != NULL); > ^ > In file included from fs/ocfs2/acl.c:31:0: > fs/ocfs2/dlmglue.h:185:13: error: inlining failed in call to always_inline 'ocfs2_add_holder': function body not available > inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > ^ > fs/ocfs2/acl.c:302:3: error: called from here > ocfs2_add_holder(lockres, &oh); > ^ > In file included from fs/ocfs2/acl.c:31:0: > fs/ocfs2/dlmglue.h:187:13: error: inlining failed in call to always_inline 'ocfs2_remove_holder': function body not available > inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > ^ > fs/ocfs2/acl.c:307:3: error: called from here > ocfs2_remove_holder(lockres, &oh); > ^ > > Caused by commits > > 984c4659d463 ("ocfs2/dlmglue: prepare tracking logic to avoid recursive cluster lock") > 0ca17730270e ("ocfs2: fix deadlocks when taking inode lock at vfs entry points") > > I applied this fix patch for today: > > From: Stephen Rothwell > Date: Thu, 12 Jan 2017 14:40:03 +1100 > Subject: [PATCH] ocfs2/dmglue: do not inline functions whose bodies are not in > scope > > Signed-off-by: Stephen Rothwell > --- > fs/ocfs2/dlmglue.c | 6 +++--- > fs/ocfs2/dlmglue.h | 6 +++--- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c > index 951f5d9a0884..f0823f4d0afd 100644 > --- a/fs/ocfs2/dlmglue.c > +++ b/fs/ocfs2/dlmglue.c > @@ -750,7 +750,7 @@ void ocfs2_lock_res_free(struct ocfs2_lock_res *res) > res->l_flags = 0UL; > } > > -inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > +void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > struct ocfs2_holder *oh) > { > INIT_LIST_HEAD(&oh->oh_list); > @@ -761,7 +761,7 @@ inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > spin_unlock(&lockres->l_lock); > } > > -inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > +void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > struct ocfs2_holder *oh) > { > spin_lock(&lockres->l_lock); > @@ -771,7 +771,7 @@ inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > put_pid(oh->oh_owner_pid); > } > > -inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres) > +struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres) > { > struct ocfs2_holder *oh; > struct pid *pid; > diff --git a/fs/ocfs2/dlmglue.h b/fs/ocfs2/dlmglue.h > index d65ff1e49552..7f0c07bb30a3 100644 > --- a/fs/ocfs2/dlmglue.h > +++ b/fs/ocfs2/dlmglue.h > @@ -182,10 +182,10 @@ void ocfs2_set_locking_protocol(void); > * Keep a list of processes who have interest in a lockres. > * Note: this is now only uesed for check recursive cluster lock. > */ > -inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > +void ocfs2_add_holder(struct ocfs2_lock_res *lockres, > struct ocfs2_holder *oh); > -inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > +void ocfs2_remove_holder(struct ocfs2_lock_res *lockres, > struct ocfs2_holder *oh); > -inline struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > +struct ocfs2_holder *ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres); > > #endif /* DLMGLUE_H */