From: Hugh Dickins Recent testing has shown that swapoff can sneak a page back into the tmpfs page cache after truncate_inode_pages has cleaned it, before shmem_truncate resets next_index to stop that: BUG_ON(inode->i_blocks) in shmem_delete_inode. So call truncate_inode_pages again to be safe. 25-akpm/mm/shmem.c | 10 ++++++++++ 1 files changed, 10 insertions(+) diff -puN mm/shmem.c~hugh-09-tmpfs-truncation mm/shmem.c --- 25/mm/shmem.c~hugh-09-tmpfs-truncation Tue Mar 25 18:34:56 2003 +++ 25-akpm/mm/shmem.c Tue Mar 25 18:34:56 2003 @@ -486,6 +486,16 @@ done1: } done2: BUG_ON(info->swapped > info->next_index); + if (inode->i_mapping->nrpages) { + /* + * Call truncate_inode_pages again: racing shmem_unuse_inode + * may have swizzled a page in from swap since vmtruncate or + * generic_delete_inode did it, before we lowered next_index. + */ + spin_unlock(&info->lock); + truncate_inode_pages(inode->i_mapping, inode->i_size); + spin_lock(&info->lock); + } shmem_recalc_inode(inode); spin_unlock(&info->lock); } _