---

 fs/hpfs/namei.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletion(-)

diff -puN fs/hpfs/namei.c~HPFS8-hpfs_race2-RC4-rc1 fs/hpfs/namei.c
--- 25/fs/hpfs/namei.c~HPFS8-hpfs_race2-RC4-rc1	2004-02-29 12:48:38.000000000 -0800
+++ 25-akpm/fs/hpfs/namei.c	2004-02-29 12:48:38.000000000 -0800
@@ -558,7 +558,10 @@ static int hpfs_rename(struct inode *old
 	hpfs_adjust_length((char *)old_name, &old_len);
 
 	lock_kernel();
+	/* order doesn't matter, due to VFS exclusion */
 	down(&hpfs_i(i)->i_parent);
+	if (new_inode)
+		down(&hpfs_i(new_inode)->i_parent);
 	down_write(&hpfs_i(old_dir)->i_sem);
 	if (new_dir != old_dir)
 		down_write(&hpfs_i(new_dir)->i_sem);
@@ -639,11 +642,13 @@ static int hpfs_rename(struct inode *old
 	}
 	hpfs_i(i)->i_conv = hpfs_sb(i->i_sb)->sb_conv;
 	hpfs_decide_conv(i, (char *)new_name, new_len);
-	end1:
+end1:
 	if (old_dir != new_dir)
 		up_write(&hpfs_i(new_dir)->i_sem);
 	up_write(&hpfs_i(old_dir)->i_sem);
 	up(&hpfs_i(i)->i_parent);
+	if (new_inode)
+		up(&hpfs_i(new_inode)->i_parent);
 	unlock_kernel();
 	return err;
 }

_