I'm not sure why I used igrab() in unlink(). igrab takes the oft-taken inode_lock. The caller has a ref, so a simple increment of i_count will suffice. fs/namei.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN fs/namei.c~unlink-speedup-speedup fs/namei.c --- 25/fs/namei.c~unlink-speedup-speedup 2003-05-26 18:03:08.000000000 -0700 +++ 25-akpm/fs/namei.c 2003-05-26 18:03:52.000000000 -0700 @@ -1693,7 +1693,7 @@ asmlinkage long sys_unlink(const char __ goto slashes; inode = dentry->d_inode; if (inode) - inode = igrab(inode); + atomic_inc(&inode->i_count); error = vfs_unlink(nd.dentry->d_inode, dentry); exit2: dput(dentry); _