Commit dd4123f3 authored by Minchan Kim's avatar Minchan Kim Committed by Linus Torvalds

mm: fix build warnings in <linux/compaction.h>

Randy reported below build error.

> In file included from ../include/linux/balloon_compaction.h:48:0,
>                  from ../mm/balloon_compaction.c:11:
> ../include/linux/compaction.h:237:51: warning: 'struct node' declared inside parameter list [enabled by default]
>  static inline int compaction_register_node(struct node *node)
> ../include/linux/compaction.h:237:51: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
> ../include/linux/compaction.h:242:54: warning: 'struct node' declared inside parameter list [enabled by default]
>  static inline void compaction_unregister_node(struct node *node)
>

It was caused by non-lru page migration which needs compaction.h but
compaction.h doesn't include any header to be standalone.

I think proper header for non-lru page migration is migrate.h rather
than compaction.h because migrate.h has already headers needed to work
non-lru page migration indirectly like isolate_mode_t, migrate_mode
MIGRATEPAGE_SUCCESS.

[akpm@linux-foundation.org: revert mm-balloon-use-general-non-lru-movable-page-feature-fix.patch temp fix]
Link: http://lkml.kernel.org/r/20160610003304.GE29779@bboxSigned-off-by: default avatarMinchan Kim <minchan@kernel.org>
Reported-by: default avatarRandy Dunlap <rdunlap@infradead.org>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Gioh Kim <gi-oh.kim@profitbricks.com>
Cc: Rafael Aquini <aquini@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0db501f7
...@@ -181,11 +181,12 @@ After isolation, VM calls migratepage of driver with isolated page. ...@@ -181,11 +181,12 @@ After isolation, VM calls migratepage of driver with isolated page.
The function of migratepage is to move content of the old page to new page The function of migratepage is to move content of the old page to new page
and set up fields of struct page newpage. Keep in mind that you should and set up fields of struct page newpage. Keep in mind that you should
indicate to the VM the oldpage is no longer movable via __ClearPageMovable() indicate to the VM the oldpage is no longer movable via __ClearPageMovable()
under page_lock if you migrated the oldpage successfully and returns 0. under page_lock if you migrated the oldpage successfully and returns
If driver cannot migrate the page at the moment, driver can return -EAGAIN. MIGRATEPAGE_SUCCESS. If driver cannot migrate the page at the moment, driver
On -EAGAIN, VM will retry page migration in a short time because VM interprets can return -EAGAIN. On -EAGAIN, VM will retry page migration in a short time
-EAGAIN as "temporal migration failure". On returning any error except -EAGAIN, because VM interprets -EAGAIN as "temporal migration failure". On returning
VM will give up the page migration without retrying in this time. any error except -EAGAIN, VM will give up the page migration without retrying
in this time.
Driver shouldn't touch page.lru field VM using in the functions. Driver shouldn't touch page.lru field VM using in the functions.
......
...@@ -493,7 +493,7 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info, ...@@ -493,7 +493,7 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,
put_page(page); /* balloon reference */ put_page(page); /* balloon reference */
return 0; return MIGRATEPAGE_SUCCESS;
} }
static struct dentry *balloon_mount(struct file_system_type *fs_type, static struct dentry *balloon_mount(struct file_system_type *fs_type,
......
...@@ -45,8 +45,7 @@ ...@@ -45,8 +45,7 @@
#define _LINUX_BALLOON_COMPACTION_H #define _LINUX_BALLOON_COMPACTION_H
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/page-flags.h> #include <linux/page-flags.h>
#include <linux/node.h> #include <linux/migrate.h>
#include <linux/compaction.h>
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/fs.h> #include <linux/fs.h>
......
...@@ -54,9 +54,6 @@ enum compact_result { ...@@ -54,9 +54,6 @@ enum compact_result {
struct alloc_context; /* in mm/internal.h */ struct alloc_context; /* in mm/internal.h */
#ifdef CONFIG_COMPACTION #ifdef CONFIG_COMPACTION
extern int PageMovable(struct page *page);
extern void __SetPageMovable(struct page *page, struct address_space *mapping);
extern void __ClearPageMovable(struct page *page);
extern int sysctl_compact_memory; extern int sysctl_compact_memory;
extern int sysctl_compaction_handler(struct ctl_table *table, int write, extern int sysctl_compaction_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *length, loff_t *ppos); void __user *buffer, size_t *length, loff_t *ppos);
...@@ -154,19 +151,6 @@ extern void kcompactd_stop(int nid); ...@@ -154,19 +151,6 @@ extern void kcompactd_stop(int nid);
extern void wakeup_kcompactd(pg_data_t *pgdat, int order, int classzone_idx); extern void wakeup_kcompactd(pg_data_t *pgdat, int order, int classzone_idx);
#else #else
static inline int PageMovable(struct page *page)
{
return 0;
}
static inline void __SetPageMovable(struct page *page,
struct address_space *mapping)
{
}
static inline void __ClearPageMovable(struct page *page)
{
}
static inline enum compact_result try_to_compact_pages(gfp_t gfp_mask, static inline enum compact_result try_to_compact_pages(gfp_t gfp_mask,
unsigned int order, int alloc_flags, unsigned int order, int alloc_flags,
const struct alloc_context *ac, const struct alloc_context *ac,
......
...@@ -71,6 +71,21 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, ...@@ -71,6 +71,21 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping,
#endif /* CONFIG_MIGRATION */ #endif /* CONFIG_MIGRATION */
#ifdef CONFIG_COMPACTION
extern int PageMovable(struct page *page);
extern void __SetPageMovable(struct page *page, struct address_space *mapping);
extern void __ClearPageMovable(struct page *page);
#else
static inline int PageMovable(struct page *page) { return 0; };
static inline void __SetPageMovable(struct page *page,
struct address_space *mapping)
{
}
static inline void __ClearPageMovable(struct page *page)
{
}
#endif
#ifdef CONFIG_NUMA_BALANCING #ifdef CONFIG_NUMA_BALANCING
extern bool pmd_trans_migrating(pmd_t pmd); extern bool pmd_trans_migrating(pmd_t pmd);
extern int migrate_misplaced_page(struct page *page, extern int migrate_misplaced_page(struct page *page,
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#include <linux/zsmalloc.h> #include <linux/zsmalloc.h>
#include <linux/zpool.h> #include <linux/zpool.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/compaction.h> #include <linux/migrate.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#define ZSPAGE_MAGIC 0x58 #define ZSPAGE_MAGIC 0x58
...@@ -2107,7 +2107,7 @@ int zs_page_migrate(struct address_space *mapping, struct page *newpage, ...@@ -2107,7 +2107,7 @@ int zs_page_migrate(struct address_space *mapping, struct page *newpage,
put_page(page); put_page(page);
page = newpage; page = newpage;
ret = 0; ret = MIGRATEPAGE_SUCCESS;
unpin_objects: unpin_objects:
for (addr = s_addr + offset; addr < s_addr + pos; for (addr = s_addr + offset; addr < s_addr + pos;
addr += class->size) { addr += class->size) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment