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 <v...@zeniv.linux.org.uk>
Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
---
 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))


Reply via email to