Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41d28bca authored by Al Viro's avatar Al Viro
Browse files

switch d_materialise_unique() users to d_splice_alias()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent b5ae6b15
Loading
Loading
Loading
Loading
+5 −18
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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 ;-/
+1 −1
Original line number Diff line number Diff line
@@ -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))
+1 −1
Original line number Diff line number Diff line
@@ -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[] = {
+1 −1
Original line number Diff line number Diff line
@@ -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));
Loading