Patch from Alex Tomas There's a missing unlock_kernel() on an error path. 25-akpm/fs/ext3/dir.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) diff -puN fs/ext3/dir.c~htree-lock_kernel-fix fs/ext3/dir.c --- 25/fs/ext3/dir.c~htree-lock_kernel-fix Tue Mar 4 16:34:07 2003 +++ 25-akpm/fs/ext3/dir.c Tue Mar 4 16:34:07 2003 @@ -105,8 +105,10 @@ static int ext3_readdir(struct file * fi if (is_dx(inode)) { err = ext3_dx_readdir(filp, dirent, filldir); - if (err != ERR_BAD_DX_DIR) + if (err != ERR_BAD_DX_DIR) { + unlock_kernel(); return err; + } /* * We don't set the inode dirty flag since it's not * critical that it get flushed back to the disk. _