If a file is lseek()ed before i_version changes, it is possible
for application to call into ll_readdir and have f_pos pointing
to some garbage data and cause kernel hang.
Signed-off-by: Peng Tao <tao.peng@emc.com>
Change-Id: I49ab94ad5c63c3029d5ad96e27e38e124a135ed8
Reviewed-on: http://review.whamcloud.com/3181
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Lai Siyao <laisiyao@whamcloud.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
pgoff_t idx = pos >> CFS_PAGE_SHIFT;
pgoff_t npages = dir_pages(inode);
unsigned chunk_mask = ll_dir_page_mask(inode);
- int need_revalidate = (filp->f_version != inode->i_version);
+ int need_revalidate = (filp->f_version == 0 ||
+ filp->f_version != inode->i_version);
int rc = 0;
int done; /* when this becomes negative --- stop iterating */