|
@@ -1712,8 +1712,27 @@ page_not_uptodate:
|
|
|
}
|
|
|
EXPORT_SYMBOL(filemap_fault);
|
|
|
|
|
|
+int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
|
+{
|
|
|
+ struct page *page = vmf->page;
|
|
|
+ struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
|
|
|
+ int ret = VM_FAULT_LOCKED;
|
|
|
+
|
|
|
+ file_update_time(vma->vm_file);
|
|
|
+ lock_page(page);
|
|
|
+ if (page->mapping != inode->i_mapping) {
|
|
|
+ unlock_page(page);
|
|
|
+ ret = VM_FAULT_NOPAGE;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+out:
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(filemap_page_mkwrite);
|
|
|
+
|
|
|
const struct vm_operations_struct generic_file_vm_ops = {
|
|
|
.fault = filemap_fault,
|
|
|
+ .page_mkwrite = filemap_page_mkwrite,
|
|
|
};
|
|
|
|
|
|
/* This is used for a general mmap of a disk file */
|