
From: "Paul E. McKenney" <paulmck@us.ibm.com>

The vmtruncate() function shifts down by PAGE_CACHE_SHIFT, then calls
vmtruncate_list(), which deals in terms of PAGE_SHIFT instead.  Currently,
no harm done, since PAGE_CACHE_SHIFT and PAGE_SHIFT are identical.  Some
day they might not be, hence this patch.

I also took the liberty of modifying a hand-coded "if" that seems to
optimize for files that are not mapped to instead use unlikely().



 25-akpm/mm/memory.c |   11 +++--------
 1 files changed, 3 insertions(+), 8 deletions(-)

diff -puN mm/memory.c~vmtruncate-PAGE_SIZE-fix mm/memory.c
--- 25/mm/memory.c~vmtruncate-PAGE_SIZE-fix	Tue May 13 15:31:02 2003
+++ 25-akpm/mm/memory.c	Tue May 13 15:31:02 2003
@@ -1120,17 +1120,12 @@ int vmtruncate(struct inode * inode, lof
 	if (inode->i_size < offset)
 		goto do_expand;
 	inode->i_size = offset;
+	pgoff = (offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	down(&mapping->i_shared_sem);
-	if (list_empty(&mapping->i_mmap) && list_empty(&mapping->i_mmap_shared))
-		goto out_unlock;
-
-	pgoff = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
-	if (!list_empty(&mapping->i_mmap))
+	if (unlikely(!list_empty(&mapping->i_mmap)))
 		vmtruncate_list(&mapping->i_mmap, pgoff);
-	if (!list_empty(&mapping->i_mmap_shared))
+	if (unlikely(!list_empty(&mapping->i_mmap_shared)))
 		vmtruncate_list(&mapping->i_mmap_shared, pgoff);
-
-out_unlock:
 	up(&mapping->i_shared_sem);
 	truncate_inode_pages(mapping, offset);
 	goto out_truncate;

_
