switch d_materialise_unique() users to d_splice_alias()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 13 Oct 2014 02:24:21 +0000 (22:24 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 19 Nov 2014 18:01:20 +0000 (13:01 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Documentation/filesystems/nfs/Exporting
Documentation/filesystems/porting
fs/9p/vfs_inode.c
fs/btrfs/inode.c
fs/ceph/inode.c
fs/cifs/readdir.c
fs/fuse/dir.c
fs/kernfs/dir.c
fs/nfs/dir.c
fs/nfs/getroot.c
include/linux/dcache.h

index c8f036a..520a4be 100644 (file)
@@ -72,24 +72,11 @@ c/ Helper routines to allocate anonymous dentries, and to help attach
         DCACHE_DISCONNECTED) dentry is allocated and attached.
       In the case of a directory, care is taken that only one dentry
       can ever be attached.
-    d_splice_alias(inode, dentry) or d_materialise_unique(dentry, inode)
-      will introduce a new dentry into the tree; either the passed-in
-      dentry or a preexisting alias for the given inode (such as an
-      anonymous one created by d_obtain_alias), if appropriate.  The two
-      functions differ in their handling of directories with preexisting
-      aliases:
-        d_splice_alias will use any existing IS_ROOT dentry, but it will
-         return -EIO rather than try to move a dentry with a different
-         parent.  This is appropriate for local filesystems, which
-         should never see such an alias unless the filesystem is
-         corrupted somehow (for example, if two on-disk directory
-         entries refer to the same directory.)
-       d_materialise_unique will attempt to move any dentry.  This is
-         appropriate for distributed filesystems, where finding a
-         directory other than where we last cached it may be a normal
-         consequence of concurrent operations on other hosts.
-      Both functions return NULL when the passed-in dentry is used,
-      following the calling convention of ->lookup.
+    d_splice_alias(inode, dentry) will introduce a new dentry into the tree;
+      either the passed-in dentry or a preexisting alias for the given inode
+      (such as an anonymous one created by d_obtain_alias), if appropriate.
+      It returns NULL when the passed-in dentry is used, following the calling
+      convention of ->lookup.
 
  
 Filesystem Issues
index 0f3a139..b6b55a9 100644 (file)
@@ -463,3 +463,7 @@ in your dentry operations instead.
        of the in-tree instances did).  inode_hash_lock is still held,
        of course, so they are still serialized wrt removal from inode hash,
        as well as wrt set() callback of iget5_locked().
+--
+[mandatory]
+       d_materialise_unique() is gone; d_splice_alias() does everything you
+       need now.  Remember that they have opposite orders of arguments ;-/
index 296482f..9ee5343 100644 (file)
@@ -832,7 +832,7 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
         * moved b under k and client parallely did a lookup for
         * k/b.
         */
-       res = d_materialise_unique(dentry, inode);
+       res = d_splice_alias(inode, dentry);
        if (!res)
                v9fs_fid_add(dentry, fid);
        else if (!IS_ERR(res))
index d23362f..ff0dcc0 100644 (file)
@@ -5303,7 +5303,7 @@ static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
                        return ERR_CAST(inode);
        }
 
-       return d_materialise_unique(dentry, inode);
+       return d_splice_alias(inode, dentry);
 }
 
 unsigned char btrfs_filetype_table[] = {
index 7a1df90..90ec8e3 100644 (file)
@@ -967,7 +967,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
        /* dn must be unhashed */
        if (!d_unhashed(dn))
                d_drop(dn);
-       realdn = d_materialise_unique(dn, in);
+       realdn = d_splice_alias(in, dn);
        if (IS_ERR(realdn)) {
                pr_err("splice_dentry error %ld %p inode %p ino %llx.%llx\n",
                       PTR_ERR(realdn), dn, in, ceph_vinop(in));
index 8fd2a95..586e3d3 100644 (file)
@@ -123,7 +123,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
        if (!inode)
                goto out;
 
-       alias = d_materialise_unique(dentry, inode);
+       alias = d_splice_alias(inode, dentry);
        if (alias && !IS_ERR(alias))
                dput(alias);
 out:
index dbab798..df562cc 100644 (file)
@@ -372,7 +372,7 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
        if (inode && get_node_id(inode) == FUSE_ROOT_ID)
                goto out_iput;
 
-       newent = d_materialise_unique(entry, inode);
+       newent = d_splice_alias(inode, entry);
        err = PTR_ERR(newent);
        if (IS_ERR(newent))
                goto out_err;
@@ -1320,7 +1320,7 @@ static int fuse_direntplus_link(struct file *file,
        if (!inode)
                goto out;
 
-       alias = d_materialise_unique(dentry, inode);
+       alias = d_splice_alias(inode, dentry);
        err = PTR_ERR(alias);
        if (IS_ERR(alias))
                goto out;
index 1c77193..37989f0 100644 (file)
@@ -807,7 +807,7 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir,
        }
 
        /* instantiate and hash dentry */
-       ret = d_materialise_unique(dentry, inode);
+       ret = d_splice_alias(inode, dentry);
  out_unlock:
        mutex_unlock(&kernfs_mutex);
        return ret;
index 06e8cfc..44d7d0c 100644 (file)
@@ -499,7 +499,7 @@ void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry)
        if (IS_ERR(inode))
                goto out;
 
-       alias = d_materialise_unique(dentry, inode);
+       alias = d_splice_alias(inode, dentry);
        if (IS_ERR(alias))
                goto out;
        else if (alias) {
@@ -1393,7 +1393,7 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
        nfs_advise_use_readdirplus(dir);
 
 no_entry:
-       res = d_materialise_unique(dentry, inode);
+       res = d_splice_alias(inode, dentry);
        if (res != NULL) {
                if (IS_ERR(res))
                        goto out_unblock_sillyrename;
index ebc6a0a..9ac3846 100644 (file)
@@ -51,7 +51,7 @@ static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *i
                /*
                 * Ensure that this dentry is invisible to d_find_alias().
                 * Otherwise, it may be spliced into the tree by
-                * d_materialise_unique if a parent directory from the same
+                * d_splice_alias if a parent directory from the same
                 * filesystem gets mounted at a later time.
                 * This again causes shrink_dcache_for_umount_subtree() to
                 * Oops, since the test for IS_ROOT() will fail.
index ee569da..5a81398 100644 (file)
@@ -230,7 +230,6 @@ extern seqlock_t rename_lock;
  */
 extern void d_instantiate(struct dentry *, struct inode *);
 extern struct dentry * d_instantiate_unique(struct dentry *, struct inode *);
-#define d_materialise_unique(d, i) d_splice_alias(i, d)
 extern int d_instantiate_no_diralias(struct dentry *, struct inode *);
 extern void __d_drop(struct dentry *dentry);
 extern void d_drop(struct dentry *dentry);