On Fri, 16 Apr 2010 09:03:15 -0700, Randy Dunlap <randy.dunlap@xxxxxxxxxx> wrote: > On Thu, 15 Apr 2010 14:42:59 -0700 akpm@xxxxxxxxxxxxxxxxxxxx wrote: > > > The mm-of-the-moment snapshot 2010-04-15-14-42 has been uploaded to > > > > http://userweb.kernel.org/~akpm/mmotm/ > > > > and will soon be available at > > > > git://zen-kernel.org/kernel/mmotm.git > > > > It contains the following patches against 2.6.34-rc4: > > > memcg-move-charge-of-file-pages.patch: > > when CONFIG_SHMFS is not enabled: > > mm/shmem.c:2721: error: implicit declaration of function 'SHMEM_I' > mm/shmem.c:2721: warning: initialization makes pointer from integer without a cast > mm/shmem.c:2726: error: dereferencing pointer to incomplete type > mm/shmem.c:2727: error: implicit declaration of function 'shmem_swp_entry' > mm/shmem.c:2727: warning: assignment makes pointer from integer without a cast > mm/shmem.c:2734: error: implicit declaration of function 'shmem_swp_unmap' > mm/shmem.c:2735: error: dereferencing pointer to incomplete type > Thank you very much for your report. I attach a fix patch. === From: Daisuke Nishimura <nishimura@xxxxxxxxxxxxxxxxx> build fix for !CONFIG_SHMEM case. CC mm/shmem.o mm/shmem.c: In function 'mem_cgroup_get_shmem_target': mm/shmem.c:2721: error: implicit declaration of function 'SHMEM_I' mm/shmem.c:2721: warning: initialization makes pointer from integer without a cast mm/shmem.c:2726: error: dereferencing pointer to incomplete type mm/shmem.c:2727: error: implicit declaration of function 'shmem_swp_entry' mm/shmem.c:2727: warning: assignment makes pointer from integer without a cast mm/shmem.c:2734: error: implicit declaration of function 'shmem_swp_unmap' mm/shmem.c:2735: error: dereferencing pointer to incomplete type make[1]: *** [mm/shmem.o] Error 1 Reported-by: Randy Dunlap <randy.dunlap@xxxxxxxxxx> Signed-off-by: Daisuke Nishimura <nishimura@xxxxxxxxxxxxxxxxx> --- mm/shmem.c | 99 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 62 insertions(+), 37 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index cb87365..6f183ef 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2568,6 +2568,43 @@ out4: return error; } +#ifdef CONFIG_CGROUP_MEM_RES_CTLR +/** + * mem_cgroup_get_shmem_target - find a page or entry assigned to the shmem file + * @inode: the inode to be searched + * @pgoff: the offset to be searched + * @pagep: the pointer for the found page to be stored + * @ent: the pointer for the found swap entry to be stored + * + * If a page is found, refcount of it is incremented. Callers should handle + * these refcount. + */ +void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, + struct page **pagep, swp_entry_t *ent) +{ + swp_entry_t entry = { .val = 0 }, *ptr; + struct page *page = NULL; + struct shmem_inode_info *info = SHMEM_I(inode); + + if ((pgoff << PAGE_CACHE_SHIFT) >= i_size_read(inode)) + goto out; + + spin_lock(&info->lock); + ptr = shmem_swp_entry(info, pgoff, NULL); + if (ptr && ptr->val) { + entry.val = ptr->val; + page = find_get_page(&swapper_space, entry.val); + } else + page = find_get_page(inode->i_mapping, pgoff); + if (ptr) + shmem_swp_unmap(ptr); + spin_unlock(&info->lock); +out: + *pagep = page; + *ent = entry; +} +#endif + #else /* !CONFIG_SHMEM */ /* @@ -2607,6 +2644,31 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) return 0; } +#ifdef CONFIG_CGROUP_MEM_RES_CTLR +/** + * mem_cgroup_get_shmem_target - find a page or entry assigned to the shmem file + * @inode: the inode to be searched + * @pgoff: the offset to be searched + * @pagep: the pointer for the found page to be stored + * @ent: the pointer for the found swap entry to be stored + * + * If a page is found, refcount of it is incremented. Callers should handle + * these refcount. + */ +void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, + struct page **pagep, swp_entry_t *ent) +{ + struct page *page = NULL; + + if ((pgoff << PAGE_CACHE_SHIFT) >= i_size_read(inode)) + goto out; + page = find_get_page(inode->i_mapping, pgoff); +out: + *pagep = page; + *ent = (swp_entry_t){ .val = 0 }; +} +#endif + #define shmem_vm_ops generic_file_vm_ops #define shmem_file_operations ramfs_file_operations #define shmem_get_inode(sb, mode, dev, flags) ramfs_get_inode(sb, mode, dev) @@ -2701,40 +2763,3 @@ int shmem_zero_setup(struct vm_area_struct *vma) vma->vm_ops = &shmem_vm_ops; return 0; } - -#ifdef CONFIG_CGROUP_MEM_RES_CTLR -/** - * mem_cgroup_get_shmem_target - find a page or entry assigned to the shmem file - * @inode: the inode to be searched - * @pgoff: the offset to be searched - * @pagep: the pointer for the found page to be stored - * @ent: the pointer for the found swap entry to be stored - * - * If a page is found, refcount of it is incremented. Callers should handle - * these refcount. - */ -void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, - struct page **pagep, swp_entry_t *ent) -{ - swp_entry_t entry = { .val = 0 }, *ptr; - struct page *page = NULL; - struct shmem_inode_info *info = SHMEM_I(inode); - - if ((pgoff << PAGE_CACHE_SHIFT) >= i_size_read(inode)) - goto out; - - spin_lock(&info->lock); - ptr = shmem_swp_entry(info, pgoff, NULL); - if (ptr && ptr->val) { - entry.val = ptr->val; - page = find_get_page(&swapper_space, entry.val); - } else - page = find_get_page(inode->i_mapping, pgoff); - if (ptr) - shmem_swp_unmap(ptr); - spin_unlock(&info->lock); -out: - *pagep = page; - *ent = entry; -} -#endif -- 1.5.6.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>