patch-2.4.0-test3 linux/mm/filemap.c
Next file: linux/mm/mmap.c
Previous file: linux/lib/string.c
Back to the patch index
Back to the overall index
- Lines: 84
- Date:
Sat Jul 8 19:26:13 2000
- Orig file:
v2.4.0-test2/linux/mm/filemap.c
- Orig date:
Tue May 23 15:31:37 2000
diff -u --recursive --new-file v2.4.0-test2/linux/mm/filemap.c linux/mm/filemap.c
@@ -195,6 +195,7 @@
* to it causing all sorts of fun problems ...
*/
remove_inode_page(page);
+ ClearPageDirty(page);
UnlockPage(page);
page_cache_release(page);
@@ -500,7 +501,7 @@
/*
* This adds a page to the page cache, starting out as locked,
- * owned by us, referenced, but not uptodate and with no errors.
+ * owned by us, but unreferenced, not uptodate and with no errors.
*/
static inline void __add_to_page_cache(struct page * page,
struct address_space *mapping, unsigned long offset,
@@ -512,8 +513,8 @@
if (PageLocked(page))
BUG();
- flags = page->flags & ~((1 << PG_uptodate) | (1 << PG_error) | (1 << PG_dirty));
- page->flags = flags | (1 << PG_locked) | (1 << PG_referenced);
+ flags = page->flags & ~((1 << PG_uptodate) | (1 << PG_error) | (1 << PG_dirty) | (1 << PG_referenced));
+ page->flags = flags | (1 << PG_locked);
page_cache_get(page);
page->index = offset;
add_page_to_inode_queue(mapping, page);
@@ -1682,9 +1683,7 @@
*/
static void filemap_unmap(struct vm_area_struct *vma, unsigned long start, size_t len)
{
- lock_kernel();
filemap_sync(vma, start, len, MS_ASYNC);
- unlock_kernel();
}
/*
@@ -1743,8 +1742,13 @@
error = vma->vm_ops->sync(vma, start, end-start, flags);
if (!error && (flags & MS_SYNC)) {
struct file * file = vma->vm_file;
- if (file && file->f_op && file->f_op->fsync)
- error = file->f_op->fsync(file, file->f_dentry);
+ if (file && file->f_op && file->f_op->fsync) {
+ down(&file->f_dentry->d_inode->i_sem);
+ lock_kernel();
+ error = file->f_op->fsync(file, file->f_dentry, 1);
+ unlock_kernel();
+ up(&file->f_dentry->d_inode->i_sem);
+ }
}
return error;
}
@@ -1758,7 +1762,6 @@
int unmapped_error, error = -EINVAL;
down(¤t->mm->mmap_sem);
- lock_kernel();
if (start & ~PAGE_MASK)
goto out;
len = (len + ~PAGE_MASK) & PAGE_MASK;
@@ -1804,7 +1807,6 @@
vma = vma->vm_next;
}
out:
- unlock_kernel();
up(¤t->mm->mmap_sem);
return error;
}
@@ -2020,13 +2022,9 @@
if (vma->vm_flags & VM_LOCKED)
return -EINVAL;
- lock_kernel(); /* is this really necessary? */
-
flush_cache_range(vma->vm_mm, start, end);
zap_page_range(vma->vm_mm, start, end - start);
flush_tlb_range(vma->vm_mm, start, end);
-
- unlock_kernel();
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)