--- zzzz-none-000/linux-2.6.28.10/mm/filemap.c 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/mm/filemap.c 2010-04-07 09:56:53.000000000 +0000 @@ -486,6 +486,15 @@ } else mem_cgroup_uncharge_cache_page(page); out: +#ifdef CONFIG_FUSIV_USB_OPTIMIZATION + + if ( (!(gfp_mask & GFP_ATOMIC )) && + (mapping->nrpages > FUSIV_MAX_CACHE_MEM_THRHLD ) + && (!(mapping->page_tree.count++%32))) + { + fusiv_invalidate_mapping_pages(mapping,offset-1); + } +#endif return error; } EXPORT_SYMBOL(add_to_page_cache_locked); @@ -1280,6 +1289,9 @@ } EXPORT_SYMBOL(generic_segment_checks); +#ifdef CONFIG_FUSIV_USB_OPTIMIZATION +void check_and_reduce_unused_page_cache(struct kiocb *iocb); +#endif /** * generic_file_aio_read - generic filesystem read routine * @iocb: kernel I/O control block @@ -1351,6 +1363,9 @@ break; } out: +#ifdef CONFIG_FUSIV_USB_OPTIMIZATION + check_and_reduce_unused_page_cache(iocb); +#endif return retval; } EXPORT_SYMBOL(generic_file_aio_read); @@ -2444,6 +2459,9 @@ if (err < 0) ret = err; } +#ifdef CONFIG_FUSIV_USB_OPTIMIZATION + check_and_reduce_unused_page_cache(iocb); +#endif return ret; } EXPORT_SYMBOL(generic_file_aio_write);