patch-2.2.18 linux/mm/memory.c
Next file: linux/mm/mmap.c
Previous file: linux/mm/filemap.c
Back to the patch index
Back to the overall index
- Lines: 48
- Date:
Wed Sep 13 16:48:19 2000
- Orig file:
v2.2.17/mm/memory.c
- Orig date:
Fri Apr 21 12:47:02 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/mm/memory.c linux/mm/memory.c
@@ -722,22 +722,8 @@
flush_page_to_ram(pte_page(pte));
}
-/*
- * Handle all mappings that got truncated by a "truncate()"
- * system call.
- *
- * NOTE! We have to be ready to update the memory sharing
- * between the file and the memory map for a potential last
- * incomplete page. Ugly, but necessary.
- */
-void vmtruncate(struct inode * inode, unsigned long offset)
+static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long offset)
{
- struct vm_area_struct * mpnt;
-
- truncate_inode_pages(inode, offset);
- if (!inode->i_mmap)
- return;
- mpnt = inode->i_mmap;
do {
struct mm_struct *mm = mpnt->vm_mm;
unsigned long start = mpnt->vm_start;
@@ -767,6 +753,23 @@
zap_page_range(mm, start, len);
flush_tlb_range(mm, start, end);
} while ((mpnt = mpnt->vm_next_share) != NULL);
+}
+
+/*
+ * Handle all mappings that got truncated by a "truncate()"
+ * system call.
+ *
+ * NOTE! We have to be ready to update the memory sharing
+ * between the file and the memory map for a potential last
+ * incomplete page. Ugly, but necessary.
+ */
+void vmtruncate(struct inode * inode, unsigned long offset)
+{
+ truncate_inode_pages(inode, offset);
+ if (inode->i_mmap)
+ vmtruncate_list(inode->i_mmap, offset);
+ if (inode->i_mmap_shared)
+ vmtruncate_list(inode->i_mmap_shared, offset);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)