From: NeilBrown <[email protected]> To prepare for d_alloc_parallel() being permitted without a directory lock, use d_duplicate() when duplicating a dentry in order to create a whiteout.
Signed-off-by: NeilBrown <[email protected]> --- fs/afs/dir.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/afs/dir.c b/fs/afs/dir.c index c195ee851191..b5c593f50079 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c @@ -2047,6 +2047,8 @@ static void afs_rename_put(struct afs_operation *op) if (op->rename.unblock) store_release_wake_up(&op->rename.unblock->d_fsdata, NULL); store_release_wake_up(&op->dentry->d_fsdata, NULL); + if (op->rename.tmp) + d_lookup_done(op->rename.tmp); dput(op->rename.tmp); } @@ -2175,8 +2177,7 @@ static int afs_rename(struct mnt_idmap *idmap, struct inode *old_dir, if (d_count(new_dentry) > 2) { spin_unlock(&new_dentry->d_lock); /* copy the target dentry's name */ - op->rename.tmp = d_alloc(new_dentry->d_parent, - &new_dentry->d_name); + op->rename.tmp = d_duplicate(new_dentry); if (!op->rename.tmp) { afs_op_nomem(op); goto error; -- 2.50.0.107.gf914562f5916.dirty
