From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751061Ab0CAKik (ORCPT ); Mon, 1 Mar 2010 05:38:40 -0500 Received: from trinity.develer.com ([83.149.158.210]:35914 "EHLO trinity.develer.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750792Ab0CAKij (ORCPT ); Mon, 1 Mar 2010 05:38:39 -0500 Date: Mon, 1 Mar 2010 11:38:36 +0100 From: Andrea Righi To: "Kirill A. Shutemov" Cc: Balbir Singh , KAMEZAWA Hiroyuki , Suleiman Souhlal , Vivek Goyal , Greg Thelen , Andrew Morton , containers@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH -mmotm 1/2] memcg: dirty pages accounting and limiting infrastructure Message-ID: <20100301103836.GC2087@linux> References: <1267224751-6382-1-git-send-email-arighi@develer.com> <1267224751-6382-2-git-send-email-arighi@develer.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.20 (2009-06-14) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 01, 2010 at 10:58:35AM +0200, Kirill A. Shutemov wrote: [snip] > > +static u64 mem_cgroup_dirty_ratio_read(struct cgroup *cgrp, struct cftype *cft) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       return get_dirty_param(memcg, MEM_CGROUP_DIRTY_RATIO); > > +} > > + > > +static int > > +mem_cgroup_dirty_ratio_write(struct cgroup *cgrp, struct cftype *cft, u64 val) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       if ((cgrp->parent == NULL) || (val > 100)) > > +               return -EINVAL; > > + > > +       spin_lock(&memcg->reclaim_param_lock); > > +       memcg->dirty_ratio = val; > > +       memcg->dirty_bytes = 0; > > +       spin_unlock(&memcg->reclaim_param_lock); > > + > > +       return 0; > > +} > > + > > +static u64 mem_cgroup_dirty_bytes_read(struct cgroup *cgrp, struct cftype *cft) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       return get_dirty_param(memcg, MEM_CGROUP_DIRTY_BYTES); > > +} > > + > > +static int > > +mem_cgroup_dirty_bytes_write(struct cgroup *cgrp, struct cftype *cft, u64 val) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       if (cgrp->parent == NULL) > > +               return -EINVAL; > > + > > +       spin_lock(&memcg->reclaim_param_lock); > > +       memcg->dirty_ratio = 0; > > +       memcg->dirty_bytes = val; > > +       spin_unlock(&memcg->reclaim_param_lock); > > + > > +       return 0; > > +} > > + > > +static u64 > > +mem_cgroup_dirty_background_ratio_read(struct cgroup *cgrp, struct cftype *cft) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       return get_dirty_param(memcg, MEM_CGROUP_DIRTY_BACKGROUND_RATIO); > > +} > > + > > +static int mem_cgroup_dirty_background_ratio_write(struct cgroup *cgrp, > > +                               struct cftype *cft, u64 val) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       if ((cgrp->parent == NULL) || (val > 100)) > > +               return -EINVAL; > > + > > +       spin_lock(&memcg->reclaim_param_lock); > > +       memcg->dirty_background_ratio = val; > > +       memcg->dirty_background_bytes = 0; > > +       spin_unlock(&memcg->reclaim_param_lock); > > + > > +       return 0; > > +} > > + > > +static u64 > > +mem_cgroup_dirty_background_bytes_read(struct cgroup *cgrp, struct cftype *cft) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       return get_dirty_param(memcg, MEM_CGROUP_DIRTY_BACKGROUND_BYTES); > > +} > > + > > +static int mem_cgroup_dirty_background_bytes_write(struct cgroup *cgrp, > > +                               struct cftype *cft, u64 val) > > +{ > > +       struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); > > + > > +       if (cgrp->parent == NULL) > > +               return -EINVAL; > > + > > +       spin_lock(&memcg->reclaim_param_lock); > > +       memcg->dirty_background_ratio = 0; > > +       memcg->dirty_background_bytes = val; > > +       spin_unlock(&memcg->reclaim_param_lock); > > + > > +       return 0; > > +} > > + > >  static struct cftype mem_cgroup_files[] = { > >        { > >                .name = "usage_in_bytes", > > @@ -3518,6 +3785,26 @@ static struct cftype mem_cgroup_files[] = { > >                .write_u64 = mem_cgroup_swappiness_write, > >        }, > >        { > > +               .name = "dirty_ratio", > > +               .read_u64 = mem_cgroup_dirty_ratio_read, > > +               .write_u64 = mem_cgroup_dirty_ratio_write, > > +       }, > > +       { > > +               .name = "dirty_bytes", > > +               .read_u64 = mem_cgroup_dirty_bytes_read, > > +               .write_u64 = mem_cgroup_dirty_bytes_write, > > +       }, > > +       { > > +               .name = "dirty_background_ratio", > > +               .read_u64 = mem_cgroup_dirty_background_ratio_read, > > +               .write_u64 = mem_cgroup_dirty_background_ratio_write, > > +       }, > > +       { > > +               .name = "dirty_background_bytes", > > +               .read_u64 = mem_cgroup_dirty_background_bytes_read, > > +               .write_u64 = mem_cgroup_dirty_background_bytes_write, > > +       }, > > +       { > > mem_cgroup_dirty_background_* functions are too similar to > mem_cgroup_dirty_bytes_*. I think they should be combined > like mem_cgroup_read() and mem_cgroup_write(). It will be > cleaner. Agreed. Thanks, -Andrea