Merge branch 'for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[sfrench/cifs-2.6.git] / fs / namei.c
index dede0147b3f6ec1f011c306f978b49926efb2b35..20831c2fbb347e56c7110a6c5ddd30d440dae487 100644 (file)
@@ -1066,7 +1066,7 @@ const char *get_link(struct nameidata *nd)
                return ERR_PTR(error);
 
        nd->last_type = LAST_BIND;
-       res = inode->i_link;
+       res = READ_ONCE(inode->i_link);
        if (!res) {
                const char * (*get)(struct dentry *, struct inode *,
                                struct delayed_call *);
@@ -4498,10 +4498,10 @@ out:
                inode_unlock(target);
        dput(new_dentry);
        if (!error) {
-               fsnotify_move(old_dir, new_dir, old_name.name, is_dir,
+               fsnotify_move(old_dir, new_dir, &old_name.name, is_dir,
                              !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
                if (flags & RENAME_EXCHANGE) {
-                       fsnotify_move(new_dir, old_dir, old_dentry->d_name.name,
+                       fsnotify_move(new_dir, old_dir, &old_dentry->d_name,
                                      new_is_dir, NULL, new_dentry);
                }
        }
@@ -4729,7 +4729,7 @@ int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
                spin_unlock(&inode->i_lock);
        }
 
-       link = inode->i_link;
+       link = READ_ONCE(inode->i_link);
        if (!link) {
                link = inode->i_op->get_link(dentry, inode, &done);
                if (IS_ERR(link))