Re: [PATCH v8 01/21] mm/zsmalloc: add zpdesc memory descriptor for zswap.zpool

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

 



On Thu, Dec 05, 2024 at 05:49:38PM +0000, Matthew Wilcox (Oracle) wrote:
> From: Alex Shi <alexs@xxxxxxxxxx>
> 
> The 1st patch introduces new memory descriptor zpdesc and rename
> zspage.first_page to zspage.first_zpdesc, no functional change.
> 
> We removed PG_owner_priv_1 since it was moved to zspage after
> commit a41ec880aa7b ("zsmalloc: move huge compressed obj from
> page to zspage").
> 
> Originally-by: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx>
> Signed-off-by: Alex Shi <alexs@xxxxxxxxxx>
> ---
>  mm/zpdesc.h   | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  mm/zsmalloc.c |  9 ++++---
>  2 files changed, 74 insertions(+), 4 deletions(-)
>  create mode 100644 mm/zpdesc.h
> 
> diff --git a/mm/zpdesc.h b/mm/zpdesc.h
> new file mode 100644
> index 000000000000..9ad232774469
> --- /dev/null
> +++ b/mm/zpdesc.h
> @@ -0,0 +1,69 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/* zpdesc.h: zswap.zpool memory descriptor
> + *
> + * Written by Alex Shi <alexs@xxxxxxxxxx>
> + *	      Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx>
> + */
> +#ifndef __MM_ZPDESC_H__
> +#define __MM_ZPDESC_H__
> +
> +/*
> + * struct zpdesc -	Memory descriptor for zpool memory
> + * @flags:		Page flags, mostly unused.
> + * @lru:		Indirectly used by page migration
> + * @movable_ops:	Used by page migration
> + * @next:		Next zpdesc in a zspage in zsmalloc zpool
> + * @handle:		For huge zspage in zsmalloc zpool
> + * @zspage:		Points to the zspage this zpdesc is a part of
> + * @first_obj_offset:	First object offset in zsmalloc zpool
> + * @_refcount:		Indirectly used by page migration
> + * @memcg_data:		Memory Control Group data.

It seems you forgot to remove the comment about memcg_data?
No strong opinion about memcg_data from me, tbh.

> + *
> + * This struct overlays struct page for now. Do not modify without a good
> + * understanding of the issues.  In particular, do not expand into
> + * the overlap with memcg_data.
> + *
> + * Page flags used:
> + * * PG_private identifies the first component page
> + * * PG_locked is used by page migration code
> + */
> +struct zpdesc {
> +	unsigned long flags;
> +	struct list_head lru;
> +	unsigned long movable_ops;
> +	union {
> +		struct zpdesc *next;
> +		unsigned long handle;
> +	};
> +	struct zspage *zspage;
> +	unsigned int first_obj_offset;
> +	atomic_t _refcount;
> +};
> +#define ZPDESC_MATCH(pg, zp) \
> +	static_assert(offsetof(struct page, pg) == offsetof(struct zpdesc, zp))
> +
> +ZPDESC_MATCH(flags, flags);
> +ZPDESC_MATCH(lru, lru);
> +ZPDESC_MATCH(mapping, movable_ops);
> +ZPDESC_MATCH(index, next);
> +ZPDESC_MATCH(index, handle);
> +ZPDESC_MATCH(private, zspage);
> +ZPDESC_MATCH(page_type, first_obj_offset);
> +ZPDESC_MATCH(_refcount, _refcount);
> +#undef ZPDESC_MATCH
> +static_assert(sizeof(struct zpdesc) <= sizeof(struct page));




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

  Powered by Linux