Hi Ben, On 07/17/2013 09:44 PM, Benjamin LaHaise wrote: > On Wed, Jul 17, 2013 at 05:22:30PM +0800, Gu Zheng wrote: >> As the aio job will pin the ring pages, that will lead to mem migrated >> failed. In order to fix this problem we use an anon inode to manage the aio ring >> pages, and setup the migratepage callback in the anon inode's address space, so >> that when mem migrating the aio ring pages will be moved to other mem node safely. >> >> v1->v2: >> Fix build failed issue if CONFIG_MIGRATION disabled. >> Fix some minor issues under Benjamin's comments. > > I don't know what you did with this patch, but it doesn't apply to any of > the trees I can find, and interdiff isn't able to compare it against your > original patch. Since the first version of the patch was already applied > it is generally more appropriate to provide an incremental fix. I've > added the following to my tree (git://git.kvack.org/~bcrl/aio-next.git/) > to fix the build issue. I've tested this with CONFIG_MIGRATION enabled > and disabled on x86. My patch is applied on 3.10 release. I'm sorry that my working department is forbidden to access all the urls based on git protocol, so I can not make patch on your aio_next. Does aio_next have trees based on http/https protocol? Your fix looks very well. IMHO, because we *extern* the migrate_page_move_mapping(), so we have the duty to make sure it can work well all the place. If some one later use migrate_page_move_mapping() with out the protection of CONFIG_MIGRATION, it will lead to build-fail if CONFIG_MIGRATION is disable. So I think the following change(return ENOSYS error is CONFIG_MIGRATION disabled) is still needed. diff --git a/include/linux/migrate.h b/include/linux/migrate.h index c407d88..3d0a486 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -88,6 +88,13 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, return -ENOSYS; } +static inline int migrate_page_move_mapping(struct address_space *mapping, + struct page *newpage, struct page *page, + struct buffer_head *head, enum migrate_mode mode) +{ + return -ENOSYS; +} + /* Possible settings for the migrate_page() method in address_operations */ #define migrate_page NULL #define fail_migrate_page NULL Best regards, Gu > > -ben
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index c407d88..3d0a486 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -88,6 +88,13 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, return -ENOSYS; } +static inline int migrate_page_move_mapping(struct address_space *mapping, + struct page *newpage, struct page *page, + struct buffer_head *head, enum migrate_mode mode) +{ + return -ENOSYS; +} + /* Possible settings for the migrate_page() method in address_operations */ #define migrate_page NULL #define fail_migrate_page NULL