linux/fs/mbcache.c
<<
on v14./spa 14./form 14.a on v14 href="../linux+v34.1.2/fs/mbcache.c">on v14.img src="../.static/gfx/right.png" alt=">>">on./spa on.spa class="lxr_search">on v ="+search" method="post" onsubmit="return do_search(this);">on v14.input typ hidden" nam navtarget" ion> ">on v14.input typ text" nam search" id search">on v14.buttopttyp submit">Searchon v14Prefs 14./a>on./spa v14 4./div v14 4.form ac > ="ajax+*" method="post" onsubmit="return false;">on.input typ hidden" nam ajax_lookup" id ajax_lookup" ion> ">o v14 4./form o v14 4.div class="headingbottom">
.div id file_contents"
4 41./a>.spa
 class="comment">/*./spa
  4 42./a>.spa
 class="comment"> * linux/fs/mbcache.c./spa
  4 43./a>.spa
 class="comment"> * (C) 2001-2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>./spa
  4 44./a>.spa
 class="comment"> */./spa
  4 45./a>o4 46./a>.spa
 class="comment">/*./spa
  4 47./a>.spa
 class="comment"> * Filesystem Meta Informa4 48./a>.spa
 class="comment"> *./spa
  4 49./a>.spa
 class="comment"> * The mbcache caches blocks of block devices that need to be located./spa
  4 .10"a>.spa
 class="comment"> * by their device/block number, as well as by other criteria (such4 11./a>.spa
 class="comment"> * as the block's contents).4 12./a>.spa
 class="comment"> *4 13./a>.spa
 class="comment"> * There ca
 only be one cache entry in a cache per device and block number.4 14./a>.spa
 class="comment"> * Addi4 15./a>.spa
 class="comment"> * addi4 16./a>.spa
 class="comment"> * or specified at cache create time.4 17./a>.spa
 class="comment"> *4 18./a>.spa
 class="comment"> * Each cache entry is of fixed size. An entry may be `ionid' or `inionid'4 19./a>.spa
 class="comment"> * in the cache. A ionid entry is in the main hash tables of the cache,./spa
  4 210"a>.spa
 class="comment"> * and may also be in the lru list. An inionid entry is not in any hashes./spa
  4 21./a>.spa
 class="comment"> * or lists.4 22./a>.spa
 class="comment"> *4 23./a>.spa
 class="comment"> * A ionid cache entry is only in the lru list if no handles refer to it.4 24./a>.spa
 class="comment"> * Inionid cache entries will be freed when the last handle to the cache4 25./a>.spa
 class="comment"> * entry is released. Entries that ca
not be freed immediately are put4 26./a>.spa
 class="comment"> * back on the lru list.4 27./a>.spa
 class="comment"> */./spa
  4 28./a>o4 29./a>#include <linux/kernel.h./a>> 4 30./a>#include <linux/module.h./a>> 4 31./a>o4 32./a>#include <linux/hash.h./a>> 4 33./a>#include <linux/fs.h./a>> 4 34./a>#include <linux/mm.h./a>> 4 35./a>#include <linux/slab.h./a>> 4 36./a>#include <linux/sched.h./a>> 4 37./a>#include <linux/init.h./a>> 4 38./a>#include <linux/mbcache.h./a>> 4 39./a>o4 40./a>o4 41./a>#ifdef4.a href="+code=MB_CACHE_DEBUG" class="sref">MB_CACHE_DEBUG./a>o4 42./a># define4.a href="+code=mb_debug" class="sref">mb_debug./a>(.a href="+code=f" class="sref">f./a>...) do { \o4 43./a>                .a href="+code=printk" class="sref">printk./a>(.a href="+code=KERN_DEBUG" class="sref">KERN_DEBUG./a> .a href="+code=f" class="sref">f./a>); \o4 44./a>                .a href="+code=printk" class="sref">printk./a>(.spa
 class="string">"\n"./spa
 ); \o4 45./a>        } while (0)o4 46./a>#define4.a href="+code=mb_assert" class="sref">mb_assert./a>(.a href="+code=c" class="sref">c./a>) do { if (!(.a href="+code=c" class="sref">c./a>)) \o4 47./a>                .a href="+code=printk" class="sref">printk./a>(.a href="+code=KERN_ERR" class="sref">KERN_ERR./a> .spa
 class="string">"assert/opt"./spa
  #c .spa
 class="string">" failed\n"./spa
 ); \o4 48./a>        } while(0)o4 49./a>#else 4 50./a># define4.a href="+code=mb_debug" class="sref">mb_debug./a>(.a href="+code=f" class="sref">f./a>...) do { } while(0)o4 51./a># define4.a href="+code=mb_assert" class="sref">mb_assert./a>(.a href="+code=c" class="sref">c./a>) do { } while(0)o4 52./a>#endifo4 53./a>#define4.a href="+code=mb_error" class="sref">mb_error./a>(.a href="+code=f" class="sref">f./a>...) do { \o4 54./a>                .a href="+code=printk" class="sref">printk./a>(.a href="+code=KERN_ERR" class="sref">KERN_ERR./a> .a href="+code=f" class="sref">f./a>); \o4 55./a>                .a href="+code=printk" class="sref">printk./a>(.spa
 class="string">"\n"./spa
 ); \o4 56./a>        } while(0)o4 57./a>o4 58./a>#define4.a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITER./a> ((unsigned short)~0U >> 1)o4 59./a>o4 60./a>static4.a href="+code=DECLARE_WAIT_QUEUE_HEAD" class="sref">DECLARE_WAIT_QUEUE_HEAD./a>(.a href="+code=mb_cache_queue" class="sref">mb_cache_queue./a>);o4 61./a>                o4 62./a>.a href="+code=MODULE_AUTHOR" class="sref">MODULE_AUTHOR./a>(.spa
 class="string">"Andreas Gruenbacher <a.gruenbacher@computer.org>"./spa
 );o4 63./a>.a href="+code=MODULE_DESCRIPTION" class="sref">MODULE_DESCRIPTION./a>(.spa
 class="string">"Meta block cache (for extended attributes)"./spa
 );o4 64./a>.a href="+code=MODULE_LICENSE" class="sref">MODULE_LICENSE./a>(.spa
 class="string">"GPL"./spa
 );o4 65./a>o4 66./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_create" class="sref">mb_cache_create./a>);o4 67./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_shrink" class="sref">mb_cache_shrink./a>);o4 68./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_destroy" class="sref">mb_cache_destroy./a>);o4 69./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_alloc" class="sref">mb_cache_entry_alloc./a>);o4 70./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_insert" class="sref">mb_cache_entry_insert./a>);o4 71./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_release" class="sref">mb_cache_entry_release./a>);o4 72./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_free" class="sref">mb_cache_entry_free./a>);o4 73./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_get" class="sref">mb_cache_entry_get./a>);o4 74./a>#if !.a href="+code=defined" class="sref">defined./a>(.a href="+code=MB_CACHE_INDEXES_COUNT" class="sref">MB_CACHE_INDEXES_COUNT./a>) || (.a href="+code=MB_CACHE_INDEXES_COUNT" class="sref">MB_CACHE_INDEXES_COUNT./a> > 0)o4 75./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_find_first" class="sref">mb_cache_entry_find_first./a>);o4 76./a>.a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL./a>(.a href="+code=mb_cache_entry_find_next" class="sref">mb_cache_entry_find_next./a>);o4 77./a>#endifo4 78./a>o4 79./a>.spa
 class="comment">/*./spa
  4 810"a>.spa
 class="comment"> * Global data: list of all mbcache's, lru list, and a spinlock for./spa
  4 81./a>.spa
 class="comment"> * accessing cache data structures on SMP machines. The lru list is./spa
  4 82./a>.spa
 class="comment"> * global across all mbcaches.4 83./a>.spa
 class="comment"> */./spa
  4 84./a>o4 85./a>static4.a href="+code=LIST_HEAD" class="sref">LIST_HEAD./a>(.a href="+code=mb_cache_list" class="sref">mb_cache_list./a>);o4 86./a>static4.a href="+code=LIST_HEAD" class="sref">LIST_HEAD./a>(.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4 87./a>static4.a href="+code=DEFINE_SPINLOCK" class="sref">DEFINE_SPINLOCK./a>(.a href="+code=mb_cache_spinlock" class="sref">mb_cache_spinlock./a>);o4 88./a>o4 89./a>.spa
 class="comment">/*./spa
  4 910"a>.spa
 class="comment"> * What the mbcache registers as to get shrunk dynamically.4 91./a>.spa
 class="comment"> */./spa
  4 92./a>o4 93./a>static4int4.a href="+code=mb_cache_shrink_fn" class="sref">mb_cache_shrink_fn./a>(struct4.a href="+code=shrinker" class="sref">shrinker./a> *.a href="+code=shrink" class="sref">shrink./a>,o4 94./a>                              struct4.a href="+code=shrink_control" class="sref">shrink_control./a> *.a href="+code=sc" class="sref">sc./a>);o4 95./a>o4 96./a>static4struct4.a href="+code=shrinker" class="sref">shrinker./a> .a href="+code=mb_cache_shrinker" class="sref">mb_cache_shrinker./a> = {o4 97./a>        ..a href="+code=shrink" class="sref">shrink./a> = .a href="+code=mb_cache_shrink_fn" class="sref">mb_cache_shrink_fn./a>,o4 98./a>        ..a href="+code=seeks" class="sref">seeks./a> = .a href="+code=DEFAULT_SEEKS" class="sref">DEFAULT_SEEKS./a>,o4 99./a>};o4100./a>o4101./a>static4.a href="+code=inline" class="sref">inline./a> into4102./a>.a href="+code=__mb_cache_entry_is_hashed" class="sref">__mb_cache_entry_is_hashed./a>(struct4.a href="+code=mb_cache_entry" class="sref">mb_cache_entry./a> *.a href="+code=ce" class="sref">ce./a>)o4103./a>{o4104./a>        return !.a href="+code=list_empty" class="sref">list_empty./a>(&.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_block_list" class="sref">e_block_list./a>);o4105./a>}o4106./a>o4107./a>o4108./a>static4voido4109./a>.a href="+code=__mb_cache_entry_unhash" class="sref">__mb_cache_entry_unhash./a>(struct4.a href="+code=mb_cache_entry" class="sref">mb_cache_entry./a> *.a href="+code=ce" class="sref">ce./a>)o41.10"a>{o4111./a>        if (.a href="+code=__mb_cache_entry_is_hashed" class="sref">__mb_cache_entry_is_hashed./a>(.a href="+code=ce" class="sref">ce./a>)) {o4112./a>                .a href="+code=list_del_init" class="sref">list_del_init./a>(&.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_block_list" class="sref">e_block_list./a>);o4113./a>                .a href="+code=list_del" class="sref">list_del./a>(&.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_index" class="sref">e_index./a>..a href="+code=o_list" class="sref">o_list./a>);o4114./a>        }o4115./a>}o4116./a>o4117./a>o4118./a>static4voido4119./a>.a href="+code=__mb_cache_entry_forget" class="sref">__mb_cache_entry_forget./a>(struct4.a href="+code=mb_cache_entry" class="sref">mb_cache_entry./a> *.a href="+code=ce" class="sref">ce./a>,4.a href="+code=gfp_t" class="sref">gfp_t./a> .a href="+code=gfp_mask" class="sref">gfp_mask./a>)o41210"a>{o4121./a>        struct4.a href="+code=mb_cache" class="sref">mb_cache./a> *.a href="+code=cache" class="sref">cache./a> = .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_cache" class="sref">e_cache./a>;o4122./a>o4123./a>        .a href="+code=mb_assert" class="sref">mb_assert./a>(!(.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_used" class="sref">e_used./a> || .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_queued" class="sref">e_queued./a>));o4124./a>        .a href="+code=kmem_cache_free" class="sref">kmem_cache_free./a>(.a href="+code=cache" class="sref">cache./a>->.a href="+code=c_entry_cache" class="sref">c_entry_cache./a>,4.a href="+code=ce" class="sref">ce./a>);o4125./a>        .a href="+code=atomic_dec" class="sref">atomic_dec./a>(&.a href="+code=cache" class="sref">cache./a>->.a href="+code=c_entry_count" class="sref">c_entry_count./a>);o4126./a>}o4127./a>o4128./a>o4129./a>static4voido4130./a>.a href="+code=__mb_cache_entry_release_unlock" class="sref">__mb_cache_entry_release_unlock./a>(struct4.a href="+code=mb_cache_entry" class="sref">mb_cache_entry./a> *.a href="+code=ce" class="sref">ce./a>)o4131./a>        .a href="+code=__releases" class="sref">__releases./a>(.a href="+code=mb_cache_spinlock" class="sref">mb_cache_spinlock./a>)o4132./a>{o4133./a>        .spa
 class="comment">/* Wake up all processes queuing for this cache entry. */./spa
  4134./a>        if (.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_queued" class="sref">e_queued./a>) 4135./a>                .a href="+code=wake_up_all" class="sref">wake_up_all./a>(&.a href="+code=mb_cache_queue" class="sref">mb_cache_queue./a>);o4136./a>        if (.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_used" class="sref">e_used./a> >= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITER./a>) 4137./a>                .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_used" class="sref">e_used./a> -= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITER./a>;o4138./a>        .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_used" class="sref">e_used./a>--;o4139./a>        if (!(.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_used" class="sref">e_used./a> || .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_queued" class="sref">e_queued./a>)) {o4140./a>                if (!.a href="+code=__mb_cache_entry_is_hashed" class="sref">__mb_cache_entry_is_hashed./a>(.a href="+code=ce" class="sref">ce./a>))o4141./a>                        goto .a href="+code=forget" class="sref">forget./a>;o4142./a>                .a href="+code=mb_assert" class="sref">mb_assert./a>(.a href="+code=list_empty" class="sref">list_empty./a>(&.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_lru_list" class="sref">e_lru_list./a>));o4143./a>                .a href="+code=list_add_tail" class="sref">list_add_tail./a>(&.a href="+code=ce" class="sref">ce./a>->.a href="+code=e_lru_list" class="sref">e_lru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4144./a>        }o4145./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=mb_cache_spinlock" class="sref">mb_cache_spinlock./a>);o4146./a>        return;o4147./a>.a href="+code=forget" class="sref">forget./a>:o4148./a>        .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=mb_cache_spinlock" class="sref">mb_cache_spinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" class="sref">__mb_cache_entry_forget./a>(.a href="+code=ce" class="sref">ce./a>,4.a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);o4150./a>}o4151./a>o4152./a>o4153./a>.spa
 class="comment">/*./spa
  4154./a>.spa
 class="comment"> * mb_cache_shrink_fn()  memory pressure callback./spa
  4155./a>.spa
 class="comment"> *./spa
  4156./a>.spa
 class="comment"> * This func  >
 is called by the kernel memory management when memory./spa
  4157./a>.spa
 class="comment"> * gets low.4158./a>.spa
 class="comment"> *./spa
  4159./a>.spa
 class="comment"> * @shrink: (ignored)./spa
  41610"a>.spa
 class="comment"> * @sc: shrink_control passed from reclaim./spa
  4161./a>.spa
 class="comment"> *./spa
  4162./a>.spa
 class="comment"> * Returns the number of objects which are present in the cache../spa
  4163./a>.spa
 class="comment"> */./spa
  4164./a>static4int 4165./a>.a href="+code=mb_cache_shrink_fn" class="sref">mb_cache_shrink_fn./a>(struct4.a href="+code=shrinker" class="sref">shrinker./a> *.a href="+code=shrink" class="sref">shrink./a>, struct4.a href="+code=shrink_control" class="sref">shrink_control./a> *.a href="+code=sc" class="sref">sc./a>) 4166./a>{o4167./a>        .a href="+code=LIST_HEAD" class="sref">LIST_HEAD./a>(.a href="+code=free_list" class="sref">free_list./a>);o4168./a>        struct4.a href="+code=mb_cache" class="sref">mb_cache./a> *.a href="+code=cache" class="sref">cache./a>;o4169./a>        struct4.a href="+code=mb_cache_entry" class="sref">mb_cache_entry./a> *.a href="+code=entry" class="sref">entry./a>h7a>        struct4.a href="+code=mb_cache_s="line" nam
  L131">4131.ss="line" nam
  L76">4 76sc: class="line" nam
  L166">4166./a>{o<
  L76">4 76sc: class="line" nam
  L166">" nam
a3cache_s="line" nam
  L13ry_is_hashed.=shrinker" class="s L126">4126./a>}o4 76sc: class="line" name.c#L162"(.a href="+code=mb_cache1_entr171y_is_hashed.=shrinker" class="snr_to_sca *.a href="+codenr_to_sca a>;omb_nr_to_sca *.a href="+codenr_to_sca a>;o6">4 76sc: class="line" namects whic(.a href="+code=mb_cache1_entr172="sref">free_list./a>);o41210"a>{omb_20">41210"a>{o4 76sc: class="line" namhe.c#L164(.a href="+code=mb_cache1_entr1_get" ">4 76sc: class="line" namlass="linf="+code=MB_CACHE_INDEXE1S_COU17he" class="sref">cache./a>-&href="fs/mbcache.c#L51" id  L51" clasm
  L65">4 65./a>o4 4">4to26./a %d25" clas/mbcache.c#L6 class="line" namnr_to_sca *.a href="+codenr_to_sca a>;o="+code=mb_cache" class="srYMBOL./a>1(.a href="+code=mb_cache1_entr17he_spinlock" class="sref">mb_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" cYMBOL./a>1(.a href="+code=mb_cache1_entr17ref="+code=focode=mblass="line" namnr_to_sca *.a href="+codenr_to_sca a>;o--.c#L14c#L14./a>->.a href="+code=e_block_list" class="sref">e_block_list./a>);o4144./a>        }o4 78./a>oe_used./a> -= .a "sref">ce./a>)o4131./a>        .a href="+code= =href="+code=__mb_cache_enif">mb_cac>4 79./a>.spa
 class="co1mment178f">e_used./a> -= .a ss="sref">ce./a>->.a hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" class="line"" nam
  L144">4144./a>        }o4 77.s/mbcach100" id  L100" class="lin1.c#L80" i1d  L80" class="line" nam1
  L8179f">e_used./a> -= .a ss="sref./a> -= .a "sref">ce./a>)o4143./a>                .a hre__mb_cache_entry_forget" cbcacheĿs, lru list, and a spi1nlock18ry_is_hashed./a>(.a h">ce./a>->.a hrefmovecode=e_lru_list" class="smovecode=ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4168./a>        struct4.a href="+code=mb_cache" class="srtures on 1SMP machines. The lru li1st is18cache.c#L142" id  L14ce" class="sref">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="srtects whicfreeL152" id  L152" class="line.c#L84" 1id  L84" class="line" na1m
  L18ef">ce./a>->.a href="+codss="sfor_elasfche.c#L131" id  L131 hreffor_elasfche.class=  L141">4141./a>9./a>        struct4.a href=e.c#L144" id  L144" class="line"">4 86./a>static4.a href="+code=LISm
  L125">4125./a>s="line"">4 86./a>static4.chref="+code=LIS.a href="+code=__mb_cache_enam
  L85"1>4 85./a>static4.a href=1"+cod18ss="sref">KERN_ERR./a> .a href="+codhref="fs/mbcache.c#L51" id  L51" clasm
  L65">4 65./a>ostatic4.cha hrcach100" id  L100" class="lin1HEAD./a>(1.a href="+code=mb_cache_1list"18e=mb_cache_queue" claERN_ERR./a> .a href="+codt" clasrea"fs/mbcache.c#L1t" clasrea"ru_list./a>, &.a href=4126./a>}oKERN_ERR./a> .a href="+cod L126">4126./a>}o, &.a href=4126./a>}o(.a href="+co1de=mb187="sref">freeL152" id  L152" class="lined size. Ann entry may be `ionid'ment18he_spinlock" class="sref">mb_cache_spinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" c.c#L90" i1d  L90" class="line" nam1
  L918 href="+code=ce" class="sref hreffor_elasfche.c_safhref="fs/mbcache hreffor_elasfche.c_safhlass=  L141">4141./a1.ss="line" nam
  L76">4 76sc: lass="line" nam
  L166">4166./a>{o<
  L7e.c#L144" id  L144" cl L168">4168./a>        struct4.a href class="line" namm
  L143">4143./a>                .a hrea href="+code=__mb_cache_en as to ge1t shrunk dynamically.(.a h">ce./a>->.a">ce./a>,4.a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);o4 76sc: lass="line" nam20">41210"a>{ofreeL152" id  L152" class="linam
  L93"1>4 93./a>static4int4.a h1ref="192="sref">freeef">ce.=  L141">4141./a>L126">4126./a>}omb_ysctl_vfs="sref".spa
 cllock./a>);o4 76sc: class="line" na="sref">m1b_cache_shrink_fn./a>(st1ruct41a hrefL152" id  L152" class="linam
  L85"1ontrol" class="sref">shr1ink_c19LIST_HEAD" class="sref">LIST_1am
  L96"1>4 96./a>static4struct4.1a hre1="+code=shrinker" class="sref"1>shrinker1./a> .a href="+code=mb_c1ache_1947./a>.spa
 class="comment"> * Filesystem Meta Informa = .a1 href="+code=mb_cache_sh1rink_19" nam
  L158">4158./a>.spa
 clf="+code=EXPORT5">4EXPORT a newomment"> * entry is released. Entries1a> = .a h1ref="+code=DEFAULT_SEEKS1" cla1959">4159./a>.spa
 class="comment"> * @shrink: (ignored)./spa
e" nam
  1L100">4100./a>o41610"aAll25" classin14" class="4163equallass="lC     if (lass  L19"> cla"> * and may also be in the lru llist. An iinionid entry is not in aa
  20.c#L161" id  L161" class="linemultiple10">4 .1. If./a>  i163" cXPORT" id  L10"XPORTd, nam
  L91"> * and may also be in the lru ls/mbcachea href="fs/mbcache.c#L102" id 20spa
  4157./a>.spa
." id  L16NULL 24./a>">4t"> * entry is released. Entries "sref">__2b_cache_entry_is_hashed.2a>(st20
  415was avde=spa
t"> */./spa
  4104./a>        re2urn !20164">4164./a>static4int  */./spa
   * @sc: shrink_control pas2ne" nam
 2L106">4106./a>obucketsment"> * @sc: shrink_control pas2n  4107./a>o4108./a>static4void2;one" nam
  L109">4109./a>2a hre20y" class="sref">mb_cine" nam
  L67">4 67./a>.a href="+code=EXPORT_SYM(conRT"char
  L131">4131./a>a hr 86./a>static4.a hrcach1.=shrinker" class="sbucket_bits 86./a>static4.bucket_bitshe.c#L167" id  L167" class="l2ef">__mb_2ache_entry_unhash./a>(st2uct4.2 href= href="+code=__mb_cache_e2ne" nam
 2L111">4111./a>        if2(.a h21ry_is_hashed.=shrinker" class="s *.a href="+coden76sc: lass="line" nambucket_>L126">4126./a>}oL126he.c4 76sc: class="line" n2shed" cla2s="sref">__mb_cache_entr2_is_h21ass="sref">cache./a> = .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_cache" class="sref">e_cache./a>;oe_caNULLhe.c6">4 76sc: class="line" n2ssref">__2list_del_init./a>(&.2 href21t">/*./spa
  list2del./a>(&.a href="+c2de=ce21ef">ce./a>->.a href="+code" class="sref">e_cache./a>;o4 70./a>.kmnam
 ef">shss=of="sref">ce./a>)oce./a>->.a h) class="line" nam
  L150">4150./a>}o4115./a>}o2a hre2="fs/mbcache.cref="+code=ce" classe" class="sref">e_cache./a>;o#L167" id  L167" class="l2ne" nam
 2L116">4116./a>oce.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n2s  4117./a>oce./a>->.a href="+code" class="sref">e_cache./a>;oid  L126" class="line"a hr 86./a>static4.cha hrcach4 76sc: class="line" n2s" nam
  2118">4118./a>static4void2free_list./a>);o, &.a href=4126./a>}one" nam
  L119">4119./a>2a hre21ed./a>--;ostatic4.e"bucket_bitscach4 76sc: class="line" n2sf">__mb_2ache_entry_forget./a>(st2uct4.21 href="+code=ce" class="srefemb_cache_entry./ae"b     ">mba>;o4 70./a>.kmnam
 ef">slass="line" nambucket_>L126">4126./a>}oL126he.c<* hss=of="sref">ce./a>)o4 76sc: class="line" n2ne" nam
 2L121">4121./a>        st2uct4.22ry_is_hashed./a>(.a hhhhhhhhhhhhhhhhhhhhhhhlass="line" nam
  L150">4150./a>}omb_ca2he./a> *.a href="+code=c2che" 22hed./a>(.a href=""+code=ce" classe" class="sref">e_cache./a>;oid  L126" class="line"b     ">mb_cache_entry./ae"b     ">mba>;o#L167" id  L167" class="l2e" nam
  2123">4123./a>        .a 2ref="22pty" class="sref">lis="line" nam
  L142">4de=e_lru_list" clafde=ru_l#L151" id  L151" class="l2eef">list2>(!(.a href="+code=ce" c2ass="2ref">ce./a>-&g134.blass="line" namn*.a href="+coden76sc=0nrinker" class="sn*.a href="+coden76sc#L39" id  L39e" nambucket_>L126">4126./a>}oL126he.cnrinker" class="sn*.a href="+coden76sc++#L167" id  L167" class="l2eass="lin2ache_free./a>(.a href="+2ode=c22ss="sref">KERN_ERR./a> .a href="+codINIT_href="fs/mbcache.c#L168"INIT_href="fs/ru_list./a>, &.a href=mb_cache_entry./ae"b     ">mba>;o[inker" class="sn*.a href="+coden76sc]c#L151" id  L151" class="l2ee" nam
 2/a>(&.a href="+code=2ache"2class="sref">cache./a>->.a=mb_cache_entry./ae" clas ">mba>;o4 70./a>.kmnam
 ef">slass="line" nambucket_>L126">4126./a>}oL126he.c<* hss=of="sref">ce./a>)o4 76sc: class="line" n2n  4127./a>oKERN_ERR./ahhhhhhhhhhhhhhhhhhhhhhlass="line" nam
  L150">4150./a>}o4128./a>oe_cache./a>;oid  L126" class="line" clas ">mb_cache_entry./ae" clas ">mba>;o#L167" id  L167" class="l2em
  L29">129">4129./a>static4void2e_used./a> -= .a ="line" nam
  L142">4de=e_lru_list" clafde=ru_l#L151" id  L151" class="l2ef">__mb_2ne" nam
  L130">4130./a>2a hre229f">ce./a>-&g134.blass="line" namn*.a href="+coden76sc=0nrinker" class="sn*.a href="+coden76sc#L39" id  L39e" nambucket_>L126">4126./a>}oL126he.cnrinker" class="sn*.a href="+coden76sc++#L167" id  L167" class="l2lass="sre2">__mb_cache_entry_relea2e_unl23ry_is_hashed./a>(.a h">ce./a>->.aINIT_href="fs/mbcache.c#L168"INIT_href="fs/ru_list./a>, &.a href=mb_cache_entry./ae" clas ">mba>;o[inker" class="sn*.a href="+coden76sc]c#L151" id  L151" class="l2_releases2/a>(.a href="+code=mb_ca2he_sp2nlock" class="sref">mb_cache_=4 67./a>.a hrekm class="s  L67"ef">slass="line" nama hr 86./a>static4.a hrcach1L151" id  L151" class="l2_" nam
  2L133">4133./a>        .s2a
 cl23pty" class="sref">lishss=of="sref">ce./a>)olist2ing for this cache entry2 */./23+code=ce" class="sref">ce./a>->.aSLAB_Rref=IM_AC="line" nam
  L75">4SLAB_Rref=IM_AC="lincode|">ce./a>->.aSLAB_MEM_SPRfs/mbcache.c#L168"SLAB_MEM_SPRfs/76sc: lass="line" namNULLass="sref">e_caNULLhe.cc#L151" id  L151" class="l2_ass="lin2ref="+code=e_queued" cla2s="sr2f">e_queued./a>) <"+code=ce" classe" class="sref">e_cache./a>;oid  L126" class="line" nam
  (&.a hr2f="+c2de=mb_cache_queue" cla="line" nam
  L142">4de=2e_lru_list" clafde=2ru_l#L151" id  L151" class="l2>->.a 2ref="+code=e_used" class2"sref23e.c#L118" id  L118" class="li2e./a>->2.a href="+code=e_used" c2ass="2ref">e_used./a>.spa
 class="comment"> * Filesystem Meta Informae_2359">4159./a>.spa
 class="commmmmmmmm* Set ./aupper limitL82"3" class="linec     if (lassso"3"" class">mba>Filesystem Meta Informa__mb_2 href="+code=e_used" cla2s="sr23ass="line" nam
  L160">41610mmmmmmmm* chains won
  L8t grow too longt"> */./spa
  __mb_c2che_e24.c#L161" id  L161" class="limmmmmmmm*e.c#L29" id  L29" class="line" nat" class=2sref">forget./a>;omb_cache_=L126">4126./a>}oL126he.cmb_2ssert./a>(.a href="+code2list_24t">/*./spa
  (&.2 href24ef">ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 2lass="lin2" nam
  L145">4145./a>  2     2a href="+code=ce./a>)o, &.a href=4 86./a>static4.chref="+code=LISe.c#L144" id  L144" class="line"">4 86./a>static4.a href="+code=LIS=__mb_cache_entry_forget" 2le" nam
 2k./a>(&.a href="+cod2=mb_c2che_spinlock" class="sref">mb_cache_spinlock./a>);o4146./a>        return;o41472/a>.a2href="+code=forget" "sref">mb_cache_=->2/mbcache.c#L148" id  L142" cla24e.c#L129" id  L129" class="li2spin_unlo2k./a>(&.a href="+cod2=mb_c24y" class="sref">mb_c4de=2e_lru_list" clafde=2ru_lspin_unlock" class="sref"2lass="sre2">__mb_cache_entry_forge2./a>(2a href="+code=ce" class="srefk"+code=c_entry_cacheref">c_entry_cache./a>,4.a href="+code=ce" class="sref">ce./a>);omb_cache_entry./ae" clas ">mba>;o#="fs/mbcache.c#L147" id  2ne" nam
 2L151">4151./a>oinlin2e" nam
  2152">4152./a>o4153./a>.spa
 class2"comm252="sref">free_list./a>);oc_entry_cache./a>,4.a href="+code=ce" class="sref">ce./a>);omb_cache_entry./ae"b     ">mba>;o#="fs/mbcache.c#L147" id  2ns="sref"2 id  L154" class="line" 2am
  25ef">ce./a>->.a href="+codk"+code=c_entry_cacheref">c_entry_cache./a>,4.a href="+code=ce" class="sre#="fs/mbcache.c#L147" id  2nass="lin2ure callback./spa
  ce.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n2he.c#L1562 id  L156" class="line" 2am
  25he.c#L117" id  L117" class="li2by the ke2nel memory management wh2n mem25e.c#L118" id  L118" class="li2="fs/mbca2he.c#L158" id  L158" cla2s="li25e.c#L129" id  L129" class="li2he.c#L1592 id  L159" class="line" 2am
  2159">4159./a>.spa
 class="co> * Filesystem Meta Informa41610"a=shrink" class=(ment"> * @sc: shrink_control pas2ed from r2claim./spa
   * @sc: shrink_control pas2e" nam
  2 id  L162" class="line" 2am
  2162">4162./a>.spa
 class="comm Remove classc     if (lassass=10">4 .
 claslass="commaAll2c     if (lasent"> * @sc: shrink_control pas2e" nam
  2h are present in the cac2e../s2a
   ceTd, pa
 thusrefmaina
 class="commaAll2olas91"> * and may also be in the lru che.c#L162" id  L164" class="line"2nam
 2L164">4164./a>static4int  */./spa
  4165./a>.2 href26mbcache.c#L155" id  L155" cla"> */./spa
  : L163">0">4 .
  L81sc     if (lassto e=sc" cl */./spa
  4167./a>        .a2href=26y./spa
  (.a href="+code=free_li2t" cl2ss="srcache_entry_release_unlock" 2ef">mb_ca2he./a> *.a href="+code=c2che" 26y" class="sref">mb_cine" nam
ol./a> *.a href="+codine" nam
ol./a>>c_en"sref">ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na#L167" id  L167" class="l2ss="sref"2mb_cache_entry./a> *.a h2ef="+26href= href="+code=__mb_cache_e2m
  L166"2" nam
a3cache_s="line" n2m
  L23ry_is_hashed.ce./a>)o4168./a>        struct4.a href="+code=mb_cache" class="s2me.c#L1622(.a href="+code=mb_cache2_entr27ass="sref">cache./a> = .a href="+co hrefhea"fs/mbcache.c#L1 hrefhea".a h<*ce./a>)o)o4166./a>{lo<
  L76">4 76sc: class="line" n2mects whi2(.a href="+code=mb_cache2_entr27t">/*./spa
  ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 2mlass="li2f="+code=MB_CACHE_INDEXE2S_COU27he" class="sref">cache./a>-& hreffor_elasfsafhref="fs/mbcache hreffor_elasfsafhlass=  L141">4141./a=e_lru_list" clas=LISe.ce./a>)o4166./a>{lo<
  L7e.c#L144" id  L144" class="line" nam
  L144">4144./a>        }o2(.a href="+code=mb_cache2_entr27e=mb_cache_queue" cla"sref">ce./a>)o4131./a>        .a href="+code= =href="+code=__mb_cache_e2YMBOL./a>2(.a href="+code=mb_cache2_entr276s="sref">KERN_ERR./ahhhhhhhhef">cache./a>-& hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" cla=e_lru_list" clas=LISe."sref">ce./a>)o4143./a>                .a hre__mb_cache_entry_forget" 2ine" nam
2  L78">4 78./a>oe_used./a> -= .a t;= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERb0">">4126./a>}oode= =a href="fs/mbcachb0">">4126./a>}o" na#a href="+code=__mb_cache_e2Yf">mb_ca2>4 79./a>.spa
 class="co2mment278f">e_used./a> -= .a ss="sref">ce./a>->.a hrefmovecode=e_lru_list" class="smovecode=ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4168./a>        struct4.a href="+code=mb_cache" class="s2.c#L80" i2d  L80" class="line" nam2
  L8279f">e_used./a> -= .a ss="sref4" id  L144" cl">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="s2bcacheʼns, lru list, and a spi2nlock28ry_is_hashed./a>(.a hL117" id  L117" class="li2tures on 2SMP machines. The lru li2st is281="sref">freeL152" id  L152" class="li2tects whi2free_list./a>);o);o4146./a>        return;oce./a>->.a href="+codss="sfor_elasfsafhref="fs/mbcache hreffor_elasfsafhlass=  L141">4141./a=e_lru_list" clas=LISe.ce./a>)o4166./a>{lo<
  L7e.c#L144" id  L144" cl L168">4168./a>        struct4.a href=a href="+code=__mb_cache_e2am
  L85"2>4 85./a>static4.a href=2"+cod28ss="sref">KERN_ERR./a> .a href="+cod">ce./a>,4.a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);oce./a>)o4143./a>                .a hre class="line" nam
  L150">4150./a>}oKERL152" id  L152" class="li2tne" nam
2PINLOCK./a>(.a href="+co2de=mb287="srL152" id  L152" class="li2tf">mb_ca2nn entry may be `ionidment28="fs/mbcache.c#L130" id  L1302.c#L90" i2d  L90" class="line" nam2
  L928 hrefmbcache.c#L130" id  L1302 as to ge2t shrunk dynamically.4162./a>.spa
 class="comm " class="de"sroy(ment"> * @sc: shrink_control pas2am
  L93"2>4 93./a>static4int4.a h2ref="29
   * @sc: shrink_control pas2a.c#L84" 2b_cache_shrink_fn./a>(st2ruct429164">4164./a>static4int sss="commen to its minimum possibleshss= (hopefully 0 if (las),ent"> * @sc: shrink_control pas2am
  L85"2ontrol" class="sref">shr2ink_c29mbcache.c#L155" id  L155" claspa
 then de"sroys it. If./a>  was s="c55"T" id  L1, un-nam
  L91 s="ent"> * @sc: shrink_control pas2aMBOL./a>2>4 96./a>static4struct4.2a hre29t4157./a>.spa
.ent"> * @sc: shrink_control pas2aMBOL./a>2./a> .a href="+code=mb_c2ache_2947./a>.spa
 class="comment"e.e.c#L29" id  L29" class="line" na./a> = .a2 href="+code=mb_cache_sh2rink_29s="srcache_entry_release_unlock" 2a> = .a h2ref="+code=DEFAULT_SEEKS2" cla29y" class="sref">mb_cine" nam
de"sroy#L131" id  L131" class="de"sroy>c_en"sref">ce./a>)oce./a>->.a href="+code=e_cache" class="sref">e_cache./a>;o#L167" id  L167" class="l2e" nam
  2L100">4100./a>o)o4168./a>        struct4.a href="+code=mb_cache" class="s3ls/mbcach3a href="fs/mbcache.c#L103" id 30ass="sref">cache./a> = .a href="+co hrefhea"fs/mbcache.c#L1 hrefhea".a h<*ce./a>)o)o4166./a>{lo<
  L76">4 76sc: class="line" n3"sref">__3b_cache_entry_is_hashed.3a>(st30t">/*./spa
  4104./a>        re3urn !30ef">ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 3nbe freed3t_empty./a>(&.a href3"+cod30he" class="sref">cache./a>-& hreffor_elasfsafhref="fs/mbcache hreffor_elasfsafhlass=  L141">4141./a=e_lru_list" clas=LISe.ce./a>)o4166./a>{lo<
  L7e.c#L144" id  L144" class="line" nam
  L144">4144./a>        }ostatic4struct4.3s/mbc30e=mb_cache_queue" cla"sref">ce./a>)o4131./a>        .a href="+code= =href="+code=__mb_cache_e3n  4107./a>oKERN_ERR./ahhhhhhhhef">cache./a>-& hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" cla=e_lru_list" clas=LISe."sref">ce./a>)o4143./a>                .a hre__mb_cachede=__mb_cache_e3n7 e_used./a> -= .a t;= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERe" class="sref">e_cae="line" nae_cache./a>;o#a href="+code=__mbforget" 3n8 e_used./a> -= .a ss="sref">ce./a>->.a hrefmovecode=e_lru_list" class="smovecode=ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4168./a>        struct4.a href="+cof="+code=__mbforget" 3n9 4100./a>oe_used./a> -= .a ss="sref4" id  L144" cl">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="s3ne" nam
 3L111">4111./a>        if3(.a h31ry_is_hashed./a>(.a hL117" id  L117" class="li3shed" cla3s="sref">__mb_cache_entr3_is_h311="sref">freeL152" id  L152" class="li3ssref">__3list_del_init./a>(&.3 href312="sref">free_list./a>);oce./a>);o4 86./a>static4.chref="+code=LIS."+code=mb_cache" class="s3ne" nam
 3del./a>(&.a href="+c3de=ce31ef">ce./a>->.a href="+cod_cache_spinlock./a>);o4146./a>        return;o4115./a>}o3a hre31LIST_HEAD" class="sref">LIST_3ne" nam
 3L116">4116./a>omb hreffor_elasfsafhref="fs/mbcache hreffor_elasfsafhlass=  L141">4141./a=e_lru_list" clas=LISe.ce./a>)o4166./a>{lo<
  L7e.c#L144" id  L144" cl L168">4168./a>        struct4.a href=a href="+code=__mb_cache_e3s  4117./a>oKERN_ERR./a> .a href="+cod">ce./a>,4.a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);oce./a>)o4118./a>static4void3e_used./a> -= .a                                    lass="line" namm
  L143">4143./a>                .a hre class="line" nam
  L150">4150./a>}o4119./a>3a hre31ed./a>--;o4121./a>        st3uct4.32ry_is_hashed.t;= .a href="+code=t" clasrea"fs/mbcache.c#L1t" clasrea"ru_list./a>, &.a href=4126./a>}omb_ca3he./a> *.a href="+code=c3che" 32cache.c#L142" id  L14ce" class="sref" cerroode=shrink_contr" cerroo#L132"m
  L65">4 65./a>o__3123">4123./a>        .a 3ref="32pty" class="sref">lis2" id  L14ce" class="sref=static4.cha hrcach href="+code=__mb_cache_e3ee" nam
 3>(!(.a href="+code=ce" c3ass="32+code=ce" class="sref2" id  L14ce" class="sreft" clasrea"fs/mbcache.c#L1t" clasrea"ru_list./a>, &.a href=4126./a>}o(.a href="+3ode=c32ss="sref">KERL152" id  L152" class="li3ee" nam
 3/a>(&.a href="+code=3ache"32"+code=shrinker" class="sref"3n  4127./a>oce./a>->.a href="+codkm class="sde"sroy#L131" id  L131km class="sde"sroylass=  L141">4141./a>4128./a>o4129./a>static4void3--;oc_entry_cache./a>,4.a href="+code=ce" class="sref">ce./a>);omb_cache_entry./ae" clas ">mba>;o#="fs/mbcache.c#L147" id  3ef">__mb_3ne" nam
  L130">4130./a>3a hre32 href="+code=ce" class="srefk"+code=c_entry_cacheref">c_entry_cache./a>,4.a href="+code=ce" class="sref">ce./a>);omb_cache_entry./ae"b     ">mba>;o#="fs/mbcache.c#L147" id  3lass="sre3">__mb_cache_entry_relea3e_unl33ry_is_hashed.ce./a>)oc_entry_cache./a>,4.a href="+code=ce" class="sre#="fs/mbcache.c#L147" id  3_releases3/a>(.a href="+code=mb_ca3he_sp3nlock"L152" id  L152" class="li3_" nam
  3L133">4133./a>        .s3a
 cl33t">/*./spa
  list3ing for this cache entry3 */./3354">4154./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m3_ass="lin3ref="+code=e_queued" cla3s="sr33mbcache.c#L155" id  L155" class="line" class=nam
 (ment"> * @sc: shrink_control pas3le" nam
 3ke_up_all./a>(&.a hr3f="+c3356">4156./a>.spa
 class="comment"> * This func  >
 is called3>->.a 3ref="+code=e_used" class3"sref33y./spa
  valid initinamy,ent"> * @sc: shrink_control pas3e./a>->3.a href="+code=e_used" c3ass="33" nam
  L158">4158./a>.spa
 clpa
 thusr="nnot19">looked2up yet. It should19"> iass="withndata, pa
ent"> * @sc: shrink_control pas3em
  L29"3"+code=e_used" class="sr3f">e_3359">4159./a>.spa
 class="com* then inserted intoss="commen us4">4s="line" class=insert()." id  L16NULLent"> * @sc: shrink_control pas3ef">__mb_3 href="+code=e_used" cla3s="sr33ass="line" nam
  L160">41610* 24./a>">4t"57">415was avde=spa
t"> */./spa
  __mb_c3che_e34.c#L161" id  L161" class="li.e.c#L29" id  L29" class="line" n3t" class=3sref">forget./a>;oce./a>)o(.a href="+code3list_34t">/*ce./a>)o4 70./a>.="fs/mbcache.c_nam
 >c_en"sref">ce./a>)oce./a>->.a href="+code=e_cache" class="sref">e_cache./a>;o: lass="line" nam20">e.c#L120" id  L120" class="line" nam
  L120">flagsref="fs/mbcache20">flagsa>;o#L167" id  L167" class="l3ss="sref"3list_add_tail./a>(&.3 href34ef">c href="+code=__mb_cache_e3lass="lin3" nam
  L145">4145./a>  3     3a href="+code="sref">ce./a>)o4131./a>        .a href="+code= =.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n3le" nam
 3k./a>(&.a href="+cod3=mb_c34"+code=shrinker" class="sref"3147" clas3="line" nam
  L147">41473/a>.a3href="+code=fot;= .a href="+code=t" clasrea"fs/mbcache.c#L1t" clasrea"ru_list./a>, &.a href=4126./a>}oe_cache./a>;oid  L126" class="line"max_if (lasref="fs/mbcache. max_if (lascach=a href="+code=__mb_cache_e31./a>->3/mbcache.c#L148" id  L143" cla34ef">e_used./a> -= .a t;.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 3spin_unlo3k./a>(&.a href="+cod3=mb_c348f">e_used./a> -= .a >) <"+code=ce" class"+code=e_block_list" class="sref">e_block_list./a>);o4144./a>        }o__mb_cache_entry_forge3./a>(349f">e_used./a> -= .a ss="sref4" id  L144" cl        .a href="+code= =.href="fs/mbcach hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" class="line"" nam
  L144">4144./a>        }o4 77.s/mbcach100" id  L100" class="lin3ne" nam
 3L151">4151./a>oce./a>)o4143./a>                .a hre__mb_cache_entry_forget" 3e" nam
  3152">4152./a>omb_cache_lru_list./a>);o4153./a>.spa
 class3"comm35pty" class="sref">lis2" id  L4" id  L144" cl">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="s3ns="sref"3 id  L154" class="line" 3am
  35+code=ce" class="srefL152" id  L152" class="li3nass="lin3ure callback./spa
  );o4146./a>        return;oe_used./a> -= .a t;.a href="+cod        .a href="+code= =.href="fs/mbcachkm class="snam
  L70">4 70./a>.km class="snam
 lass=  L141">4141./a>flagsref="fs/mbcache20">flagsa>;o#="fs/mbcache.c#L147" id  3hpin_unlo3 id  L159" class="line" 3am
  358f">e_used./a> -= .a >) <"+code=ce" classe                       "fs/mbcache.c#L147" id  3hass="sre3"fs/mbcache.c#L160" id  3160" 359f">e_used./a> -= .a ss="srefef">ce.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n3ed from r3claim./spa
  ce./a>->.at" clasin  L70">4 70./a>.t" clasin ru_list./a>, &.a href=4126./a>}o4 76sc: class="line" n3e" nam
  3 id  L162" class="line" 3am
  36cache.c#L142" id  L14ce" class="srefINIT_href="fs/mbcache.c#L168"INIT_href="fs/ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);olisce" class="srefINIT_href="fs/mbcache.c#L168"INIT_href="fs/ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cab     lru_list./a>);oce./a>->.aMB_CACHE_WRITER" class="sref">MB_CACHE_WRITERe" class="sref">e_cae="line" namb_cache_=4165./a>.3 href36ce" class="sr2" id  L4" id  L144" clMB_CACHE_WRITER" class="sref">MB_CACHE_WRITERqueue"fs/mbcache.c#L1ERqueue"" na(struct4.a hr3f="+c36he_spinlock" L152" id  L152" class="li3cy the ke3L167">4167./a>        .a3href=366f">ce./a>->.a href="+codeB_CACHE_WRITER" class="sref">MB_CACHE_WRITERuse"fs/mbcache.c#L1ERuse"" na(.a href="+code=free_li3t" cl36ef">e_used./arget" "sref">mb_cache_=B_CACHE_WRITER" class=="fs/mbcache.c#L147" id  3cpin_unlo3he./a> *.a href="+code=c3che" 36y" clL152" id  L152" class="li3cass="sre3mb_cache_entry./a> *.a h3ef="+36 hrefmbcache.c#L130" id  L1303m
  L166"3" nam
a3cache_s="line" n3m
  L37de=inline" class="sref">inlin3me.c#L1623(.a href="+code=mb_cache3_entr3762">4162./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m3mects whi3(.a href="+code=mb_cache3_entr37
   * mb_cache_shrink_fn()  m3ms="sref"3(.a href="+code=mb_cache3_entr37164">4164./a>static4int  */./spa
  4s="line" class=nam
 (m into"> */./spa
   ,ss="commen 5" cy c looked2up, but i16not1yL./a */./spa
  4 78./a>o4158./a>.spa
 clsucces ,sor -EBUSY >) acommen 5" cy 134.3"" c0">4 .
+c
 che exru_1"> * and may also be in the lru3Yf">mb_ca3>4 79./a>.spa
 class="co3mment3759">4159./a>.spa
 class="com* alrea"y (/a>    L1happen after.a fde=ed2lookup, but when anolas9 proces "> * and may also be in the lru3Yass="sre3d  L80" class="line" nam3
  L837ass="line" nam
  L160">41610* has inserted s="cse" commen 5" cy 
 classmeantime)t"> */./spa
   * @sc: shrink_control pas3tures on 3SMP machines. The lru li3st is3862">4162./a>.spa
 class="comm @b0">: 0">4 .
s="commen 5" cy belongsstoent"> * @sc: shrink_control pas3tects whi3 * @sc: shrink_control pas3ts="sref"3id  L84" class="line" na3m
  L38164">4164./a>static4int  * @sc: shrink_control pas3tlass="li3>4 85./a>static4.a href=3"+cod38mbcache.c#L155" id  L155" clae.c#L29" id  L29" class="line" n3aMBOL./a>3.a href="+code=mb_cache_3list"38e=mb_int id  L29" class="line" n3ay the ke3.a href="+code=mb_cache_3lru_l386s="sce./a>)o4 70./a>.="fs/mbcache.c_insert>c_en"sref">ce./a>)o4131./a>        .a href="+code=e."sref">ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na100" id  L100" class="lin3tne" nam
3PINLOCK./a>(.a href="+co3de=mb38ef">e_used./a> -= .a       4" id  L144" cl_ector>e.c#L120" id  L1_ector>elass="line" nam
  L1bm
  L146">4146./a> b;omb_ca3nn entry may be `ionid'ment38="fs/ href="+code=__mb_cache_e3.c#L90" i3d  L90" class="line" nam3
  L9389f">e_used./ache./a> = .a href="+code=ce" class="sref">ce./a>->.a href="+code=e_cache" class="sref">e_cache./a>;oMB_CACHE_WRITERe" class="sref">e_cae="line" na="fs/mbcache.c#L147" id  3 as to ge3t shrunk dynamically.4146./a> bucket" na="fs/mbcache.c#L147" id  3 ures on 3id  L92" class="line" na3m
  L39ass="sref">cache./a> = .a href="+co hrefhea"fs/mbcache.c#L1 hrefhea".a h<*ce./a>)o4 93./a>static4int4.a h3ref="39pty" class="sint.href="fs/mbcacherroode=shrink_contrerroo#L13(st3ruct439164">"fs/mbcache.c#L147" id  3 lass="li3ontrol" class="sref">shr3ink_c39he" class="sref">cache./a>-&bucketL146">4146./a> bucket" na4146./a> e" c_long>c_en(unsigned long)ce./a>)o">4126./a>}o" na
+cslass="line" nambm
  L146">4146./a> b;o3>4 96./a>static4struct4.3a hre39e=mb_cache_queue" claERN_ERR./aa>, &.a href=static4.e"bucket_bitscache__mb_cache_entry_forget" 3aMBOL./a>3./a> .a href="+code=mb_c3ache_396f">ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 3./a> = .a3 href="+code=mb_cache_sh3rink_39s="sref">free_list./a>);o">4126./a>}olass=  L141">4141./a=e_lru_list" clas=LISe.st./a>, &.a href=mb_cache_entry./ae"b     ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] a href="+code=__mb_cache_e3a> = .a h3ref="+code=DEFAULT_SEEKS3" cla398f">e_used./a> -= .a "sref">ce./a>)o4131./a>        .a href="+code= =href="+code=__mb_cache_e3e" nam
  3L100">4100./a>oe_used./a> -= .a ss="sref4" id  L144" cl hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" cla=e_lru_list" clas=LISe."sref">ce./a>)o);o(.a ht;= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERb0">">4126./a>}oode= =a href="fs/mbcachb0">">4126./a>}o" na.st./ac#L14 >, &.a href="+code=mb_cache_lru_list" class="sref">mb_cab    list./a>);o4146./a> b;oou_list./a>);o__4b_cache_entry_is_hashed.4a>(st40pty" class="sL152" id  L152" class="li4ne" nam
 4L104">4104./a>        re4urn !40ef">ce./a>->.a href="+cod">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="s4nbe freed4t_empty./a>(&.a href4"+cod40he" class="sref">cache./a>-&MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERb0">">4126./a>}oode= = href="fs/mbcachb0">">4126./a>}o" na"+code=mb_cache" class="s4n5e freed4t4 96./a>static4struct4.4s/mbc40e=mb_cache_qu>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cab    list./a>);o4146./a> b;oce./a>->.a href="+cod hrefad"fs/mbcache.c#L1 hrefad"ru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cab     lru_list./a>);o, &.a href=mb_cache_entry./ae"b     ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] "+code=mb_cache" class="s4n7e freed4thref="+code=mb_cache_sh4free_list./a>);omb_ca claslist./a>);o--;o4146./a> bucket" na4146./a> e" c_long>c_enhref="fs/mbcachkey#L131" id  L131key     class="line" nam=static4.e"bucket_bitscache__mb_cache_entry_forget" 4n9 4100./a>o, &.a href="+code=mb_cache_lru_list" class="sref">mb_ca claslist./a>);o);o, &.a href=mb_cache_entry./ae" clas ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] "+code=mb_cache" class="s4ne" nam
 4L111">4111./a>        if4(.a h41ry_is_hashed.ce./a>)o__mb_cache_entr4_is_h41release" class="srefou_list./a>);o__4list_del_init./a>(&.4 href412="sref">free_list./a>);o);o4146./a>        return;o(&.a href="+c4de=ce41ef">ce./a>-&grget" "sref">mb_cache_erroode=shrink_contrerroo#L13="fs/mbcache.c#L147" id  4nbe freed4" nam
  L115">4115./a>}o4a hre41LIST_L152" id  L152" class="li4ne" nam
 4L116">4116./a>o4117./a>o4118./a>static4void44158./a>.spa
mment"> * mb_cache_shrink_fn()  m4lm
  L29"4ne" nam
  L119">4119./a>4a hre4159">4159./a>.spa
 class="com* *.a href="+coderelease()ent"> * mb_cache_shrink_fn()  m4s9 (st4uct4.41ass="line" nam
  L160">41610*ent"> * mb_cache_shrink_fn()  m4ne" nam
 4L121">4121./a>        st4uct4.42.c#L161" id  L161" class="lin Releasecl handln to aomment25" cy. When s="c55"T"handln to aomment25" cyent"> * mb_cache_shrink_fn()  m4nhed" cla4he./a> *.a href="+code=c4che" 4262">4162./a>.spa
 class="comm isrefleased it i16eilas9  ceTd (t;=it i16invalid)sor olas9wisecinsertedent"> * mb_cache_shrink_fn()  m4nsref">__4123">4123./a>        .a 4ref="42
   */./spa
  (!(.a href="+code=ce" c4ass="42164">4164./a>static4int (&.a href="+code=4ache"42"+codce./a>)o4 70./a>.="fs/mbcache.c_eflease>c_en"sref">ce./a>)o4131./a>        .a href="+code= "fs/mbcache.c#L147" id  4n  4127./a>oc href="+code=__mb_cache_e4e" nam
  4128">4128./a>ofree_list./a>);o);o4149./a>        .a href="+code=__mb_cache_entry_forget" 4em
  L29"4129">4129./a>static4void4--;o);o *.a href="+codeefleasehe_spinlass=  L141">4141./a>                       "+code=mb_cache" class="s4ef">__mb_4ne" nam
  L130">4130./a>4a hre42 hrefL152" id  L152" class="li4lass="sre4">__mb_cache_entry_relea4e_unl43de=inline" class="sref">inlin4_releases4/a>(.a href="+code=mb_ca4he_sp4nlock"line" class="sref">inlin4_sref">__4L133">4133./a>        .s4a
 cl43
   * mb_cache_shrink_fn()  m4_ef">list4ing for this cache entry4 */./4354">4154./a>.spa
 class="com* *.a href="+code ceT()ent"> * mb_cache_shrink_fn()  m4_ass="lin4ref="+code=e_queued" cla4s="sr43mbcache.c#L155" id  L155" claent"> * mb_cache_shrink_fn()  m4_e" nam
 4ke_up_all./a>(&.a hr4f="+c4356">4156./a>.spa
 class="comm Ta>  i16equivals="cloclasssequence *.a href="+codetakeou_() --ent"> * mb_cache_shrink_fn()  m4_   */./spa
  4158./a>.spa
 ce.c#L29" id  L29" class="line" n4em
  L29"4"+code=e_used" class="sr4f">e_4359">4cache_entry_release_unlock" 4ef">__mb_4 href="+code=e_used" cla4s="sr43ass="le./a>)oc_en"sref">ce./a>)o4131./a>        .a href="+code= "fs/mbcache.c#L147" id  4try_is_ha4hed" class="sref">__mb_c4che_e44.c#L1 href="+code=__mb_cache_e4t" class=4sref">forget./a>;ofree_list./a>);o);o4149./a>        .a href="+code=__mb_cache_entry_forget" 4t" nam
  4ssert./a>(.a href="+code4list_442="sref">free_list./a>);oert L70">4 70./a>.="f/a>ert#L132" id  L132" cla=+code=e_block_list" class="sref">e_block_list./a>);omb_cache_lru_list./a>);olist4list_add_tail./a>(&.4 href44ef">ce./a>->.a href="+cod">ce./a>,4.a hrefef">mb_cache_entry./a> *.a href="+code=ce" class=  L141">4141./a>                       "+code=mb_cache" class="s4lass="lin4" nam
  L145">4145./a>  4     44he" class="sref">cache./a>-&> *.a href="+codeefleasehe_spinlock./a>);o *.a href="+codeefleasehe_spinlass=  L141">4141./a>                       "+code=mb_cache" class="s4le" nam
 4k./a>(&.a href="+cod4=mb_c44"+codL152" id  L152" class="li4147" clas4="line" nam
  L147">41474/a>.a44e.c#L118" id  L118" class="li41./a>->4/mbcache.c#L148" id  L144" cla44e.c#L129" id  L129" class="li4spin_unlo4k./a>(&.a href="+cod4=mb_c4459">4159./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m4lass="sre4">__mb_cache_entry_forge4./a>(44ass="line" nam
  L160">41610* *.a href="+codeget()ent"> * mb_cache_shrink_fn()  m4ne" nam
 4L151">4151./a>o * @sc: shrink_control pas4e" nam
  4152">4152./a>o4162./a>.spa
 class="comm Get acommen 5" cy  by 0">4 .
/ b    class=". (Tas9ss="n only be ont25" cyent"> * mb_cache_shrink_fn()  m4e" nam
  4153">4153./a>.spa
 class4"comm45
  4 .
pa
 b    .)" id  L16NULL 24./a>suchomment25" cyent"> * mb_cache_shrink_fn()  m4ns="sref"4 id  L154" class="line" 4am
  4554">4154./a>.spa
 class="com* exru_1. T" crget" edcommen 5" cy 
s     edc134.exclusiv.
pcces  (/mbcacs4">l"ent"> * @sc: shrink_control pas4nass="lin4ure callback./spa
   */./spa
  4156./a>.spa
 class="comme.c#L29" id  L29" class="line" n4n47" clas4nel memory management wh4n mem45ref=""sref">ce./a>)oele./a>)oce./a>)o4131./a> ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na100" id  L100" class="lin4hpin_unlo4 id  L159" class="line" 4am
  458f">e_used./a> -= .a ree_list./a>);oe.c#L120" id  L1_ector>elass="line" nam
  L1bm
  L146">4146./a> b;o4146./a> bucket" na="fs/mbcache.c#L147" id  4e" nam
  4 id  L162" class="line" 4am
  46ass="sref">cache./a> = .a href="+co hrefhea"fs/mbcache.c#L1 hrefhea".a h<*ce./a>)oce./a>)o4131./a>        .a href="+code=="fs/mbcache.c#L147" id  4es="sref"4" id  L164" class="line"4nam
 46164">"fs/mbcache.c#L147" id  4class="li4e" nam
  L165">4165./a>.4 href46he" class="sref">cache./a>-&bucketL146">4146./a> bucket" na4146./a> e" c_long>c_en(unsigned long)ce./a>)o">4126./a>}o" na
+cslass="line" nambm
  L146">4146./a> b;o(struct4.a hr4f="+c46he_spinlock" _used./a> -= .a ree_list./a>);ostatic4.e"bucket_bitscache__mb_cache_entry_forget" 4cy the ke4L167">4167./a>        .a4href=466f">ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 4c"fs/mbca4>(.a href="+code=free_li4t" cl46s="sref">free_list./a>);o, &.a href=mb_cache_entry./ae"b     ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] a href="+code=__mb_cache_e4cpin_unlo4he./a> *.a href="+code=c4che" 468f">e_used./a> -= .a  L131">4131./a>        .a href="+code= =.href="fs/mbcach hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" cla=e_lru_list" clas=LISe."sref">ce./a>)o);oe_used./a> -= .a t;= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERb0">">4126./a>}oode= =a href="fs/mbcachb0">">4126./a>}o" na.st./ac#L14 >, &.a href="+code=mb_cache_lru_list" class="sref">mb_cab    list./a>);o4146./a> b;o(.a hhhhhhhhhhref="fs/mbc L1DEFINE_WAITL146">4146./a> DEFINE_WAIT#L132" id  L132" clawaite_lru_list" clawaitcache__mb_cache_entry_forget" 4me.c#L1624(.a href="+code=mb_cache4_entr47lock"line" class="sref">inlin4mects whi4(.a href="+code=mb_cache4_entr47pty" class="sref">lis2" id  L>) <"+code=ce" class"+code=e_block_list" class="sref">e_block_list./a>);omb_cache_lru_list./a>);oinlin4ms="sref"4(.a href="+code=mb_cache4_entr47+code=ce" class="sref2" id  L14">free_list./a>);omb_cache_lru_list./a>);oLIST_4me.c#L1564(.a href="+code=mb_cache4_entr47he_spinlock" _used./a> -= .a while= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERuse"fs/mbcache.c#L1ERuse"" naKERN_ERR./ahhhhhhhh14">free_list./a>);oMB_CACHE_WRITERqueue"fs/mbcache.c#L1ERqueue"" na++__mb_cache_entry_forget" 4m"fs/mbca4  L78">4 78./a>oe_used./a> -= .a                 ">MB_CACHE_WRITprepare_to_waite_lru_list" claprepare_to_waitache.c#L149" id  L149" class="linequeue#L131" id  L131" class="queue=LISe.st./a>, &.a hrefwaite_lru_list" clawaitcach,"fs/mbcache.c#L147" id  4Yf">mb_ca4>4 79./a>.spa
 class="co4mment478f">e_used./a> -= .a ss="sref> -= .a                 ">MB_CACHE_WRITTASK_UNINTERRUPTIBLEe_lru_list" claTASK_UNINTERRUPTIBLEcache__mb_cache_entry_forget" 4mass="sre4d  L80" class="line" nam4
  L8479f">e_used./a> -= .a ss="sref        ">MB_CACHE_WRIT_cache_spinlock./a>);o4146./a>        return;o(.a hhhhhhhhhhhhhhhhh">MB_CACHE_WRIT_7" dule#L131" id  L131_7" duleache.f="fs/mbcache.c#L147" id  4be.c#L1624SMP machines. The lru li4st is48cache.c#L142" id  L14ss="sref        ">MB_CACHE_WRIT_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 4tects whi4lis2" id  L14      ">MB_CACHE_WRITMB_CACHE_WRITER" class="sref">MB_CACHE_WRITERqueue"fs/mbcache.c#L1ERqueue"" na--__mb_cache_entry_forget" 4ts="sref"4id  L84" class="line" na4m
  L48+code=ce" class="sref2" id  LL152" id  L152" class="li4tlass="li4>4 85./a>static4.a href=4"+cod48ce" class="sr2" id  L14      ">MB_CACHE_WRITfinish_waite_lru_list" clafinish_waitache.c#L149" id  L149" class="linequeue#L131" id  L131" class="queue=LISe.st./a>, &.a hrefwaite_lru_list" clawaitcach=__mb_cache_entry_forget" 4te.c#L1564.a href="+code=mb_cache_4list"48he_spinlock" _used./a> -= .a .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERuse"fs/mbcache.c#L1ERuse"" na<+a"1 +gt;.a href="+codMB_CACHE_WRITERfs/mbcache.c#L1MB_CACHE_WRITER26" ="fs/mbcache.c#L147" id  4ay the ke4.a href="+code=mb_cache_4lru_l48e.c#L118" id  L118" class="li4tne" nam
4PINLOCK./a>(.a href="+co4de=mb48ef">e_used./a> -= .a        L>) <"+code=ce" class> *.a href="+codeis ">mbe"fs/mbcache.c#L1> *.a href="+codeis ">mbe"lass=  L141">4141./a>                       =a href="+code=__mb_cache_e4tf">mb_ca4nn entry may be `ionid1ment488f">e_used./a> -= .a ss="sref> -= .a ef">cache./a>-&> *.a href="+codeefleasehe_spinlock./a>);o *.a href="+codeefleasehe_spinlass=  L141">4141./a>                       "+code=mb_cache" class="s4.c#L90" i4d  L90" class="line" nam4
  L9489f">e_used./a> -= .a ss="sref        ef">ce.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n4 as to ge4t shrunk dynamically.(.a hhhhhhhhhL152" id  L152" class="li4 ures on 4id  L92" class="line" na4m
  L49cache.c#L142" id  L14ss="sref="line" nam
  L142">cleanu L166">4166./a>{cleanu he.c6">4 76sc: class="line" n4 ects whi4>4 93./a>static4int4.a h4ref="49pty" class="sref">lisL152" id  L152" class="li4 s="sref"4b_cache_shrink_fn./a>(st4ruct449+code=ce" claL152" id  L152" class="li4 lass="li4ontrol" class="sref">shr4ink_c49he" class="sref">cache./a>-&        .a href="+code= =.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n4 MBOL./a>4>4 96./a>static4struct4.4a hre49"+code=shrinker" class="sref"4aMBOL./a>4./a> .a href="+code=mb_c4ache_496s="sce./a>)o4166./a>{cleanu he.cspin_unlock" class="sref"4./a> = .a4 href="+code=mb_cache_sh4rink_49s="sref">free_list./a>);o);o4146./a>        return;o = .a h4ref="+code=DEFAULT_SEEKS4" cla498f">e_used./arget" "sref">mb_cache_=B_CACHE_WRITER" class=="fs/mbcache.c#L147" id  4e" nam
  4L100">4100./a>oinlin5ls/mbcach5a href="fs/mbcache.c#L105" id 50cache#>) "+code=ce" classdefine"fs/mbcache.c#L1define"lass=  L141">4141./aMB_CACHE_INDEXES_COUNTL146">4146./a> MB_CACHE_INDEXES_COUNT hre a||= .a href="+code=MB_CACHE_INDEXES_COUNTL146">4146./a> MB_CACHE_INDEXES_COUNT hreinlin5l2/mbcach5a4 93./a>static4int4.a h5a>(st50t">/*./spa
  4104./a>        re5urn !50ef">cstatics"sref">ce./a>)oshr5"+cod50he" cef">cache./a>-&> *.a href="+codefin"fs/mbcache.c#L1> *.a href="+codefin">c_en"sref">ce./a>)o)oce./a>)o)ostatic4struct4.5s/mbc50he_spinlock" _used./a> -= ."sref">ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na1 unsigned int.href="fs/mbcachkey#L131" id  L131key     "fs/mbcache.c#L147" id  5n6e freed5t/a> .a href="+code=mb_c5/mbca506f">c href="+code=__mb_cache_e5n7e freed5thref="+code=mb_cache_sh5freewhile= .a href="+code==e_lru_list" clas=LIS !a href="fs/mbcacheea"fs/mbcache.c#L1hea".a h=a href="+code=__mb_cache_e5n8e freed5tef="+code=DEFAULT_SEEKS5a hre508f">e_used./a> -= .a "sref">ce./a>)o4131./a>        .a href="+code= =href="+code=__mb_cache_e5n9 4100./a>oe_used./a> -= .a ss="srefhref="fs/mbcach hrefche.c#L131" id  L131 hrefche.c#L132" id  L132" cla=e_lru_list" clas=LISe."sref">ce./a>)o);o);o4111./a>        if5(.a h51ry_is_hashed./a>(.a ht;= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERb0">">4126./a>}oode= =a href="fs/mbcachb0">">4126./a>}o" na.st./ac#L14 >, &.a href="+code=mb_cache_lru_list" class="sref">mb_ca claslist./a>);o__mb_cache_entr5_is_h51cache.c#L142" id  L14ss="sref4" id  L144" clDEFINE_WAITL146">4146./a> DEFINE_WAIT#L132" id  L132" clawaite_lru_list" clawaitcache__mb_cache_entry_forget" 5ssref">__5list_del_init./a>(&.5 href51t">/*./spa
  (&.a href="+c5de=ce51+code=ce" class="sref2" id  L>) <"+code=ce" class"+code=e_block_list" class="sref">e_block_list./a>);omb_cache_lru_list./a>);oinlin5nbe freed5" nam
  L115">4115./a>}o5a hre51ce" class="sr2" id  L14      ss="srefhref="fs/mbcach hrefde=_inite_lru_list" class="sde=_initru_list./a>, &.a href="+code=mb_cache_lru_list" class="sref">mb_cache_lru_list./a>);o4116./a>o4117./a>oKERN_ERR./ahhhhhhhh159./a>.spa
 class="comm Incress="4">4bef>4t"hold4">4lassf   cgivesrefader "> * and may also be in the lru5s" nam
  5118">4118./a>static4void54158./a>.spa
"sr2" id  L14      ss="srefpriority overswriters.mme.c#L29" id  L29" class="line" n5lm
  L29"5ne" nam
  L119">4119./a>5a hre518f">e_used./a> -= .a ss="sref.a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERuse"fs/mbcache.c#L1ERuse"" na++__mb_cache_entry_forget" 5s9 (st5uct4.519f">e_used./a> -= .a ss="srefwhile= .a href="+code=MB_CACHE_WRITER" class="sref">MB_CACHE_WRITERuse"fs/mbcache.c#L1ERuse"" na4121./a>        st5uct4.52ry_is_hashed./a>(.a hhhhhhhhhhhhhhhhh">MB_CACHE_WRITMB_CACHE_WRITER" class="sref">MB_CACHE_WRITERqueue"fs/mbcache.c#L1ERqueue"" na++__mb_cache_entry_forget" 5nhed" cla5he./a> *.a href="+code=c5che" 52cache.c#L142" id  L14ss="sref        ">MB_CACHE_WRITprepare_to_waite_lru_list" claprepare_to_waitache.c#L149" id  L149" class="linequeue#L131" id  L131" class="queue=LISe.st./a>, &.a hrefwaite_lru_list" clawaitcach,"fs/mbcache.c#L147" id  5nsref">__5123">4123./a>        .a 5ref="52pty" class="sref">lis2" id  L14      ss="sref        ">MB_CACHE_WRITTASK_UNINTERRUPTIBLEe_lru_list" claTASK_UNINTERRUPTIBLEcache__mb_cache_entry_forget" 5ee" nam
 5>(!(.a href="+code=ce" c5ass="52+code=ce" class="sref2" id  L14">free_list./a>);o);o4146./a>        return;o(&.a href="+code=5ache"52he_spinlock" _used./a> -= .a ree>free_list./a>);o);o4149./a>        .a href="+code=__mb_cache_entry_forget" 5n  4127./a>oKERN_ERR./ahhhhhhhh14">free_list./a>);oMB_CACHE_WRITERqueue"fs/mbcache.c#L1ERqueue"" na--__mb_cache_entry_forget" 5e" nam
  5128">4128./a>oe_used./a> -= .a        LL152" id  L152" class="li5em
  L29"5129">4129./a>static4void5e_used./a> -= .a ss="sref.a href="+code=finish_waite_lru_list" clafinish_waitache.c#L149" id  L149" class="linequeue#L131" id  L131" class="queue=LISe.st./a>, &.a hrefwaite_lru_list" clawaitcach=__mb_cache_entry_forget" 5ef">__mb_5ne" nam
  L130">4130./a>5a hre52 hrefmbcache.c#L130" id  L1305lass="sre5">__mb_cache_entry_relea5e_unl53ry_is_hashed./a>(.a hhhhhhhhh>) <"+code=ce" class> *.a href="+codeis ">mbe"fs/mbcache.c#L1> *.a href="+codeis ">mbe"lass=  L141">4141./a>                       =a href="+code=__mb_cache_e5_releases5/a>(.a href="+code=mb_ca5he_sp53cache.c#L142" id  L14ss="sref        ">MB_CACHE_WRIT> *.a href="+codeefleasehe_spinlock./a>);o *.a href="+codeefleasehe_spinlass=  L141">4141./a>                       "+code=mb_cache" class="s5_sref">__5L133">4133./a>        .s5a
 cl53pty" class="sref">lis2" id  L14      ">MB_CACHE_WRIT_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 5_ef">list5ing for this cache entry5 */./53+code=ce" class="sref2" id  L14">freerget" "sref">mb_cache_ERR_PTRfs/mbcache.c#L1ERR_PTRache.-href="fs/mbcachEAGAINfs/mbcache.c#L1EAGAINcode=__mb_cache_entry_forget" 5_ass="lin5ref="+code=e_queued" cla5s="sr53ce" class="sr2" id  L14      L152" id  L152" class="li5_e" nam
 5ke_up_all./a>(&.a hr5f="+c53he_spinlock" _used./a> -= .a rget" "sref">mb_cache_=B_CACHE_WRITER" class=="fs/mbcache.c#L147" id  5_  KERN_ERR./aL152" id  L152" class="li5_" nam
  5.a href="+code=e_used" c5ass="53ef">e_used./a> -= .a t;.a href="+cod=e_lru_list" clas=LIS =.href="fs/mbcach e_lru_list" clas=LIS"sref">MB_CACHE_WRITnexte_lru_list" clanextass=="fs/mbcache.c#L147" id  5_m
  L29"5"+code=e_used" class="sr5f">e_538f">e_used./aL152" id  L152" class="li5_f">__mb_5 href="+code=e_used" cla5s="sr539f">e_used./aef">ce.href="fs/mbcachNULLass="sref">e_caNULLhe.c6">4 76sc: class="line" n5try_is_ha5hed" class="sref">__mb_c5che_e54.c#L1L152" id  L152" class="li5t" class=5sref">forget./a>;oinlin5t" nam
  5ssert./a>(.a href="+code5list_54t">/*./spa
  list5list_add_tail./a>(&.5 href5454">4154./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m5lass="lin5" nam
  L145">4145./a>  5     54mbcache.c#L155" id  L155" clas*.a href="+codefin"efirst()ent"> * mb_cache_shrink_fn()  m5le" nam
 5k./a>(&.a href="+cod5=mb_c5456">4156./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m5l  41475/a>.a54y./spa
  4 .
with acoertain key in/a */./spa
  4158./a>.spa
 clL15additional  clas. Additional mat/mbs c foun"4with/a */./spa
  (&.a href="+cod5=mb_c5459">4159./a>.spa
 class="colas*.a href="+codefin"enext()." id  L16NULL 24./a>mat/mcwas foun". T" /a */./spa
  __mb_5">__mb_cache_entry_forge5./a>(54ass="line" nam
  L160">41610* rget" edcommen 5" cy 
s     edc134.sharedcpcces  (/mbcacmultiplerefader /mbcac)t"> */./spa
  4151./a>o * @sc: shrink_control pas5e" nam
  5152">4152./a>o4162./a>.spa
 class="comm @ntrol:cl="commen to search/a */./spa
  4153./a>.spa
 class5"comm55
  : l="c0">4 .
s="commen 5" cy should belongstoent"> * @sc: shrink_control pas5ns="sref"5 id  L154" class="line" 5am
  5554">4154./a>.spa
 class="com* @key:2s="ckey in2s="c clasu_t"> * @sc: shrink_control pas5nass="lin5ure callback./spa
  4"sref">ce./a>)oc_en"sref">ce./a>)o4131./a> ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na100" id  L100" class="lin5="fs/mbca5he.c#L158" id  L158" cla5s="li55ef">e_used./a> -= .a           unsigned int.href="fs/mbcachkey#L131" id  L131key     "fs/mbcache.c#L147" id  5hpin_unlo5 id  L159" class="line" 5am
  55="fs/ href="+code=__mb_cache_e5hass="sre5"fs/mbcache.c#L160" id  5160" 559f">e_used./aunsigned int.href="fs/mbcachbucketL146">4146./a> bucket" na4146./a> e" c_long>c_enhref="fs/mbcachkey#L131" id  L131key     class="line" nam=static4.e"bucket_bitscache__mb_cache_entry_forget" 5ed from r5claim./spa
  )ocache./a> = .a href="+code=ce" cache.c#L131" id  L131" class="line" nam
  L131">4131./a>        .a href="+code=="fs/mbcache.c#L147" id  5e" nam
  5h are present in the cac5e../s56t">/*./spa
  ce./a>->.a href="+cod_cachspinlock./a>);o4149./a>        .a href="+code=__mb_cache_entry_forget" 5class="li5e" nam
  L165">4165./a>.5 href56he" class="sref">cache./a>-&=e_lru_list" clas=LIS =.href="fs/mbcach=mb_cache_entry./ae" clas ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na]ine" nam
  L114"nexte_lru_list" clanextass=="fs/mbcache.c#L147" id  5ce.c#L1565rink_fn./a>(struct4.a hr5f="+c56he_spinlock"  L131">4131./a>        .a href="+code= =.href="fs/mbcach> *.a href="+codefin"fs/mbcache.c#L1> *.a href="+codefin">c_enef">cache./a>-&=e_lru_list" clas=LISe.st./a>, &.a href=mb_cache_entry./ae" clas ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] class="line" namb0">">4126./a>}o" na1 href="fs/mbcachkey#L131" id  L131key     ="fs/mbcache.c#L147" id  5c47" clas5L167">4167./a>        .a5href=566f">ce./a>->.a href="+cod_cache_spinlock./a>);o4146./a>        return;o(.a href="+code=free_li5t" cl56s="sref">freerget" "sref">mb_cache_=B_CACHE_WRITER" class=="fs/mbcache.c#L147" id  5cpin_unlo5he./a> *.a href="+code=c5che" 568f">eL152" id  L152" class="li5cass="sre5mb_cache_entry./a> *.a h5ef="+56 hrefmbcache.c#L130" id  L1305m
  L166"5" nam
a3cache_s="line" n5m
  L57de=inline" class="sref">inlin5me.c#L1625(.a href="+code=mb_cache5_entr5762">4162./a>.spa
 class="comment"> * mb_cache_shrink_fn()  m5mects whi5(.a href="+code=mb_cache5_entr57
   * mb_cache_shrink_fn()  m5ms="sref"5(.a href="+code=mb_cache5_entr5754">4154./a>.spa
 class="com*ent"> * mb_cache_shrink_fn()  m5mlass="li5f="+code=MB_CACHE_INDEXE5S_COU57mbcache.c#L155" id  L155" clasFin"4lassnextcommen 5" cy on acgiven 0">4 .
with acoertain key in an/a */./spa
  4156./a>.spa
 class="comm additional  clas.  id  L16NULL 24./a>mat/mccould be foun". T"  pr">iou "> * and may also be in the lru5my the ke5(.a href="+code=mb_cache5_entr57y./spa
   * and may also be in the lru5m"fs/mbca5  L78">4 78./a>o4158./a>.spa
 clb"comlled lik.
s=is:"> * and may also be in the lru5mpin_unlo5>4 79./a>.spa
 class="co5mment5759">4159./a>.spa
 class="cola"> * and may also be in the lru5mass="sre5d  L80" class="line" nam5
  L857ass="line" nam
  L160">41610* 5" cy =s*.a href="+codefin"efirst();"> * and may also be in the lru5bcacheŧs, lru list, and a spi5nlock58.c#L161" id  L161" class="lin while= "+cod) {"> * and may also be in the lru5be.c#L1625SMP machines. The lru li5st is5862">4162./a>.spa
 class="comm      ..t"> */./spa
   * and may also be in the lru5bs="sref"5id  L84" class="line" na5m
  L5854">4154./a>.spa
 class="com* }"> * and may also be in the lru5blass="li5>4 85./a>static4.a href=5"+cod58mbcache.c#L155" id  L155" claent"> * mb_cache_shrink_fn()  m5te.c#L1565.a href="+code=mb_cache_5list"5856">4156./a>.spa
 class="comm @pr">: T"  pr">iou >mat/ment"> * mb_cache_shrink_fn()  m5ty the ke5.a href="+code=mb_cache_5lru_l58y./spa
  : l="c0">4 .
s="commen 5" cy should belongstoent"> * @sc: shrink_control pas5tne" nam
5PINLOCK./a>(.a href="+co5de=mb58" nam
  L158">4158./a>.spa
 cl@key:2s="ckey in2s="c clasu_t"> * @sc: shrink_control pas5tf">mb_ca5nn entry may be `ionid;ment5859">4159./a>.spa
 class="colae.c#L29" id  L29" class="line" n5.c#L90" i5d  L90" class="line" nam5
  L9589f">e"sref">ce./a>)oc_en"sref">ce./a>)o4131./a>pr">#L131" id  L131pr">" na100" id  L100" class="lin5 ures on 5id  L92" class="line" na5m
  L59cache.c#L142" id  L14ss="sref."sref">ce./a>)o4 .">4126./a>}o4 .he.c<*ce./a>)o">4126./a>}o" na1 unsigned int.href="fs/mbcachkey#L131" id  L131key     "fs/mbcache.c#L147" id  5 ects whi5>4 93./a>static4int4.a h5ref="59pty"  href="+code=__mb_cache_e5 s="sref"5b_cache_shrink_fn./a>(st5ruct459+code=ce" cla"sref">ce./a>)o4131./a> #L131" id  L131pr">" na"sref">MB_CACHE_WRITER shr5ink_c59he" class="srunsigned int.href="fs/mbcachbucketL146">4146./a> bucket" na4146./a> e" c_long>c_enhref="fs/mbcachkey#L131" id  L131key     class="line" nam=static4.e"bucket_bitscache__mb_cache_entry_forget" 5 MBOL./a>5>4 96./a>static4struct4.5a hre595code=ce" cla"sref">ce./a>)o)o5./a> .a href="+code=mb_c5ache_596code=ce" cla"sref">ce./a>)o4131./a>        .a href="+code=="fs/mbcache.c#L147" id  5./a> = .a5 href="+code=mb_cache_sh5rink_59e.c#L129" id  L129" class="li5a> = .a h5ref="+code=DEFAULT_SEEKS5" cla59ed./a>--;o4149./a>        .a href="+code=__mb_cache_entry_forget" 5e" nam
  5L100">4100./a>o#L131" id  L131pr">" na"sref">MB_CACHE_WRITER claslist./a>);o);o)o *.a href="+codefin"fs/mbcache.c#L1> *.a href="+codefin">c_enef">cache./a>-&=e_lru_list" clas=LISe.st./a>, &.a href=mb_cache_entry./ae" clas ">mba>;o[inker" class="sbucketL146">4146./a> bucket" na] class="line" namb0">">4126./a>}o" na1 href="fs/mbcachkey#L131" id  L131key     ="fs/mbcache.c#L147" id  6ls/mbcach6a href="fs/mbcache.c#L106" id 601="sref">free_list./a>);o *.a href="+codeefleasehe_spinlock./a>);o *.a href="+codeefleasehe_spinlass=  L141">4141./apr">#L131" id  L131pr">" na ="fs/mbcache.c#L147" id  6l2/mbcach6a4 93./a>static4int4.a h6a>(st60pty" class="srget" "sref">mb_cache_=B_CACHE_WRITER" class=="fs/mbcache.c#L147" id  6ne" nam
 6L104">4104./a>        re6urn !60ef">cL152" id  L152" class="li6n4" nam
 6Lntrol" class="sref">shr6"+cod60LIST_HEAD" class="sref">LIST_6n5e freed6t4 96./a>static4struct4.6s/mbc60he_sp#endifhh159./a>.spa
 class="comm !define"(MB_CACHE_INDEXES_COUNT a||= MB_CACHE_INDEXES_COUNT .a href="+code=mb_c6/mbca60e.c#L118" id  L118" class="li6n7e freed6thref="+code=mb_cache_sh64100./a>o4111./a>        if6(.a h61ry_is_hashed.rget" "0="fs/mbcache.c#L147" id  6ns/mbcach6s="sref">__mb_cache_entr6_is_h61cacheL152" id  L152" class="li6ssref">__6list_del_init./a>(&.6 href61t">/*./spa
  (&.a href="+c6de=ce61ef">cstaticscach.href="fs/mbcach__exite_lru_list" cla__exitru_l.href="fs/mbcachexit_" classe_lru_list" claexit_" classlass=cach "fs/mbcache.c#L147" id  6nbe freed6" nam
  L115">4115./a>}o6a hre61ce" c href="+code=__mb_cache_e6ne" nam
 6L116">4116./a>o4131./a>unregru_er_shrinkere_lru_list" claunregru_er_shrinkerache.c#L149" id  L149" class="line"hrinkere_lru_list" claass="line"hrinker" na ="fs/mbcache.c#L147" id  6n6e freed6117">4117./a>o4118./a>static4void64119./a>6a hre618f">e9" id  L149" claodule_inite_lru_list" claaodule_initlass=  L141">4141./ainit_" classe_lru_list" clainit_" classlass "fs/mbcache.c#L147" id  6n9 (st6uct4.61ass="le./a>)o4141./aexit_" classe_lru_list" claexit_" classlass "fs/mbcache.c#L147" id  6ne" nam
 6L121">4121./a>        st6uct4.62de=inline" class="sref">inlin6nhed" cla6he./a> *.a href="+code=c6che" 62cache


*.a foo_er"> T" original LXR software by s="cine" clashttp://sourcef>4ge.net/projects/lxr">LXR clasunity cs=is experiss="al version by ine" clasmailto:lxr@hreux.nolasxr@hreux.nocachi
*.a subfoo_er"> sxr.hreux.no k clly hou_ed by ine" clashttp://www.redpill-hrepro.nolaRedpill Lrepro AS cprovider of Lreux clnsulting pa operations ser>4 .s since 1995.