Re: [PATCH v2] mm: hugetlb controller for cgroups v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 26, 2019 at 08:56:00PM +0100, Giuseppe Scrivano wrote:
> diff --git a/mm/hugetlb_cgroup.c b/mm/hugetlb_cgroup.c
> index 2ac38bdc18a1..5a6b381e9b92 100644
> --- a/mm/hugetlb_cgroup.c
> +++ b/mm/hugetlb_cgroup.c
> @@ -283,10 +283,55 @@ static u64 hugetlb_cgroup_read_u64(struct cgroup_subsys_state *css,
>  	}
>  }
>  
> +static int hugetlb_cgroup_read_u64_max(struct seq_file *seq, void *v)
> +{
> +	int idx;
> +	u64 val;
> +	bool write_raw = false;
> +	struct cftype *cft = seq_cft(seq);
> +	unsigned long limit;
> +	struct page_counter *counter;
> +	struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(seq_css(seq));
> +
> +	idx = MEMFILE_IDX(cft->private);
> +	counter = &h_cg->hugepage[idx];
> +
> +	switch (MEMFILE_ATTR(cft->private)) {
> +	case RES_USAGE:
> +		val = (u64)page_counter_read(counter);
> +		break;
> +	case RES_LIMIT:
> +		val = (u64)counter->max;
> +		break;
> +	case RES_MAX_USAGE:
> +		val = (u64)counter->watermark;
> +		break;

This case is dead code now.

> +	case RES_FAILCNT:
> +		val = counter->failcnt;
> +		write_raw = true;
> +		break;
> +	default:
> +		BUG();
> +	}
> +
> +	limit = round_down(PAGE_COUNTER_MAX,
> +			   1 << huge_page_order(&hstates[idx]));
> +
> +	if (val == limit && !write_raw)
> +		seq_puts(seq, "max\n");

This branch applies (or should apply!) only to RES_LIMIT, never
RES_USAGE or RES_FAILCNT.

> +	else if (write_raw)
> +		seq_printf(seq, "%llu\n", val);

This applies only to RES_FAILCNT

> +	else
> +		seq_printf(seq, "%llu\n", val * PAGE_SIZE);

And this applies to RES_USAGE and RES_LIMIT.

But this seems unnecessarily obscure. Can you just put the
seq_printf()s directly into the case statements?



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [Monitors]

  Powered by Linux