--- 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; } _