From: Jan Blunck ext2_readdir() is ignoring the set error return values and always returns 0. Signed-off-by: Jan Blunck Signed-off-by: Andrew Morton --- 25-akpm/fs/ext2/dir.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff -puN fs/ext2/dir.c~ext2_readdir-retval-fix fs/ext2/dir.c --- 25/fs/ext2/dir.c~ext2_readdir-retval-fix 2004-07-26 23:45:17.444197560 -0700 +++ 25-akpm/fs/ext2/dir.c 2004-07-26 23:45:17.448196952 -0700 @@ -257,10 +257,10 @@ ext2_readdir (struct file * filp, void * unsigned chunk_mask = ~(ext2_chunk_size(inode)-1); unsigned char *types = NULL; int need_revalidate = (filp->f_version != inode->i_version); - int ret = 0; + int ret; if (pos > inode->i_size - EXT2_DIR_REC_LEN(1)) - goto done; + goto success; if (EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_FILETYPE)) types = ext2_filetype_table; @@ -300,17 +300,19 @@ ext2_readdir (struct file * filp, void * le32_to_cpu(de->inode), d_type); if (over) { ext2_put_page(page); - goto done; + goto success; } } } ext2_put_page(page); } +success: + ret = 0; done: filp->f_pos = (n << PAGE_CACHE_SHIFT) | offset; filp->f_version = inode->i_version; - return 0; + return ret; } /* _