Created
March 16, 2016 21:56
-
-
Save kiryl/380ce00340bb732b1275 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c | |
index 065c88f8e4b8..5eea5f56e0a6 100644 | |
--- a/fs/ubifs/file.c | |
+++ b/fs/ubifs/file.c | |
@@ -52,6 +52,7 @@ | |
#include "ubifs.h" | |
#include <linux/mount.h> | |
#include <linux/slab.h> | |
+#include <linux/migrate.h> | |
static int read_block(struct inode *inode, void *addr, unsigned int block, | |
struct ubifs_data_node *dn) | |
@@ -1452,6 +1453,24 @@ static int ubifs_set_page_dirty(struct page *page) | |
return ret; | |
} | |
+static int ubifs_migrate_page(struct address_space *mapping, | |
+ struct page *newpage, struct page *page, enum migrate_mode mode) | |
+{ | |
+ int rc; | |
+ | |
+ rc = migrate_page_move_mapping(mapping, newpage, page, NULL, mode, 0); | |
+ if (rc != MIGRATEPAGE_SUCCESS) | |
+ return rc; | |
+ | |
+ if (PagePrivate(page)) { | |
+ ClearPagePrivate(page); | |
+ SetPagePrivate(newpage); | |
+ } | |
+ | |
+ migrate_page_copy(newpage, page); | |
+ return MIGRATEPAGE_SUCCESS; | |
+} | |
+ | |
static int ubifs_releasepage(struct page *page, gfp_t unused_gfp_flags) | |
{ | |
/* | |
@@ -1591,6 +1610,7 @@ const struct address_space_operations ubifs_file_address_operations = { | |
.write_end = ubifs_write_end, | |
.invalidatepage = ubifs_invalidatepage, | |
.set_page_dirty = ubifs_set_page_dirty, | |
+ .migratepage = ubifs_migrate_page, | |
.releasepage = ubifs_releasepage, | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment