patch-2.4.1 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: 52
- Date:
Sat Jan 27 19:12:35 2001
- Orig file:
v2.4.0/linux/mm/memory.c
- Orig date:
Mon Jan 1 10:37:41 2001
diff -u --recursive --new-file v2.4.0/linux/mm/memory.c linux/mm/memory.c
@@ -207,7 +207,8 @@
src_pte = pte_offset(src_pmd, address);
dst_pte = pte_offset(dst_pmd, address);
-
+
+ spin_lock(&src->page_table_lock);
do {
pte_t pte = *src_pte;
struct page *ptepage;
@@ -240,10 +241,11 @@
cont_copy_pte_range: set_pte(dst_pte, pte);
cont_copy_pte_range_noset: address += PAGE_SIZE;
if (address >= end)
- goto out;
+ goto out_unlock;
src_pte++;
dst_pte++;
} while ((unsigned long)src_pte & PTE_TABLE_MASK);
+ spin_unlock(&src->page_table_lock);
cont_copy_pmd_range: src_pmd++;
dst_pmd++;
@@ -252,6 +254,10 @@
out:
return 0;
+out_unlock:
+ spin_unlock(&src->page_table_lock);
+ return 0;
+
nomem:
return -ENOMEM;
}
@@ -939,7 +945,6 @@
if (inode->i_size < offset)
goto do_expand;
inode->i_size = offset;
- truncate_inode_pages(mapping, offset);
spin_lock(&mapping->i_shared_lock);
if (!mapping->i_mmap && !mapping->i_mmap_shared)
goto out_unlock;
@@ -954,8 +959,7 @@
out_unlock:
spin_unlock(&mapping->i_shared_lock);
- /* this should go into ->truncate */
- inode->i_size = offset;
+ truncate_inode_pages(mapping, offset);
if (inode->i_op && inode->i_op->truncate)
inode->i_op->truncate(inode);
return;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)