auto
  1   ˆl–ß=¿J•4Å6 ¸î61hßËƒs_�uÐb&=LyZof¯ÃÊ     ‹     }W[lW‚´âaåš·±ìá~[Zp–v°!”[¹_Êý²$e`hMg¡Ãv�:®C-ÔËî&¦¥q’&i.Pš ÒDYæH#V›7´Ò+šû!K•\?Xûñ�¹ž3	ü›?žþÿœó_¾óŸ3^¸{Î ÝJ~�ý7lDü:ãfT›913seqf¦Ëèb¨%Î€ä–‡y¸ìª¢iYkkk¦i¥r�ƒ3921£'„´&ä’Â—–½k—mez±xåÊ¢ˆõ£Co¸­Ú!U�Ø˜d™\ ’'oŸ,‘¦Ö¯GòÃ{ÞCºomµ/nö­5«Û×Û××7›ë×ÛõPÞV�LŒ¶¥î›¦YK6ìˆø7ž¿ßï?´]R(º~¥ìø¾S.ú®’U™²Ü|5U–”¸R¶ _ES™¬TTJjÍÚíö@wØ°wdâp¹ìºƒ�â‹ë–³zåˆµ±¤3±?u‡nà8'äÈ[×÷Ún¡0ç»Iž_4K.’ÊŽSž^f½¦#ßK¥Š6mC2‹qpf1$3‹Ð¶`Ùª‹Yµ•wÊ £v“¸ÒÛ
Ò¿¸Þ,˜ß]ÙXõ“r™åj\�D™ûƒT.X…B!±/ŽXNg@‡Gãì²[Š¾\¡ìûéüŽ�bN×÷]E/Ÿk_¬jž+Çrnè³VP£Wê¤M:Q©o¸ÞÊÊÊrÛMÐBø¤C‘¼E¸ñ[É~óaÛ‹7¨±éDÂÙŒã³wï­î­ì¶š\©¬+ãW|ß¾#’åJárñzV¼’~1¢!Ûï«\ªZå¢«‘¼^	)]Ov’¾�Ï¿º1Xéfó‡¹VòÆWÉü‹õÿ\q‹C©^Æ¸šê+åb!�þ¢æ¯Ÿ›_Dd'û9”ú}$ý#T™–�øÙfóAÌÉâý] ÎO)¦¤Ÿ²ƒM•GÒ~ec²’jÿ‹ ·£yãûjÑM÷«q½R©†%ÎÚ™ë I|#\Éédö¡~�éËÎ½•u%¿¤iiÞq‹aI9¿3mgù%.Ëj>c¨’BŽö bûr/"èKJåå¸egþ)õIõnêbâ_²¥—§mÍÙãÓö>\*mÉrŒ�¤úp¸’­þ‘,�ÉT ©á§V(&[ª#ûiŒï!†:%ãÊÎC9?¤NÚ˜Sq0Ëùò†;<™.ÞÏÜÎÅBQG÷_öaµž¬ã££ã…ÝF“ËNY·—+²„\.¨Ž_Ç�œOÓÛ††&N“¥½*ûYCKÜQeÙv…µ·³òþ;·×zËû"a‚àÈ|t�Ì_?¾Ž§ÈßL.U;Z>¥^Ã‡¯Ô»*EWë¾¡÷žK‚õÉ	˜n¯Õ­Là/Ö³}¹»íˆïW"øl7Ãã“Ô›Š ÖGÖ[Ë/õj<RÖü'¾”ýE)m¸Q±gB=�äuÀPoF<KòxU¯Kòm«·'¹ý“«ŽçËíÐ}ºPËd»ÛšˆL¢Ý`YÊ~wzÎ¸2%§=¾þ.ýwÏý÷¯}úÏ¼9mæ¤T�h#þ›x1Ðä¼ýF!µÏSœ]¿QH±¿(×¢ÐŸ\ØÌù?¦Ù›&ò'EÞÞÔî¬òãsÖc¹|ìÔüßYšÔV›,éúWäÎ­WsãwjùAf�Oíãè�ËW~~äãË•aR‹w,Ë_Hc7äg27º?f>¿ùz¥ó!G†úEZÏÑ-9Ò‡%çñr¯×[Ž÷³ü¶êu¸};É}Užöê†”×I‰è³§eç“¼ö$Mê;l;]NËMÍ´¢/¸´C„í™m"}¹Üâû ¯³á7_¶û¬Å¼¶@ù•Z²ÜH©"Û{¥4bä.€i<É?ýó"IR|}N›X|ÝNä!~ùÝØÔø9YM½¿Ë&™žÊa?ü?+É‹äá–ðn÷oÇ±Fâ^¦”Bÿ½Rå:|Üˆnzêó_"¿Œ`ñù$ù8y	Aý‚C‡É�‘ùn?¹N>C>,žã°ËZƒg8TÍ"˜kràexá�¢Ž6sÏ“Ÿ ?E~’ü8‚ù#ÁgœkÐä<ù2nõ–‚z=¨ÏõýAý‘ >Ôõ¹ þ(�êƒúoƒúx#Þ„7cÞ‚·âmx;Þ�wâ]x7Þƒ÷â}(áý¸·ãø Æ±e|wàNXø0&0‰�à£Ø…�á.|ŸÀ'ñ)|wã3ø,>‡Ïãø"¾„/ã+ø*îÁ×ðu|ßÄ·ðm|ßÅ÷ð}TðìÆÜ‹ÂÆ}Ø‹áÇø	ü÷ãLágx?Ç/ðKLcªø~�‡àâ7¨!XØñ(ÄeˆÓÇ žƒX‚8q
âÄYˆç!^€øÄ9ˆYˆÁ,_„8Éï ˆ— .Bœ‡xâoW!ZÏÀ;ï8<–oÿ)øOB…ø#Ä_ .A¼ñ¼3ð.Á»J‡wÞx,ÒQxgá±ô-Ö§ÅÚ´X£ËÜxAó(™h¶È¬j“°hÒ®yˆüò3ä§iËz6XÈÆKdÖ»Á÷Â¤Al4Ÿ%!ÿžL›æi2!Ö$¼š×¤}“8i#M¹&chMÂ®Išô§y–LÈ5ø®±@	Ù‘Ö’Ïœ£UG—AéžG÷)\£t×�w¡{×fÑ=‰îatO³| ‹óÏâÚ\0 X å…`ž³ÍÓ«ƒÌÅ‹üCÒ‘:¸À4þ•â<¼?Óh1xì <¾˜g03Wá¸ó¿ZKð–ð_¨¬�\i       �ÆÃÊ      File not found.
     �ÆÃÊ      File not found.
     ˆÈÌƒYsÇÃÊ X    /* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_MBCACHE_H
#define _LINUX_MBCACHE_H

#include <linux/hash.h>
#include <linux/list_bl.h>
#include <linux/list.h>
#include <linux/atomic.h>
#include <linux/fs.h>

struct mb_cache;

/* Cache entry flags */
enum {
	MBE_REFERENCED_B = 0,
	MBE_REUSABLE_B
};

struct mb_cache_entry {
	/* List of entries in cache - protected by cache->c_list_lock */
	struct list_head	e_list;
	/*
	 * Hash table list - protected by hash chain bitlock. The entry is
	 * guaranteed to be hashed while e_refcnt > 0.
	 */
	struct hlist_bl_node	e_hash_list;
	/*
	 * Entry refcount. Once it reaches zero, entry is unhashed and freed.
	 * While refcount > 0, the entry is guaranteed to stay in the hash and
	 * e.g. mb_cache_entry_try_delete() will fail.
	 */
	atomic_t		e_refcnt;
	/* Key in hash - stable during lifetime of the entry */
	u32			e_key;
	unsigned long		e_flags;
	/* User provided value - stable during lifetime of the entry */
	u64			e_value;
};

struct mb_cache *mb_cache_create(int bucket_bits);
void mb_cache_destroy(struct mb_cache *cache);

int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
			  u64 value, bool reusable);
void __mb_cache_entry_free(struct mb_cache *cache,
			   struct mb_cache_entry *entry);
void mb_cache_entry_wait_unused(struct mb_cache_entry *entry);
static inline void mb_cache_entry_put(struct mb_cache *cache,
				      struct mb_cache_entry *entry)
{
	unsigned int cnt = atomic_dec_return(&entry->e_refcnt);

	if (cnt > 0) {
		if (cnt <= 2)
			wake_up_var(&entry->e_refcnt);
		return;
	}
	__mb_cache_entry_free(cache, entry);
}

struct mb_cache_entry *mb_cache_entry_delete_or_get(struct mb_cache *cache,
						    u32 key, u64 value);
struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *cache, u32 key,
					  u64 value);
struct mb_cache_entry 