From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751523AbdFGQVc (ORCPT ); Wed, 7 Jun 2017 12:21:32 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:41704 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750831AbdFGQVb (ORCPT ); Wed, 7 Jun 2017 12:21:31 -0400 Message-Id: <20170607162013.805609178@infradead.org> User-Agent: quilt/0.63-1 Date: Wed, 07 Jun 2017 18:15:04 +0200 From: Peter Zijlstra To: torvalds@linux-foundation.org, will.deacon@arm.com, oleg@redhat.com, paulmck@linux.vnet.ibm.com, benh@kernel.crashing.org, mpe@ellerman.id.au, npiggin@gmail.com Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, stern@rowland.harvard.edu, peterz@infradead.org, Al Viro Subject: [RFC][PATCH 3/5] overlayfs: Remove smp_mb__before_spinlock() usage References: <20170607161501.819948352@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline; filename=peterz-overlayfs.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org While we could replace the smp_mb__before_spinlock() with the new smp_mb__after_spinlock(), the normal pattern is to use smp_store_release() to publish an object that is used for lockless_dereference() -- and mirrors the regular rcu_assign_pointer() / rcu_dereference() patterns. Cc: Al Viro Signed-off-by: Peter Zijlstra (Intel) --- fs/overlayfs/readdir.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/fs/overlayfs/readdir.c +++ b/fs/overlayfs/readdir.c @@ -446,14 +446,14 @@ static int ovl_dir_fsync(struct file *fi ovl_path_upper(dentry, &upperpath); realfile = ovl_path_open(&upperpath, O_RDONLY); - smp_mb__before_spinlock(); + inode_lock(inode); if (!od->upperfile) { if (IS_ERR(realfile)) { inode_unlock(inode); return PTR_ERR(realfile); } - od->upperfile = realfile; + smp_store_release(&od->upperfile, realfile); } else { /* somebody has beaten us to it */ if (!IS_ERR(realfile))