F2FS: Backport to 3.4

Based off of patches here:
nowcomputing/f2fs-backports#1

Change-Id: I2be6d8abf4e3e4c6b9e8d635700930af432fe37a
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 25561d3..f5d19e5 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -38,7 +38,16 @@
 
 	f2fs_balance_fs(sbi);
 
-	sb_start_pagefault(inode->i_sb);
+	/* F2FS backport: We replace in old kernels sb_start_pagefault(inode->i_sb) with vfs_check_frozen()
+	 * and remove the original sb_end_pagefault(inode->i_sb) after the out label
+	 *
+	 * The introduction of sb_{start,end}_pagefault() was made post-3.2 kernels by Jan Kara
+	 * and merged in commit a0e881b7c189fa2bd76c024dbff91e79511c971d.
+	 * Discussed at https://lkml.org/lkml/2012/3/5/278
+	 *
+	 * - Alex
+	 */
+	vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
 
 	/* block allocation */
 	f2fs_lock_op(sbi);
@@ -78,14 +87,12 @@
 	/* fill the page */
 	wait_on_page_writeback(page);
 out:
-	sb_end_pagefault(inode->i_sb);
 	return block_page_mkwrite_return(err);
 }
 
 static const struct vm_operations_struct f2fs_file_vm_ops = {
-	.fault		= filemap_fault,
-	.page_mkwrite	= f2fs_vm_page_mkwrite,
-	.remap_pages	= generic_file_remap_pages,
+	.fault        = filemap_fault,
+	.page_mkwrite = f2fs_vm_page_mkwrite,
 };
 
 static int get_parent_ino(struct inode *inode, nid_t *pino)
@@ -189,6 +196,7 @@
 {
 	file_accessed(file);
 	vma->vm_ops = &f2fs_file_vm_ops;
+	vma->vm_flags |= VM_CAN_NONLINEAR;
 	return 0;
 }