diff --git a/fs/yaffs2/yaffs_vfs.c b/fs/yaffs2/yaffs_vfs.c index f56e12ca344..70d88ef43fd 100644 --- a/fs/yaffs2/yaffs_vfs.c +++ b/fs/yaffs2/yaffs_vfs.c @@ -53,6 +53,7 @@ #include #include #include +#include #include @@ -1139,6 +1140,10 @@ static int yaffs_readpage_nolock(struct file *f, struct page *pg) (unsigned)(pg->index << PAGE_CACHE_SHIFT), (unsigned)PAGE_CACHE_SIZE); + ret = cleancache_get_page(pg); + if (!ret) + goto cleancache_got; + obj = yaffs_dentry_to_obj(f->f_dentry); dev = obj->my_dev; @@ -1158,11 +1163,13 @@ static int yaffs_readpage_nolock(struct file *f, struct page *pg) if (ret >= 0) ret = 0; +cleancache_got: if (ret) { ClearPageUptodate(pg); SetPageError(pg); } else { SetPageUptodate(pg); + SetPageMappedToDisk(pg); ClearPageError(pg); } @@ -2364,6 +2371,7 @@ static struct super_block *yaffs_internal_read_super(int yaffs_version, dev->is_checkpointed); yaffs_trace(YAFFS_TRACE_OS, "yaffs_read_super: done"); + cleancache_init_fs(sb); return sb; }