Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754243Ab0DSBzK (ORCPT ); Sun, 18 Apr 2010 21:55:10 -0400 Received: from TYO201.gate.nec.co.jp ([202.32.8.193]:59228 "EHLO tyo201.gate.nec.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754077Ab0DSBzI (ORCPT ); Sun, 18 Apr 2010 21:55:08 -0400 Date: Mon, 19 Apr 2010 10:49:17 +0900 From: Daisuke Nishimura To: Randy Dunlap Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, Balbir Singh , KAMEZAWA Hiroyuki , Daisuke Nishimura Subject: Re: mmotm 2010-04-15-14-42 uploaded (shmem, CGROUP_MEM_RES_CTLR) Message-Id: <20100419104917.1a568b17.nishimura@mxp.nes.nec.co.jp> In-Reply-To: <20100416090315.22b7d361.randy.dunlap@oracle.com> References: <201004152210.o3FMA7KV001909@imap1.linux-foundation.org> <20100416090315.22b7d361.randy.dunlap@oracle.com> Organization: NEC Soft, Ltd. X-Mailer: Sylpheed 2.6.0 (GTK+ 2.10.14; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5833 Lines: 181 On Fri, 16 Apr 2010 09:03:15 -0700, Randy Dunlap wrote: > On Thu, 15 Apr 2010 14:42:59 -0700 akpm@linux-foundation.org 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 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 Signed-off-by: Daisuke Nishimura --- 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/