linux/net/sunrpc/cache.c
<<
>>
Prefs
   1/*
   2 * net/sunrpc/cache.c
   3 *
   4 * Generic code for various authentication-related caches
   5 * used by sunrpc clients and servers.
   6 *
   7 * Copyright (C) 2002 Neil Brown <neilb@cse.unsw.edu.au>
   8 *
   9 * Released under terms in GPL version 2.  See COPYING.
  10 *
  11 */
  12
  13#include <linux/types.h>
  14#include <linux/fs.h>
  15#include <linux/file.h>
  16#include <linux/slab.h>
  17#include <linux/signal.h>
  18#include <linux/sched.h>
  19#include <linux/kmod.h>
  20#include <linux/list.h>
  21#include <linux/module.h>
  22#include <linux/ctype.h>
  23#include <asm/uaccess.h>
  24#include <linux/poll.h>
  25#include <linux/seq_file.h>
  26#include <linux/proc_fs.h>
  27#include <linux/net.h>
  28#include <linux/workqueue.h>
  29#include <linux/mutex.h>
  30#include <linux/pagemap.h>
  31#include <asm/ioctls.h>
  32#include <linux/sunrpc/types.h>
  33#include <linux/sunrpc/cache.h>
  34#include <linux/sunrpc/stats.h>
  35#include <linux/sunrpc/rpc_pipe_fs.h>
  36#include "netns.h"
  37
  38#define  RPCDBG_FACILITY RPCDBG_CACHE
  39
  40static bool cache_defer_req(struct cache_req *req, struct cache_head *item);
  41static void cache_revisit_request(struct cache_head *item);
  42
  43static void cache_init(struct cache_head *h)
  44{
  45        time_t now = seconds_since_boot();
  46        h->next = NULL;
  47        h->flags = 0;
  48        kref_init(&h->ref);
  49        h->expiry_time = now + CACHE_NEW_EXPIRY;
  50        h->last_refresh = now;
  51}
  52
  53static inline int cache_is_expired(struct cache_detail *detail, struct cache_head *h)
  54{
  55        return  (h->expiry_time < seconds_since_boot()) ||
  56                (detail->flush_time > h->last_refresh);
  57}
  58
  59struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
  60                                       struct cache_head *key, int hash)
  61{
  62        struct cache_head **head,  **hp;
  63        struct cache_head *new = NULL, *freeme = NULL;
  64
  65        head = &detail->hash_table[hash];
  66
  67        read_lock(&detail->hash_lock);
  68
  69        for (hp=head; *hp != NULL ; hp = &(*hp)->next) {
  70                struct cache_head *tmp = *hp;
  71                if (detail->match(tmp, key)) {
  72                        if (cache_is_expired(detail, tmp))
  73                                /* This entry is expired, we will discard it. */
  74                                break;
  75                        cache_get(tmp);
  76                        read_unlock(&detail->hash_lock);
  77                        return tmp;
  78                }
  79        }
  80        read_unlock(&detail->hash_lock);
  81        /* Didn't find anything, insert an empty entry */
  82
  83        new = detail->alloc();
  84        if (!new)
  85                return NULL;
  86        /* must fully initialise 'new', else
  87         * we might get lose if we need to
  88         * cache_put it soon.
  89         */
  90        cache_init(new);
  91        detail->init(new, key);
  92
  93        write_lock(&detail->hash_lock);
  94
  95        /* check if entry appeared while we slept */
  96        for (hp=head; *hp != NULL ; hp = &(*hp)->next) {
  97                struct cache_head *tmp = *hp;
  98                if (detail->match(tmp, key)) {
  99                        if (cache_is_expired(detail, tmp)) {
 100                                *hp = tmp->next;
 101                                tmp->next = NULL;
 102                                detail->entries --;
 103                                freeme = tmp;
 104                                break;
 105                        }
 106                        cache_get(tmp);
 107                        write_unlock(&detail->hash_lock);
 108                        cache_put(new, detail);
 109                        return tmp;
 110                }
 111        }
 112        new->next = *head;
 113        *head = new;
 114        detail->entries++;
 115        cache_get(new);
 116        write_unlock(&detail->hash_lock);
 117
 118        if (freeme)
 119                cache_put(freeme, detail);
 120        return new;
 121}
 122EXPORT_SYMBOL_GPL(sunrpc_cache_lookup);
 123
 124
 125static void cache_dequeue(struct cache_detail *detail, struct cache_head *ch);
 126
 127static void cache_fresh_locked(struct cache_head *head, time_t expiry)
 128{
 129        head->expiry_time = expiry;
 130        head->last_refresh = seconds_since_boot();
 131        smp_wmb(); /* paired with smp_rmb() in cache_is_valid() */
 132        set_bit(CACHE_VALID, &head->flags);
 133}
 134
 135static void cache_fresh_unlocked(struct cache_head *head,
 136                                 struct cache_detail *detail)
 137{
 138        if (test_and_clear_bit(CACHE_PENDING, &head->flags)) {
 139                cache_revisit_request(head);
 140                cache_dequeue(detail, head);
 141        }
 142}
 143
 144struct cache_head *sunrpc_cache_update(struct cache_detail *detail,
 145                                       struct cache_head *new, struct cache_head *old, int hash)
 146{
 147        /* The 'old' entry is to be replaced by 'new'.
 148         * If 'old' is not VALID, we update it directly,
 149         * otherwise we need to replace it
 150         */
 151        struct cache_head **head;
 152        struct cache_head *tmp;
 153
 154        if (!test_bit(CACHE_VALID, &old->flags)) {
 155                write_lock(&detail->hash_lock);
 156                if (!test_bit(CACHE_VALID, &old->flags)) {
 157                        if (test_bit(CACHE_NEGATIVE, &new->flags))
 158                                set_bit(CACHE_NEGATIVE, &old->flags);
 159                        else
 160                                detail->update(old, new);
 161                        cache_fresh_locked(old, new->expiry_time);
 162                        write_unlock(&detail->hash_lock);
 163                        cache_fresh_unlocked(old, detail);
 164                        return old;
 165                }
 166                write_unlock(&detail->hash_lock);
 167        }
 168        /* We need to insert a new entry */
 169        tmp = detail->alloc();
 170        if (!tmp) {
 171                cache_put(old, detail);
 172                return NULL;
 173        }
cache_fresh_locked1     1" class="sref"54ref="+code=tmp" class="sref"6a hp3 ss="sref">cache_put(new,  165et/sun              return tmp;
  64
  65        head = &detail->17de=h" class="sref">h->+code=flags" class="sref">flags)) {
 155                write_lotmp" clas1s="sref">tmp;
flags)) {
 157                        if (test_bit(1  78                1}
cache_revisit_request(flags))
 158                  class="sref">next;
set_bit((&1amp;detas="line" 1name="L81">  81     1   old"> 159                        else
 160<="ef="+ate(detail->next;
 151new = next = *headnrpc/cache.c#L152" id="L152" class="line" name="L152"> 15et/sunrpc1/cache.c#L84" id="L84" c1lass=18p" class="sref"6a hp3 ss="sref">cache_put(href="net/sunrpc/cache.c#L114" id="L114" class="line" name="L114"> che.c#L851" id="L85" class="line" 1name=18">tmp;
entries++;
cache_fresh_L86" clas1s="line" name="L86">  861 18>];
new);
cache_fresh_locked(h->ode=new" class="sref">new);
 165                }
 166                write_unloan>
  89ss="sref">hash_lock);
 171                  901        cache_ik" class="sref">hash_lock);
 163                        init1(/* pairref="+code=tmp" class="sref">tmp) {
 171                key<1a>);
detail);
hash_1lock<1a>);
<+code=detail" che.c#L121" id="L121" class="line" name="L121"> 121}
  951 19head" class="sref">cache_head *hp = &(*  52
44"> 144struct cache_head *);
cache_is_expired(struct cache_detail *cache_head1 *time_t match(<1a hre19sunrpc/cache. hreil->);
 166cache2is_expired(de href="-+code=detail" chINVA121" class="line"INVA1>);
hp = );
 166cache_detail *init2f="+c20t/sunrpc/cache.c#L141" id="L141" cla2         2    cache_head *<2         2                 ne      >,   52
 1f=s="li144"> 144struct cache_head *cache_is_expired(struct cache_detail *time_t hash_lock);
 156   = NULL;
ca href="-+code=detail" chAGAIN21" class="line"AGAIN>);
cache_head2class2"sref">detail<alloc();
cache_put(newe.c#L167" id="L167" classme="L146"s="li       }
 102                   href="+code=flags" class="sref">flags)) {
 157                = NULL;
tmp;
old);
 1102/a>                }
oldalloc();
new->detail-> 113        *         ****************** I clombinnetoncache.      barrier"na    }
         ****************** 4" class="line" nam,smesures thaock 112                 ****************** using theL131" class="lfter"tsrefsees th
/* must f***************** u" namdclontents:hash_lock<2a>);
21ment">/* The 'old' entry is *****************     }
 118             }
ca2he_put(new<2a>;
<22old" class="srpc/cache.c#L141" id="L141" cla2h" class=2ass="sref">EXPORT_SYMBOL2GPLhead->sunrpc_cache_lookup<2a>);
2a href="net/sunrpc/cache.c#L123" id=2L123" cla2s="line" name="L123"> 122
2a href="net/sname="L52">  52tresho_negnam_lass=sref">flags)resho_negnam_lass=144"> 144struct cache_head *cache_is_expired(struct cache_detail *detail<2a>, struct old, int ch<2a>);
22_get" class="name="L52">  52rvf">cache_detailrv>);
head, detail->expiry<2a>)
<2 href="net/sunrpc/cache.c#L12+code=flags" class="sref">flags)) {
 155                write_l2ad-&g2;expiry_time = rvf">cache_detailrv>);
ss="sref">head
 1f=s="li1ad *cache_detail *last_refr2shcache_detailrv>);
s!="-+code=detail" chAGAIN21" class="line"AGAIN>);
ref">alloc();
smp_wmb<2a>();23old" class="sref">old"> 159     " name="L165"> 165                }
 166                write_unl2">CACHE_V2LID, &detail-> href="+code=detail" crvf">cache_detailrv>);
flags);
<234ld" class="srpc/cache.c#L141" id="L141" cla2133" clas2="line" name="L133"> 1332/a>}
23p" class="sref"6a hp3 ss="srlass="sref">flags))
 158                  = NULL;
detail<2(struct tmp;
new);
 130        ];
 165                }
 166                write_unl2"lass="sr2il" class="sref">detail<2a>)
<23de=h" class="sref">h->ode=new" claef">hash_lock);
 =  171                , &);
rpc/cache.c#L141" id="L141" cla2"sref">ca2he_dequeue(head);
 141     2  }
<2 href=>/* The 'old' es="srefis th
 genert/s131" cmanage' rout141lass=al=1<  }
 1422/a>}
24ode=hspan class="comment">  * th
 auth
net/netoncche.cscache.c#L147" id="L147" class="line" n2a>(struct2  * Itid="L9s th
 currency of as131" c   m and"net/s(lnamr)ache.c#L147" id="L147" class="line" n2a>detail<2">cache_head *  *e=NULL"teckhash<2a>)
<24     /s    }
        /* The 'old' es    }
 148         * If 'old&#* Rhref=s 0c hrtheL131" de=caL13n146tmp 129  * -"AGAINc hre"cal= is pending and" h/sunr f="146en >);
ca2et/sunrpc/cache.c#L150" 2d="L120" claspan class="comment">  * -"TIMEDOUTc hre"cal= f   edess= h/sunr could9;new46<>);

/* The 'old' es===========theL131" c g m f="146en /a>{
 16er one)cache.c#L147" id="L147" class="line" n2 href="+c2de=tmp" class="sref">tmp2/a>;
25ode=hspan class="comment">  * -"NOENTc hr131" class="w="1negnaiv
CACHE_V2LID, &  *     }
  52
 144struct cache_head *, &old-&glass="sref">cache_is_expired(struct cache_detail  class="sref">cache_is_expired h/(struct detailrqsts/a> *time_t CACHE_NE2ATIVE, &  52rvf">cache_detailrv>);
  52r" id="_agef">cache_detailr" id="_agecode ctail" class="sragef">cache_detailagecodeca2lass="sref">update(<2 href26tail"pc/cache.c#L141" id="L141" cla2ref">old<2a>, new-e.c#L167" id="L167" classFirnr decide" href="="neus ="146nr weL13n1*     }

cache_detailrv>);
ss="sref">head
 1f=s="li1ad *cache_detail *cache_f2esh_unlocked( 162          e.c#L167" id="L167" classnowfseec hrweLwaamenam="n167"old;
tmp;
cache_detailr" id="_agecodess=#L163" id="L163" =  128{
cache_detail s="sref">expiry;
];
cache_detailagecode" class="line" name="L130"> 130        cache_detail s="sref">expiry;
hash_lock);
detail-> 1626sunrpc/cache. href="+code=flags"rqstss="sref">detailrqsts/a>  =="line" name="L101"> 101                ref">alloc();
2mp = cache_detailrv>);
ss="-+code=detail" chAGAIN21" class="line"AGAIN>);
r">alloc();
ca2c#L170" id="L170" class=2line"2name="L170"> 170  a href="net/sunrpc/cachrvf">cache_detailrv>);
ss=-+code=detail" chNOENT21" class="line"NOENT>);
cache_put(cache_detailrv>);
ss="-+code=detail" chAGAIN21" class="line"AGAIN>);
 ||"net/sunrpc/cachagef">cache_detailagecode"="sra href="net/sunrr" id="_agef">cache_detailr" id="_agecode/2ref">alloc();
detail->ad *);
a.c#L167" id=lasing">"RPC:a>->Waamee" nam,s;
NULL;
 170  a href="net/sunrpc/cachr" id="_agef">cache_detailr" id="_agecode ctail" class="sragef">cache_detailagecode*lass="sref">flags)lock"lass="sef="net/sunrpc/cache.c#L15 id="L138" class="line" name="L138"> 138        if ( = NULL;
alloc();
cache_headad *cache_detail *ref">alloc();
old->);
:">alloc();
27ew" class="sref">new-> 138        if ( = NULL;
tmp;
 118             flags)) {
cache_detail *2  78                2}
cache_revisit_re        cache_detailrv>);
ss="sref">headtresho_negnam_lass=sref">flags)resho_negnam_lass=1ad *cache_detail * 170  a href="""""""""break  81     2   oldddddddddca he-+code=detail" chAGAIN21" class="line"AGAIN>);
:">alloc();
detail-> 138        if ( = NULL;
new =  170  a href="net/sunrpc/cachc"+cod hags" class="sref">flags)) {
cache_detail *cache_head  862 28" class="sref">old
detaf="+code=flags"rvf">cache_detailrv>);
ss="-+code=detail" chAGAIN21" class="line"AGAIN>);
ref">alloc();
  902         170   hreil->detailrqsts/a>  ctail" class="sref">cache_detail *ref">alloc();
init2(new->key<29href=>/* The 'old' eeeeeeeeeeeeeeeeeeeeeeeee* Rh/sunr w="1nor deferred; h         ****************** weL13n1ourselves:hash_2lock<29s="srspan class="comment">         ******************     }
  952 29d" class="sref">cache_headcache_detailrv>);
ss="sref">head
 1f=s="li1ad *cache_detail *hp = &(*old->cache_detailrv>);
ss="-+code=detail" chAGAIN21" class="line"AGAIN>);
r">alloc();
cache_head2 *new->cache_detailrv>);
ss=-+code=detail" chTIMEDOUT21" class="line"TIMEDOUT>);
match(<2a hre29="L118"> 118     rpc/cache.c#L141" id="L141" cla3ef">cache3is_expired(cache3i/a>        cache_detailrv>);
r">alloc();
init3f="+c30old" class="sref">old"> 159     ref">tmp<="line" name="L173"> mp) {
 171                );
cache_detailrv>);
 121}
);
  953cache30head" class="sref">cache_head *3         3            as    }
cache_head3class30ment">/* The 'old' escche.csline" nambe periodical=y {
cache_put(         * If 'old&#* For"tsrefw cmain   n a linr ohr131" ref">ca andache.c#L147" id="L147" class="line" n3" id="L103" class="line" name="L103"> 1031  * a current poin er"nanamthaoclinr and"nanamthe   cache3ef">tmp;
  * for"tsaoclass=cache.c#L147" id="L147" class="line" n3110"> 1103/a>                }
new-> 113        *  *e=N th
 current     * looking for".c#L114 thaoc13n146 113          *ache.c#L147" id="L147" class="line" n31        3p;/* Anclass="getshash_lock<3a>);
31ment">/* The 'old' e* -46" c.c#L12c s befor
 current   id=" href="net/sunrpc/cache.c#L86" id="3Llass="sr3118" id="L118" class="li3e" na31nt">         * If 'old&#* -46" cl#L130" id=" " id  s befor
 th
 flu     id for"tsaocL86" =" href="net/sunrpc/cache.c#L86" id="3"sref">ca3he_put(  *=" href="net/sunrpc/cache.c#L86" id="3"1">cache3c#L120" id="L120" class=3line"32" claspan class="comment">  * lnamrfw cmight drop old".c#L114 ache.non-NEVERc.c#L12c f"tsaoc  new<3a>;
<32t/sun".c#L167" id="L167" cl *  s getting d by fulld by &for"soid def=NULLon ohrd by fulld by hrhe.c#L147" id="L147" class="line" n3h        3ass="sref">EXPORT_SYMBOL3GPL/* The 'old' eshrhe.c#L147" id="L147" class="line" n3h        3ef">sunrpc_cache_lookup<3a>);
32ode=hspan class="comment">  *e6" c/sunrLon ohrdquot;how ohtenenam=13n1ac   123
32s="srspan class="comment">  * and"ns 3nswerud"na pn167by th
 use ohrth
 dquot;01" d="L9dquot; fielde=N th
 113a>, struct   *e131" ref">cacache.c#L147" id="L147" class="line" n3a href="+3ode=ch" class="sref">ch<3a>);
32     /* When1ac=13n1of as  head, /* The 'old' e* tsaocrefw t/sinnamthe furefecache.c#L147" id="L147" class="line" n3alass="sr3ry" class="sref">expiry<3a>)
<32nt">         * If 'old&#* Whia  =13nnLng,c f"   .c#L12c" id  s found"tsaocrefearlier"tsaN th
  * current 01" d="L9 " id, 01" d="L9 =efsemenamthaoclc#L12c" idcache.c#L147" id="L147" class="line" n3st_refres3" class="sref">last_refr3sh  * If th
 flu     id refever"semenama   idfearlier"tsaN th
 01" d="L9ache.c#L147" id="L147" class="line" n3sref="+co3b" class="sref">smp_wmb<3a>();33t/sun".c#L167" id="L167" cl * " id, th
 01" d="L9   id refth
nfsemenamthaocflu     idcache.c#L147" id="L147" class="line" n3s        3LID, &flags);
<33ode=hspan class="comment">  *eAs   1333/a>}
33s="srspan class="comment">  * th
 01" d="L9   idcache.c#L147" id="L147" class="line" n3s115"> 113(struct   *ache.c#L147" id="L147" class="line" n3" href="+3/*     }
detail<3a>)
<33s="sref">detail->LIST_HEAc#L156" id="L156LIST_HEAc1}
="net/s" class="sref">DEFINE_SPINLOCK_lock);
}
( 144struct cache_head *);
head);
  52
urrent"indexcache_head" clasurrent"index>);
 141     3  }
<34ead" class="sref">cache_head *<3s+code=fl3="line" name="L142"> 1423/a>}
344href="net/svoidctail" class="sr"o_href="d
 171o_href="d
44"> 144struct  1="L171"> 171 1che_head * 171 144struct  171);
 113">cache_head *cache_head *3a href="+3hash" class="sref">hash<3a>)
<34     voidctail" class="srcache_ 173<_href="+code=cache_head" clacache_ 173<_href="+code=144"> 144struct cache_head *);
alloc();
        time_t  148 166                write_unl39" id="L139" class="line" name="L139"> 135ss="sref">expiry_time = INIT_LIST_HEAc#L156" id="L156INIT_LIST_HEAc1/a>        if ();
 166);
<_lock);
);
write_unl39t_refres3et/sunrpc/cache.c#L150" 3d="L135e_init" class="sref">cache_ispin              /a>        if (/* pairrh_lock);
 166);
    3   struct );
 166tmp3/a>;
35t/sunrpc/cache.c#L173" id="Latomic>laset/sunrpc/cacheatomic>las1/a>        if ();
 166(CACHE_V3LID, & 166);
 113p;tmp;
 166 171);
ss=-1, &);
/a>        if ();
 166        if ();
CACHE_NE3ATIVE, &h->spin ="L165"> 165     spin ="L1651/a>        if (, &  pc/cache.c#L141" id="L141" cla3flags3;
ca3lass="sref">update(<3 href36e_init" class="sref">cache_ise.cdulsreflayed_work="L171"> 171/a>        if ();
old<3a>, (&a3p;
<+code=detail" che.c#L121" id="L121" class="line" name="L121"> 121}
 163  voidctail" class="srcache_ de44"oy_href="+code=cache_head" clacache_ de44"oy_href="+code=144"> 144struct cache_head *);
alloc();
old;
old, int ];
 mprgef">cache_detail173"> mprge1}
(hash_lock);
h->spin              /a>        if ( 1636href="net/sunrpc/cache.c#L12+code=flags" class="sref">flags)) {
 166                write_unl3s="sref">3mp = detaf="+code=flags"rh_lock);
 166r/a>(struct r/a>)) {
 166);
alloc();
ca3c#L170" id="L170" class=3line"3name="L170"> 170  rpc/cache.c#L12+code=="L165"> 165                }
 166                write_unl3sef">old<3f">cache_put(old"> 159     spin ="L165"> 165     spin ="L1651/a>        if ((&a3="L172" class="line" nam3="L1737sref">detail->gotod"> 159     op<="line" name="Lop)      NULL;
);
 =="line" name="L10ch_lock);
alloc();
cachef="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
 ="line" name="L101"> 101                      ];
 16637de=h" class="sref">h->+code=="L165"> 165                }
 166                write_unl3s id="L163s="sref">tmp;
 165     spin ="L1651/a>        if (3  78                3}
detaf="+code=flags"linr empty="line" name="Llinr empty1/a>        if ();
alloc();
 170  e.c#L167" id="L167" classmoduls musew46  81     3   old      if ();
/a>        if ();
(&a3g, insert an empty entry3 */detailnew = );
<+code=detail" cop<="line" name="Lop):">alloc();
tmp;
);
"nfsd: f   edenam/* pairrh_lock);
 166);
         863 38" clarpc/cache.c#L141" id="L141" cla3sCACHE_NE3"L87" class="line" name=3"L87"38de=h"+code=detail" che.c#L121" id="L121" class="line" name="L121"> 121}

 assd
  903          * and"d
init3(detit {
(&a3"+code=key" class="sref"3>key<39href=>/* The 'old' es=========== 0c hrit didnd by refind anything tsref  id=" href="net/sunrpc/cache.c#L86" id="3 s="sref"3amp;  s===========-1>detit f t/sofh th
 end ohrth
 linrcache.c#L147" id="L147" class="line" n3+ocked1  3lock" class="sref">hash_3lock<39s="srspan class="comment">  *     }
  953 39d" cl="net/sname="L52">  52
ref="d
 171voidr">alloc();
hp = &(*alloc();
cache_head3 *  52rvf">cache_detailrv>);
ss=0match(<3a hre39="L118"> 118<44"> 144struct (struct che_head *);
cache4is_expired(cache4i/a>        cache_ispin              /a>        if (init4f="+c40old"      );
 assfind a sui  y have on
 *     }
);
 =="line" name="L101"> 101                 ||a href="net/sunrpc/cache.c#L164 5       4 ock" class="sref">hash_4 id="40p" class="sre    f="+code=flags"rurrent"indexcache_head" clasurrent"index>);
"="sr="line" name="L10current"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166   siznet/sunrpc/cachea>   sizn1alloc();
  954cache40d" class="sref">cachedetaf="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
r">alloc();
old-> *);
head
urrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166 *);
cache_head4class40ew" class="sref">new<match(<4"+cod40="L118"> 118             ad *);
head
);
);
 1041/a>                   href="+code=flags"01" _lock);
        if ();
alloc();
cache4ef">tmp;
 170  a href="net/sunrpc/cachrurrent"+code=cache_head" clasurrent"+code=>);
 ="line" name="L101"> 101                       1104/a>                }
new-> 165     spin ="L1651/a>        if (new->detail-> 113        * 1rpc/cache.c#L141" id="L141" cla41
);
 ="line" name="L10linr eass=sref">flagslinr eass=1}
);
cache_is_expired+code=cache_head" class="sref">cache_ comment">/* pairoth
rnet/sunrpc/cacheoth
rncode        114        cachedetaf="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166);
 130        alloc();
old-> *);
"="line" name="L10current"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166   siznet/sunrpc/cachea>   sizn1hash_lock<4a>);
41ew" class="sref">new<alloc();
 118             ad *);
"="0ca4he_put(cache_revisit_re        f="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166);
 130        cache4c#L120" id="L120" class=4line"42ame="L170"> 170  rpc/cache.c#L141" id="L141" cla4href="+co4e=new" class="sref">new<4a>;
<42old" class="s}pc/cache.c#L141" id="L141" cla4h        4ass="sref">EXPORT_SYMBOL4GPLcache_head *<4h        4ef">sunrpc_cache_lookup<4a>);
42t/sunrpc/cachepan class="comment"> assfind a non-empty buckete=N th
    124
42p" class="srewhia  af="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
 /a>  /a>  a href="net/sunrpc/cache.c#L164L115"> 114a>, struct cachf="+code=flags"rurrent"indexcache_head" clasurrent"index>);
"=lsra href="net/sunrcurrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166   siznet/sunrpc/cachea>   sizn1  /a>  a href="net/sunrpc/cache.c#L164L        4ode=ch" class="sref">ch<4a>);
42" class="sref">old);
" name="L166"> 166          [f="+code=flags"rurrent"indexcache_head" clasurrent"index>);
] =="line" name="L101"> 101                ra href="net/sunrpc/cache.c#L164L8       4f">head, new);
++ a href="net/sunrpc/cache.c#L164L9       4ry" class="sref">expiry<4a>)
<42/a>  pc/cache.c#L141" id="L141" cla4ad-&g4;last_refr4shsmp_wmb<4a>();43old" class="sdetaf="+code=flags"rurrent"+code=cache_head" clasurrent"+code=>);
 /a>  /a>  hf="+code=flags"rurrent"indexcache_head" clasurrent"index>);
"=lsra href="net/sunrcurrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166   siznet/sunrpc/cachea>   sizn1alloc();
detail->lass="sref">cache_is_expired(struct detailcp1flags);
<43t/sunrpc/cachL170"> 144"> 144struct cache_head * 1334/a>}
43s="sr      114(struct cachef="+code=flags"+code=flags" class="sref">flags)) {
);
" name="L166"> 166                write_unl4" href="+4write_unl4"8       4il" class="sref">detail<4a>)
<43ew" class="sref">new  pc/cache.c#L141" id="L141" cla4ref="+cod4=cache_revisit_request" 4lass=44ref">cache_revisit_retail" class="srcss="sref">detailcp1  / href="net/sunrcurrent"+code=cache_head" clasurrent"+code=>);
" name="L166"> 166          [f="+code=flags"rurrent"indexcache_head" clasurrent"index>);
]_unlock" class="sref">write_unl4rt_refres4he_dequeue( 170  for"af="+code=flags"r = detailcp1detailcp1  / href="net/sunrc =  166);
 = detailcp1alloc();
head);
new->);
" name="L166"> 166);
 166 141     4  }
<44sref">detail->);
" name="L166"> 166);
 =  166 1424/a>}
44t/sunrpc/cachL170"> 170   hreil-> 1f=.c#L1ei1}
);
 cf="+code=flags"r = alloc();
 114">cache_head *cache_head *4a href="+4hash" class="sref">hash<4a>)
<44" class="sref">old->detailcp1 =  166);
new->lass="line" namc =  166);
 101                       148 118             ad *);
" name="L166"> 166 145ref">cache_revisit_re        f="+code=flags"rvf">cache_detailrv>);
ss=1 170  a href="breaknew->    4   struct cache_head *<42+code=fl4de=tmp" class="sref">tmp4/a>;
45t/sunrpc/cachL170"> 1f="+code=flags"+code=="L165"> 165                }
);
" name="L166"> 166                write_unl4">CACHE_V4LID, &);
_unlock" class="sref">write_unl4"115"> 114p;cachedetail-> = write_unl4" href="+4LID, &old-> *);
"++ a href="net/sunrpc/cache.c#L164>CACHE_NE4ATIVE, &new 165     spin ="L1651/a>        if (, & 118     detaf="+code=flags"r = alloc();
cache_revisit_re        detaf="+code=flags"tenr and_class="line" name="L137"tenr and_class="li1}
 138        if ( =  166;
write_unl4fsref">ca4lass="sref">update(<4 href46ame="L170"> 170  a href="""""""""4struct );
<1}
);
 cf="+code=flags"r = old<4a>, new->flags)) {
 =     4p;detail-> mp) {
( 1rpc/cache.c#L141" id="L141" cla4" id="L164" class="line" name="L164"> 1646p" class="sre}<(&a4ef">old;
cachef="+code=flags"spin ="L165"> 165     spin ="L1651/a>        if (write_unl4rCACHE_NE4ref">hash_lock);
cache_detailrv>);
 1646href=rpc/cache.c#L141" id="L141" cla4s="sref">4mp = ca4c#L170" id="L170" class=4line"47" claspan class="comment"> as    }
old<4f">cache_put((&a4="L172" class="line" nam4="L1747href=>/* The 'old' es     }
NULL;
 171o_href="d
44"> 144struct  1="L171"> 171 1che_head * 171alloc();
  52eflay="L171"> 171flay1];
 171)ss="-1 a href="net/sunrpc/cache.c#L164sCACHE_NE4L77" class="line" name="4L77">47ew" class="sref">new 171flay1);
30ead *);
tmp;
4  78                4}
detaf="+code=flags"linr empty="line" name="Llinr empty1/a>        if ();
ca4amp; 170  e="+code=flags"eflay="L171"> 171flay1  81     4   (&a4g, insert an empty entry4 */detail 171flay1new =  1f="+code=flags"se.cdulsreflayed_work="L171"> 171/a>        if ();
 171flay1);
(&a4" id="L85" class="line" 4name=48head" class="sref">cache_head *4m href="+4s="line" name="L86">  864 48     unlock" class="sref">write_unl4sCACHE_NE4"L87" class="line" name=4"L87"48ment">/* The 'old' as    }
         * If 'old&#* C
 #* repeated=y until welars"sur
 thaoclveryr131" chaschad a dhrncf na1<  }
ca4          * be ful=y {
init4(key<49href=voidctail" class="sr131" _flu  _lock);
alloc();
alloc();
hash_4lock<49p" class="srewhia  af="+code=flags"rref="d
 171)s!="-1 a href="net/sunrpc/cache.c#L164 he.c#L854s="line" name="L95">  954 49d" class="sref">cachef="+code=flags"rond_rese.cd="L171"> 171)hp = &(* 171)s!="-1 a href="net/sunrpc/cache.c#L164 CACHE_NE4ss="sref">cache_head4 *new 171)match(<4a hre49href=rpc/cache.c#L141" id="L141" cla5ef">cache5is_expired( 121}
);
cache5i/a>        init5f="+c50old" voidctail" class="sr131" _mprgef">cache_detail173"> mprge144"> 144struct cache_head *);
r">alloc();
);
alloc();
 *);
" name="L166"> 166;
;
hash_5 id="50p" class="sread *);
" name="L166"> 166);
 130          955cache50">tmp;
);
hp = &(*];
);
" name="L166"> 166;
cache_head5class50ew" crpc/cache.c#L141" id="L141" cla5e9       5 lass="sref">match(<5"+cod50="L11f="+code=flags"he.c#L121" id="L121" class="line" name="L121"> 121}
cache_detail173"> mprge1 1051tail"     cache5ef">tmp;
 1105/a>                }
new-> 113        *  sache.c#L147" id="L147" class="line" n515       5       * If as131" clookupsfinds aspending lass=, weache.c#L147" id="L147" class="line" n516       5          *line" namdefer7th
 et/sunreand" href="tit latercache.c#L147" id="L147" class="line" n517       5p;/* Allcdeferred et/sunrslars"stored in asf="+   hash_lock<5a>);
51ment">/* The 'old' /* indexed by "44"> 14173"> e=ca *"cache.c#L147" id="L147" class="line" n519       5118" id="L118" class="li5e" na51nt">         * If 'old&#* Assit may be wasteful namstore aswhol
 et/sunrache.c#L147" id="L147" class="line" n5"sref">ca5he_put( #* 44"> 1ure, welallowfth
 et/sunrenamprovidelaache.c#L147" id="L147" class="line" n5"1">cache5c#L120" id="L120" class=5line"52" claspan class="comment">  * deferred form,ewhich musewcontain aache.c#L147" id="L147" class="line" n5"10"> 1105e=new" class="sref">new<5a>;
<52t/sun".c#L167" id="L167" cl * d by 44"> 14173"> deferrednet/d by ache.c#L147" id="L147" class="line" n5"        5ass="sref">EXPORT_SYMBOL5GPL/* The 'old' es=Tsref173"> deferrednet/wcontains asidtho" namallowache.c#L147" id="L147" class="line" n5"        5ef">sunrpc_cache_lookup<5a>);
52ode=hspan class="comment">  s=irenambe" href="ed whenr131" cinfo refavde=  125
52s="srspan class="comment">  *     }
 115a>, struct cache_head *5L        5ode=ch" class="sref">ch<5a>);
52" cla#defs="s" class="sref">DFR_HASHSIZEf">cache_detailDFR_HASHSIZE];
}
cache_detailPAGE_SIZE];
44"> 144struct (struct che_ rpc/cache.c#L141" id="L141" cla5L8       5f">head, DFR_HASHf">cache_detailDFR_HASH1}
cache_detail="emcodefe ((((long)}
cache_detail="emcodef nam nam4 ^ (((long)}
cache_detail="emcodef nam nam13))/%s" class="sref">DFR_HASHSIZEf">cache_detailDFR_HASHSIZE];
expiry<5a>)
<52/a>  pc/cache.c#L141" id="L141" cla5ad-&g5;DFR_MAX/a>;
last_refr5shsmp_wmb<5a>();53old" ="net/s" class="sref">DEFINE_SPINLOCK/a>;
LIST_HEAc#L156" id="L156LIST_HEAc1}
);
flags);
<534href="net/s44"> 144struct (struct che_h}
cache_detailDFR_HASHSIZE];
<]_unlock" class="sref">write_unl5"123" cla5="line" name="L133"> 1335/a>}
53s="sr="net/sname="L52">  52
ref="defer cnr_lock);
 115(struct cache_head *5" href="+5);
 144struct  *);
detail<5a>)
<53ew" cf">alloc();
 166  ="line" name="Lha  1detail-> 166);
alloc();
 170  l-> 166);
head);
new->  52
ref="defer cnr_lock);
 141     5  }
<54sref">detail 1425/a>}
54t/sunrpc/cache.c#L141" id="L141" cla5s123" cla5 115">cache_head *);
 144struct  *);
cache_is_expired(struct cache_detail="emcodef     hash<5a>)
<54" claf">alloc();
          52a>  ="line" name="Lha  1cache_detailDFR_HASH1}
cache_detail="emcodef       148 155ref">cache_re}
 166);
cache_ihlinr add (struct 1/a>        if ();
 166  ="line" name="Lha  1        if (  ="line" name="Lha  1rpc/cache.c#L141" id="L141" cla52    5   struct cache_head *<52+code=fl5de=tmp" class="sref">tmp5/a>;
554href="net/svoidctail" class="srsetup"+cferra=cache_head" clacetup"+cferra=144"> 144struct  *);
cache_head *<52123" cla5LID, &cache_is_expired(struct cache_detail="emcode class="sref">cache_head *<52115"> 115p;cacheeeeeeeeeeeename="L52">  52
ount_id/a>;
alloc();
alloc();
);
 166cache_detail="emcodes class="line" nam="emf">cache_detail="emcodeca5lass="sref">update(<5 href56e_init" class="sref">cache_ispin              /a>        if (old<5a>,     5p;detail);
cache_detail="emcodef      ( 1656p" class="sredetaf="+code=flags"rount_id/a>;
alloc();
old;
cachef="+code=flags"
ref="defer cnr_lock);
old-> 166);
        if ();
hash_lock);
 1656/a>  pc/cache.c#L141" id="L141" cla5s="sref">5mp = cache_re}
 165     spin ="L1651/a>        if (ca5c#L170" id="L170" class=5line"57tail"pc/cache.c#L141" id="L141" cla5sef">old<5f">cache_put(rpc/cache.c#L141" id="L141" cla5sk(&a5="L172" class="line" nam5="L1757ead" class="sref">cache_head *<5s+code=fl5ass="sref">NULL;
cache_is_ethr/a>cdeferrednet/_lock);
cdeferrednet/ef">cf">alloc();
 144struct nda et/sunrpc/cachea>nda code 144struct  171 171];
<}57ew" c">alloc();
tmp;
 144struct  *);
  52too_many="line" name="Ltoo_manycodef     5  78                5}
alloc();
ca5amp; 1="ss="sref">cache_is_ethr/a>cdeferrednet/_lock);
cdeferrednet/ef">cead *);
alloc();
old<5name="L81">  81     5   new->  52
ontainer of="L171"> 171ad *);
cache_is_ethr/a>cdeferrednet/_lock);
cdeferrednet/ef"> c}
(&a5g, insert an empty entry5 */detail/a>        if ();
 166 171(&a5" id="L85" class="line" 5name=586    ="net/svoidctail" class="srhref="wa="net/_lock);
44"> 144struct cead *);
cache_is_expired(struct cache_detail="emcodef       865 58" claf">alloc();
 1="ss="sref">cache_is_ethr/a>cdeferrednet/_lock);
cdeferrednet/ef">c}
 118<44"> 144struct  *);
        if ();
 *nda et/sunrpc/cachea>nda codeca5        cache_isleeper_lock);
 * 171;
 171init5(cache_iaet/_lock);
 166);
_lock);
1key<59ead" class="sref">cache_head *<5 s="sref"5amp; *ad *);
cache_detail="emcode, 0fhash_5lock<59s="sr       955 59d" class="sredetail->}
 138        if (cache_detail="emcode" name="L166"> 166;
hp = &(*ole="L166"> 166     cache_head5 *new<<<<        if ();
 * 171 166cwa="_lock);
cwa="nrpcc =lsr= 0fcf">alloc();
match(<5a hre59="L118"> 118     n.c#L167" id="L167" classTh
 completion wasnd by t completed, so weline"    }
cache6is_expired( #################*fto d
cache6i/a>          ################*     }
init6f="+c60ref">new->  52spin              /a>        if (detail->detail-> 171alloc();
->  52__unf="+cdeferrednet/_lock);
hash_6 id="60p" class="sre                }
 165     spin ="L1651/a>        if (  956cache60d" class="sref">cache}<alloc();
hp = &(*old->y remove"    }
cache_head6class60ment">/* The 'old' /////////////////////////* tsreffromfth
 f="+   match(<6"+cod60nt">         * If 'old&#////////////////////////* cal=ed " nam href="tyet.  It will veryrsoon1<  }
 1061 #################////////* and"weline" namwa=" for"itcache.c#L147" id="L147" class="line" n6"1">cache6ef">tmp;
  ################////////*     }
 1106/a>                }
new-> 165     spin ="L1651/a>        if (new->detail->/a>        if ();
 * 171 113        * 1rpc/cache.c#L141" id="L141" cla615       6             write_unl6L8       6 class="sref">hash_lock<6a>);
61ment"="net/svoidctail" class="srhref="limitrdefer;
voidr">alloc();
 f">alloc();
ca6he_put(cache6c#L120" id="L120" class=6line"62" claspan class="comment">  ////////* rh/sunrscache.c#L147" id="L147" class="line" n6"10"> 1106e=new" class="sref">new<6a>;
<62t/sun".c#L167" id="L167" cl ////////*     }
EXPORT_SYMBOL6GPLdetail<44"> 144struct  * 101                      sunrpc_cache_lookup<6a>);
62t/sun      126
62p" class="sredetaf="+code=flags"rref="defer cnr_lock);
;
alloc();
 116a>, struct cache href=      ch<6a>);
62     unlock" class="sref">write_unl6L8       6f">head,   52spin              /a>        if (expiry<6a>)
<62/a>  pc/cache.c#L141" id="L141" cla6ad-&g6;last_refr6sh);
alloc();
smp_wmb<6a>();63ref">new->()_randomf">cache_detail>()_random1)c/a>  /1 a href="net/sunrpc/cache.c#L166s        6LID, &detail->}
);
);
flags);
<63t/sunrpc/cachnew-> 144struct  1336/a>}
63p" class="sre         116(struct cacheeeeeeeeedpc/cache.c#L12aiscaracache_head" cladiscarache_h class="line" namlinr eass=cache_head" clalinr eass=1}
);
cache_detailprev     a href="net/sunrpc/cache.c#L166s7       6old-> 144struct detail<6a>)
<63ew" class="sref">new);
, &cache_re}
 165     spin ="L1651/a>        if (head);
new->  52aiscaracache_head" cladiscarache_" name="L166"> 166);
 141     6  }
<64sref"}pc/cache.c#L141" id="L141" cla6r        6="line" name="L142"> 1426/a>}
64t/sun      assRhref="4">eedetand"onlyedetacdeferred et/sunr ref>);
 116">cache_head *n      if ();
 144struct cead *);
cache_is_expired(struct cache_detail="emcodef     hash<6a>)
<64" claf">alloc();
         1="ss="sref">cache_is_ehref="+cferrednet/_lock);
 148 165class="sref">detaf="+code=flags"et/_lock);
 166cwa="_lock);
cwa="nrpcc f">alloc();
  52href="wa="net/_lock);
ad *);
cache_detail="emcodefnew->->}
 138        if (cache_detail="emcode" name="L166"> 166;
    6   struct detail->;
tmp6/a>;
65t/sunrpc/cach}pc/cache.c#L141" id="L141" cla62123" cla6LID, &);
 166);
ad *);
 116p; 101                f     old;
  52setup"+cferra=cache_head" clacetup"+cferra=1ad *);
cache_detail="emcode, 1 ->}
 138        if (cache_detail="emcode" name="L166"> 166;
6;
 assBit could f=ve beenr1leared befor
 w
 manage" na    }
ca6lass="sref">update(<6 href66" claspan class="comment">  ################* cet up7th
 +cferra=, so ine" nam href="tjusewinr13s hrhe.c#L147" id="L147" class="line" n6ref">old<6a>, detail->4struct );
}
cache_detail="emcodef 1666p" class="sread * 116ef">old;
ene" name="L137"t">eche_hash_lock);
alloc();
 1666/a>  ="net/svoidctail" class="srhref="reref="net/sunr_lock);
lass="sref">cache_is_expired(struct cache_detail="emcodef     6mp = alloc();
ca6c#L170" id="L170" class=6line"67ame="L170"> 1="ss="sref">cache_is_ehref="+cferrednet/_lock);
old<6f">cache_put( 1="ss="sref">cache_is_elinr (struct che_sref">cache_is_ependingf">cache_detailpendingche_detail<44"> 144struct cache_detailhlinr n  * 138 *NULL;
  52a>  ="line" name="Lha  1cache_detailDFR_HASH1}
cache_detail="emcodef      (&a6 tmp;
cache_detailpendingche_f      ];
67ew" c">alloc();
tmp;
cache_detailhlinr for_e="n eass=_safa1ad *);
  ="line" name="Lha  1alloc();
6  78                6}
 *);
 166cache_detail="emcodes  class="line" nam="emf">cache_detail="emcodec f">alloc();
ca6amp;dpc/cache.c#L12aet/_lock);
old<6name="L81">  81     6   new-> 166);
        if (cache_detailpendingche_f      (&a6g, insert an empty entry6 */detail->}pc/cache.c#L141" id="L141" cla6m+code=fl6>new =  165     spin ="L1651/a>        if (cache_head *6m href="+6s="line" name="L86">  866 68>];
cache_detailpendingche_fc f">alloc();
new);
}
cache_detailpendingche_.ad *);
 144struct  118     n="+code=flags"linr eflclass="line" name="Llinr eflclass1/a>        if ();
 166);
);
 166);
);
ca6        init6(rpc/cache.c#L141" id="L141" cla6ak(&a6"+code=key" class="sref"6>key<69ead" class="sref">cache_head *<6 s="sref"6amp;);
 *);
alloc();
hash_6lock<69s="srf">alloc();
  956 69d" class="sre44"> 144struct  *);
 *hp = &(*cache_is_elinr (struct che_sref">cache_is_ependingf">cache_detailpendingche_cache_head6 *alloc();
match(<6a hre69/a>  pc/cache.c#L141" id="L141" cla7ef">cache7is_expired(cache_re}
cache_detailpendingche_f      cache7i/a>        cache_ispin              /a>        if (init7f="+c70old"      detailcache_detaillinr for_e="n eass=_safa1ad *);
);
);
alloc();
-detaad *);
 166);
);
alloc();
hash_7 id="70p" class="sre                }
);
  957cache70d" class="sref">cache>detail 166);
        if (cache_detailpendingche_f      hp = &(*oldcache_head7class70de=h" class="rpc/cache.c#L141" id="L141" cla7e9       7 lass="sref">match(<7"+cod70href="net/sunrpc/cache.c#L12spin ="L165"> 165     spin ="L1651/a>        if ( 1071tail"     cache7ef">tmp;
->cache_detailpendingche_fc f">alloc();
 1107/a>                }
new->);
}
cache_detailpendingche_.ad *);
 144struct new->detail->n="+code=flags"linr eflclass="line" name="Llinr eflclass1/a>        if ();
 166);
 113        * 1=     if ();
 166);
);
        write_unl7L8       7 class="sref">hash_lock<7a>);
71ment">/* The 'old' /*    }
         * If 'old&#* communicate with user-   c hrhe.c#L147" id="L147" class="line" n7"sref">ca7he_put( #*    }
cache7c#L120" id="L120" class=7line"72" claspan class="comment">  * W
 f=ve a magic /proc filet- /procunrpc/ca=lsrche.c cla nam/channelcache.c#L147" id="L147" class="line" n7"10"> 1107e=new" class="sref">new<7a>;
<72t/sun".c#L167" id="L167" cl * On r/a>, you get a full et/sunr, or7b    cache.c#L147" id="L147" class="line" n7"        7ass="sref">EXPORT_SYMBOL7GPLsunrpc_cache_lookup<7a>);
72t/sun".c#L167" id="L167" cl * Poll worksedetanything nam ha>, and"always"allows writecache.c#L147" id="L147" class="line" n7"5       7s="line" name="L123"> 127
72s="srspan class="comment"> #*    }
, struct ch<7a>);
72     ".c#L167" id="L167" cl * a " namprivate thar also exinrswinrtsreflinrc  New"rh/sunrs are added    }
head, /* The 'old' /*fto th
 end"and"may wakeup"and"precedingm ha>erscache.c#L147" id="L147" class="line" n7L9       7ry" class="sref">expiry<7a>)
<72nt">         * If 'old&#* New"rha>ers are addedfto th
 .  If, onm ha>, an ="em reffound"withache.c#L147" id="L147" class="line" n7ad-&g7; #* " nameUPCALLING 1lear, w
 free =" fromfth
 linrcache.c#L147" id="L147" class="line" n7a1">cache7" class="sref">last_refr7sh  *ache.c#L147" id="L147" class="line" n7a10"> 1107b" class="sref">smp_wmb<7a>();73t/sun".c#L167" id="L167" cl *     }
cache_head *<7s        7gs" class="sref">flags);
<734href="net/sf="+code=flags"DEFINE_SPINLOCK/a>;
);
<              );
<     che_  1337/a>}
73p" cl="net/sf="+code=flags"DEFINE_MUTEX/a>;
);
< io_mutex         );
< io_mutexche_ cache_head *7s7       7 144struct );
<" claf">alloc();
detail<7a>)
<738me="L170"> 1="ss="sref">cache_is_elinr (struct che_sa>->n="+code=flags"linr(struct , &cache>detail assdet0,fth
n et/sunr *     }
} 144struct alloc();
head);
 1="ss="sref">cache_is_ehref=">);
<_lock);
 141     7  }
<74sref">detail<44"> 144struct cache_detail="emcode 1427/a>}
74t/sunrpc/cachchar"sref">cache>detail<*sf="+code=flags"buf="L171"> 171cache>detail 171cache_head *cache>detailerhash<7a>)
<74>];
<}         144struct er1alloc();
 148 118<44"> 144struct );
<" clatail 175class="sref">dame"sref">cache>detail assdetnon-0, w
 f=ve a ;
    7   struct );
cache_is_ehref="eta>_lock);
 144struct );
 * 171cache_is_ehounr_lock);
tmp7/a>;
75t/sunrpc/cachL170"> 1he>detail 144struct , &alloc();
 117p; 144struct er1 * 166;
, &cache_is_ehref="et/sunr_lock);
 1="ss="sref">cache_is_ein cache_detailin  *cache_detailin  166 166cache_detail+_in  166);
ca7lass="sref">update(<7 href761" class="sredetaf="+code=flags"rounr_lock);
old<7a>, new->    7p;cache_head *<7r+code=fl7esh_unlocked( */a>        if (cache_detailin  166 assprote="sagainnr multipl
 concurrenrch  }
 1676s="srspan class="comment"> ##############################*"rha>ers onrtsreffilet*     }
 117ef">old;
 166];
hash_lock);
 assine" namfindm01"  et/sunr *     }
 1676href="net/sunwhiletaad * 166);
 * *);
        if (_lock);
 166);
);
<" cla/a>  /a>  a href="net/sunrpc/cache.c#L167s="sref">7mp = }
 166);
 * *);
 144struct );
<" cl c}
ca7c#L170" id="L170" class=7line"77ame="L170"> 11111111" name="L166"> 166er_lock);
erche_c f">alloc();
old<7f">cache_put(new->cache_is_elinr (struct che_sead *);
 166);
 * *);
detail->n="+code=flags"linr move(struct /a>        if ( 166);
 *);
NULL;
 166);
 * *);
        if (_lock);
 166);
);
<" clc f">alloc();
 117 cachenet/sunrpc/cachspin ="L165"> 165     spin ="L1651/a>        if ();
<              );
<     che_ old * 165     mutex ="L1651/a>        if (cache_detailin  16677ew" class="sref">new}
 166);
tmp;
 118      href="07  78                7}
ca7amp;cache_ie/_lock);
 171}
 166);
 * *);
 144struct old<7name="L81">  81     7   new-f="+code=flags"BUG_ON         }
 166);
 *er_lock);
erche_cdetail 166);
 1=     if ();
 166er;
 165     spin ="L1651/a>        if ();
<              );
<     che_ cache_head *7m href="+7s="line" name="L86">  867 78>];
 166);
  /a>   il->}
 138        if ();
 166cache_detail="emcode" name="L166"> 166;
alloc();
new);
 118     n="+code=flags"spin              /a>        if ();
<              );
<     che_ /a>        if ( 166);
 *        if ();
 166);
 *ca7         11111111ead * 165     spin ="L1651/a>        if ();
<              );
<     che_ init7(new-} alloc();
key<79sref">detail->detaf="+code=flags"ep(struct  166);
cache_is_ehounr_lock);
);
 166 171 1he>detaif="+code=flags"rounr_lock);
 166 171 166);
hash_7lock<79p" class="sre        f="+code=flags"err_lock);
  957 79d" class="sref">cachedetaf="+code=flags"ropy_to_user_lock);
}
 171 166 171cache_is_eep(struct  166);
hp = &(*old->cache_head7 *new 166);
);
match(<7a hre79="L118"> 118     detaf="+code=flags"ep(struct  166);
 166 171alloc();
cache8is_expired(new 166);
cache8i/a>         11111111eef">new/a>        if ();
<              );
<     che_ init8f="+c80ref">new->/a>        if ( 166);
 *        if ();
 166);
 *detail-> * 165     spin ="L1651/a>        if ();
<              );
<     che_ -}pc/cache.c#L141" id="L141" cla8 5       8 ock" class="sref">hash_8 id="80p" class="sre        f="+code=flags"err_lock);
  958cache80d" class="sre}pc/cache.c#L141" id="L141" cla8 7       8 f">hp = &(*cache_head8class80de=h" class="detaf="+code=flags"ep(struct  166);
alloc();
match(<8"+cod80="L118"> 118     npan class="comment"> assine" namrelea h rq *     }
 10810_init" class>/a>        if ();
<              );
<     che_ cache8ef">tmp;
 11111111ead *);
 166er;
                }
new->);
 166er;
new->detail->;;;;il->}
 138        if ();
 166cache_detail="emcode" name="L166"> 166;
 113        * 11111111ead */a>        if ();
 166);
 * 165     spin ="L1651/a>        if ();
<              );
<     che_ cache>detail);
);
 166cache_detail="emcode, tail" class="srh>_lock);
old->);
 166 171hash_lock<8a>);
81ew" class="sref">new<>->);
 118     } ca8he_put(new 165     spin ="L1651/a>        if ();
<              );
<     che_ cache8c#L120" id="L120" class=8line"82e_init" class}pc/cache.c#L141" id="L141" cla8"10"> 1108e=new" class="sref">new<8a>;
<82ref">new-detaf="+code=flags"err_lock);
EXPORT_SYMBOL8GPLdetail->gotosunrpc_cache_lookup<8a>);
82t/sunrpc/cachad * 165     mutex ="L1651/a>        if (cache_detailin  166 128
82p" class="sre href="+code=detail" cerr_lock);
);
);
, struct ch<8a>);
82     unlock" class="sref">write_unl8L8       8f">head, );
cache_is_ehref="do"downcal=cache_head" clahref="+o"downcal=1char"ead *);
 171write_unl8L9       8ry" class="sref">expiry<8a>)
<82="L118"> 118     s>new);
cache_is_ehounr_lock);
 144struct -&g8;alloc();
cache8" class="sref">last_refr8shcache_issize_r_lock);
cache_is_erer_lock);
 1108b" class="sref">smp_wmb<8a>();83old"      , &detail);
flags);
<83t/sunrpc/cachL170"> 1 href="-f="+code=flags"EINVAL          1338/a>}
83p" class="sredetaf="+code=flags"ropy_from_user_lock);
}
 171cache href="-f="+code=flags"EFAULT         ];
);
'\0'    }
<detail<8a>)
<838me="L170"> 1ref">cache_is_erer_lock);
_lock);
 166);
_lock);
);
->);
);
);
);
head);
rpc/cache.c#L141" id="L141" cla8r        8ame="L141"> 141     8  }
<84ead" class="sref">cache_head *<8r        8="line" name="L142"> 1428/a>}
844href="net/sf="+code=flags"ssize_r_lock);
cache_is_ehref="slow"downcal=cache_head" clahref="slow"downcal=1connr char"}
 171write_unl8r123" cla8new);
cache_is_ehounr_lock);
 144struct cache_head *alloc();
hash<8a>)
<84" class="sref="net/schar"}
 171 assprote="ed by >);
< io_mutex *     }
         1ref">cache_is_essize_r_lock);
cache_is_erer_lock);
 148 185class="sref">detaf="+code=flags"rounr_lock);
 171 11111111egotonew-f="+code=flags"mutex              /a>        if ();
< io_mutex         );
< io_mutexche_ detailf="+code=flags"write_buf="L171"> 171 171tmp8/a>;
85t/sunrpc/cachad * 165     mutex ="L1651/a>        if ();
< io_mutex         );
< io_mutexche_ , & 118p;);
alloc();
);
cache_is_ehref="downcal=cache_head" clahref="+owncal=144"> 144struct  *cache_detailmappingcode unlock" class="sref">write_unl8flags8;
new<<<<<< 171write_unl8fsref">ca8lass="sref">update(<8 href86ame="L170"> 11111111eef">new<">new);
cache_is_ehounr_lock);
 144struct old<8a>, f">alloc();
detail<44"> 144struct  * *);
 1686p" class="sread *);
cache_is_erer_lock);
 118ef">old;
cache_head *8r7       8p;];
);
);
hash_lock);
new);
 1686/a>  pc/cache.c#L141" id="L141" cla8s="sref">8mp = struct f="+code=flags"mappingf">cache_detailmappingcode t0,ff="+code=flags"GFP_KERNEL         ca8c#L170" id="L170" class=8line"87ame="L170"> 1nftail->old<8f">cache_put(new->);
cache_head *<8s+code=fl8ass="sref">NULL;
);
f="+code=flags"pag          f="+code=flags"kaddr_lock);
 171 118 );
f="+code=flags"pag          ];
878me="L170"> 1ref">cache_is_epag _href="etlea h         tmp;
 118< href="+code=detail" crer_lock);
8  78                8}
);
ca8amp;}
 171old<8name="L81">  81     8   rpc/cache.c#L141" id="L141" cla8m    8g, insert an empty entry8 */cache_head *<8m+code=fl8>new = );
cache_is_ehref="writecache_head" clahref="write144"> 144struct );
 * 171write_unl8m id="L168/cache.c#L84" id="L84" c8lass=88p" class="sre        >);
cache_is_ehounr_lock);
cache_is_eloff_r_lock);
 *;
write_unl8m115"> 118" id="L85" class="line" 8name=88d" class="sref">cache>detail< ef="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *_lock);
  868 88>];
alloc();
 1="ss="sref">cache_is_eaddress_   c           *cache_detailmappingcodeh=cf="+code=flags"filp(struct  166cache_detailf_mappingche_ 118<44"> 144struct cache_detailin  *cache_detailin  166 166cache_detail+_in struct );
cache_is_erer_lock);
ca8        old<8t" class="sref">init8(new-detail->_lock);
 166);
(&a8"+code=key" class="sref"8>key<89sref">detail->gotohash_8lock<89p" class="sread */a>        if (cache_detailin  166 118s="line" name="L95">  958 89d" class="sref="+code=flags"rer_lock);
cache_detailmappingcode t}
 171hp = &(* 165     mutex ="L1651/a>        if (cache_detailin  166cache_head8 *match(<8a hre89="L118"> 118< href="+code=detail" crer_lock);
cache9is_expired(cache9i/a>        init9f="+c90ref">="net/sf="+code=flags"DECLARE_WAIT_QUEUE_HEAD_lock);
f="+code=flags">);
< waline" name="L137">);
< waliche_ cache_head *<9         9                  166 144struct );
 * *);
 *write_unl9 5       9 ock" class="sref">hash_9 id="90p" class="sre        ache>detail< ef="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *_lock);
  959cache906ref=f">alloc();
hp = &(*];
 166 165     mas5che_cache_head9class908me="L170"> 1="ss="sref">cache_is_ehref="eta>er_lock);
 166;
match(<9"+cod90="L118"> 118<44"> 144struct );
<" claead *);
 1091tail"     cache9ef">tmp;
cache_ipol=_waline" name="L137"pol=_wali1f="+code=flags"filp(struct         if ();
< waline" name="L137">);
< waliche_ cad *                }
new->detail<=pan class="comment"> assalwaysallow write *     }
 113        * 165     mas5che_ =cf="+code=flags"POLL_OUT                 old 165     mas5che_hash_lock<9a>);
91ew" c">alloc();
 118<4struct /a>        if ();
<              );
<     che_ ca9he_put(cache9c#L120" id="L120" class=9line"92e_init" classfortaf="+code=flags"r/_lock);
        if ( 166);
        if ();
 166        if (_lock);
 166);
);
<" clnew<9a>;
<92ref">new-><      if ();
}
 166 *);
 144struct );
<" cl c}
EXPORT_SYMBOL9GPLdetail->detail->);
 166er_lock);
erche_c f">alloc();
sunrpc_cache_lookup<9a>);
92t/sunrpc/cachhhhhhhhhhhhhhhhhad * 165     mas5che_ |=cf="+code=flags"POLLIN          129
92p" class="sre        ache>detbetak, struct cacherpc/cache.c#L141" id="L141" cla9"7       9ode=ch" class="sref">ch<9a>);
92>];
 165     spin ="L1651/a>        if ();
<              );
<     che_ head,  1 href="+code=detail" cmas5"> 165     mas5che_expiry<9a>)
<92="L11rpc/cache.c#L141" id="L141" cla9ad-&g9;cache9" class="sref">last_refr9sh 166 144struct cache_detailin  *cache_detailin      h44"> 144struct );
 *smp_wmb<9a>();93ref">new-> 166_lock);
cache_is_eargf">cache_detailargche_      , &detail->cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *_lock);
flags);
<93t/sunf">alloc();
 1339/a>}
93p" class="sredamee="L166"> 166 171cache_is_ehref="eta>er_lock);
 166;
cache_is_ehref=">);
<_lock);
 *);
detail<9a>)
<93ew" c">alloc();
 166_lock);
 166);
->head);
new-f="+code=flags"spin              /a>        if ();
<              );
<     che_  141     9  }
<94ead" class="sref">cache_head *<9r        9="line" name="L142"> 1429/a>}
94t/sunrpc/cachapan class="comment"> assonly find the lengthh hmainingsi clurrnt" et/sunr,    }
 s>cache_head * s>hash<9a>)
<94" class="sreffortaf="+code=flags"r/_lock);
        if ( 166);
        if ();
 166        if (_lock);
 166);
);
<" cl        n      if ();
}
 166 *);
 144struct );
<" cl c}
 148 118     detail->);
 166er_lock);
erche_c f">alloc();
 1950_init" class>new<="ss="sref">cache_is_ehref="et/sunr_lock);
alloc();
 11111111eeeeeeeeeeeeeeeeead * 171}
 144struct new-> 166 171 *);
 166 171 166);
detail->tmp9/a>;
95t/sunrpc/cachhhhhhhhhrpc/cache.c#L141" id="L141" cla92123" cla9LID, & 165     spin ="L1651/a>        if ();
<              );
<     che_  119p;cache_head *997       9LID, &);
}
 171 166);
cache_is_eargf">cache_detailargche_ , &, &  pc/cache.c#L141" id="L141" cla9flags9;
 166 17144"> 144struct cache_detailin  *cache_detailin  144struct );
 *ca9lass="sref">update(<9 href96ame="L170"> 11111111eef">ne="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *_lock);
old<9a>, f">alloc();
detail<44"> 144struct er1 * 1696p" class="sredetail->_lock);
->);
}
 166);
 119ef">old;
cache href="-f="+code=flags"EACCES         ];
 171}
cache_detailin  *hash_lock);
 166cache_detailf_m   ce="L166"> 166);
alloc();
 1696="L118"> 118     nd *4izeofaead *9mp = ->ca9c#L170" id="L170" class=9line"97ame="L170"> 11111111eeeeeeeee href="-f="+code=flags"ENOMEM         old<9f">cache_put(new-> 166);
detail->      if ( 166);
 *er_lock);
erche_ =c1NULL;
cache_is_eatomic_inc(struct /a>        if (_lock);
 166er;
/a>        if ();
<              );
<     che_  119 cachef="+code=flags"linr ad>_lock);
1/a>        if ( 166);
 *        if (_lock);
 166);
);
<" cl old * 165     spin ="L1651/a>        if ();
<              );
<     che_ 978me="L170"> 1rpc/cache.c#L141" id="L141" cla9s9       9s="sref">tmp;
 118<4struct  166;
9  78                9}
ca9amp;old<9name="L81">  81     9       9g, insert an empty entry9 */ 166 144struct cache_detailin  *cache_detailin  144struct );
 *new = cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *_lock);
alloc();
 119" id="L85" class="line" 9name=98d" class="sre="ss="sref">cache_is_ehref="eta>er_lock);
 166;
  869 98     unlock" class="sref">write_unl9mCACHE_NE9"L87" class="line" name=9"L87"98de=h" class="detaf="+code=flags"rp(struct alloc();
 118     nd */a>        if ();
<              );
<     che_  166);
alloc();
ca9         11111111eeeeeeeee="ss="sref">cache_is_ehref=">);
<_lock);
 *);
old<9t" class="sref">init9(new->);
        if ( 166);
        if ();
 166        if (_lock);
 166);
);
<" clkey<99sref">detail-> 118     nd *);
}
 166 *);
 144struct );
<" cl c}
->);
 166er_lock);
erche_c f">alloc();
hash_9lock<99p" class="sre        ache>detgt; 118     nd * 171}
 144struct alloc();
 119s="line" name="L95">  959 99d" class="sref">cache>detail< effffffffffffffffffffff" name="L166"> 166er;
hp = &(*oldcache_head9 *new<<<<<<<<<<<<<<<<match(<9a hre99="L118"> 118     s> 166);
cache10ef">s="sref">match(<10ef">10ef"L118"> 118     rpc/pre>
s="srefdomatccach2d/3b/3c99db4b115972939cebad16f2694e2a8056_3/10ef"> href="net/sunrpc/cache.c#L1010e1">cache10e/a>         11111111ef="+code=flags"linr de=cache_head" clalinr de=1/a>        if ( 166);
 *cache10e" class="sref">init10e" >10eref">new-> 165     spin ="L1651/a>        if ();
<              );
<     che_ cache10e+code=key" class="sref"10e+c>10eead" class="sref">cache_head *<10e4">cache10emp;cache_is_efilp(struct  166;
cache10eock" class="sref">hash_10eoc>10ep" class="sre        f="+code=flags"kfre<_lock);
}
cache10e="line" name="L95">  9510e=">10ehead" class="sref">cache_head *10e7">cache10ef">hp = &(*10e" class="sref">old *_lock);
 166);
 cache10es="sref">cache_head10es=>10eew" class="sref">newcache_is_eatomic_dec(struct /a>        if (_lock);
 166er;
cache10elass="sref">match(<10ela>10e="L118"> 118cache10" class="line" name="L1010" c>10" "L118"> 118<4struct );
}
 166);
cache10ef">tmp;
10"e_init" class href="0cache10/a>                }
>10"ref">rpc/cache.c#L141" id="L141" cla10"3">cache10sref">new->10"ead" class="sref">cache_head *<1014">cache1013"> 113        *10"t/suna href="net/sunrpc/cache.c#L1010"5">cache10     cache10        cache_is_ehref="+c>);
<_lock);
 144struct  144struct  *alloc();
cache10p;10">];
alloc();
cache10 class="sref">hash_lock<10 cl>10"8me="L170"> 1="ss="sref">cache_is_ehref=">);
<_lock);
 *);
cache10118" id="L118" class="li10118>10"="L118"> 118<4struct /a>        if ();
<              );
<     che_ cache10he_put( 118<4struct }
 166);
);
<" cl c}
cache10c#L120" id="L120" class=10c#L>10hame="L170"> 11111111enftail->);
 166er_lock);
erche_c f">alloc();
cache10e=new" class="sref">new<10e=n>10href">new->cache_is_ehref="et/sunr_lock);
 171}
 144struct cache10ass="sref">EXPORT_SYMBOL10ass>10hsref">detail-> 118nftae="L166"> 166);
 166cache_detailitemche_ !=cad *alloc();
cache10ef">sunrpc_cache_lookup<10ef">10ht/sunrpc/cachhhhhhhhhhhhhhhhhegt;cache10s="line" name="L123"> 1210s=">10hp" class="sre        ache>detnftae="L166"> 166);
 166er;
alloc();
cache10a>, struct cache>detail< effffffcontinuecache10ode=ch" class="sref">ch<10ode>10h" class="sref">old/a>        if ();
 166);
 *cache10f">head, >10hew" class="sref">new<<<<<<<< 165     spin ="L1651/a>        if ();
<              );
<     che_ cache10ry" class="sref">expiry<10ry">10h="L118"> 118     s>}
 166cache_detailitemche_ c}
cache10; 118     s>);
}
 166 171cache10" class="sref">last_refr10" c>10;ame="L170"> 11111111eeeeeeeeef="+code=flags"kfre<_lock);
}
cache10b" class="sref">smp_wmb<10b" >10;ref">new->cache10LID, &detail->rpc/cache.c#L141" id="L141" cla1034">cache10gs" class="sref">flags10;t/sunrpc/cachad * 165     spin ="L1651/a>        if ();
<              );
<     che_ cache10="line" name="L133"> 13310="l>10;5ef">rpc/cache.c#L141" id="L141" cla1036">cache10(struct cache_head *1037">cache10 as    }
cache10il" class="sref">detail<10il">10;8 claapan class="comment">  * Support routineseforttext-based upcal=s.    }
cache10G, &  * Fields are separated by    c s.    }
cache10=cache_revisit_request" 10=ca>10=c claapan class="comment">  * Fields are either mangled to quote    c  tab newsit_ slosh with slosh    }
cache10he_dequeue(  * orthreexified with a lha>ings\x    }
cache10ss="sref">head);
10=2 claapan class="comment">  * Record istterminated with newsit_.    }
cache10ame="L141"> 141     10ame>10=3 claapan class="comment">  *    }
cache10="line" name="L142"> 14210="l>10=4 claapan class="comment">  *     }
cache10cache10">cache_head *c>10=head"voidsref">cache_is_eqword ad>_lock);
1char"*ead * * *);
alloc();
cache10hash" class="sref">hash<10has>10=>];
alloc();
cache10 147        10=ew" class="srchar"*ad * *cache10L148"> 14810=href="net/sunnamee="L166"> 166 171 *cache109" class="line" name="L1109" >109"w" class="srchar"}
cache10et/sunrpc/cache.c#L150" 10et/>109ame="a href="net/sunrpc/cache.c#L101092">cache10struct new-detae="L166"> 166 171cache10   struct cache_head *<1054">cache10de=tmp" class="sref">tmp10de=>109t/sunrpc/cachwhile (>}
 166 171alloc();
cache10LID, &);
alloc();
cache10p;109d" class="sref">cachecasehapan class="cstringf>' '    }
<:a href="net/sunrpc/cache.c#L161097">cache10LID, &oldcache10ATIVE, &109ew" class="sref">newcache10ATIVE, &109="L118"> 118     casehapan class="cstringf>'\\'    }
<:a href="net/sunrpc/cache.c#L16106f">cache10;
 166 171alloc();
cache10lass="sref">update(<10las>10;ame="L170"> 11111111eeeeeeeeeeeeeeeee*ad *cache10a>, ,>10;ref">new-> *);
  c0300)>>6 cache10p;10;sref">detail-> 118     eee*ad *);
  c0070)>>3 cache10esh_unlocked(10;t/sunrpc/cachhhhhhhhhhhhhhhhhegt; *);
  c0007)>>0 cache10" class="line" name="L1610" c>10;p" class="sre        ache>detrpc/cache.c#L141" id="L141" cla1066">cache10ef">old;
10;d" class="sref">cache>detail 166 171cache10p;10;" class="sref">oldcache10ref">hash_lock);
10;ew" class="sref">newcache10" class="line" name="L1610" c>10;="L118"> 118     s> *cache10mp = cache>detail 166 171cache10c#L170" id="L170" class=10c#L>10mame="L170"> 11111111erpc/cache.c#L141" id="L141" cla1072">cache10f">cache_put(>10mref">new-detae="L166"> 166);
 171 166 171cache10="L172" class="line" nam10="L>10msref">detailalloc();
cache10ass="sref">NULL;
10mt/sunrpc/cachhhhhhhhh*ad *cache10  1" class="sref"54ref="10  1>10mp" class="sre        f="+code=flags"len="L171"> 171cache10 10md" class="srerpc/cache.c#L141" id="L141" cla1077">cache10amp;cache10L77" class="line" name="10L77>10m8 class="srefead * 171cache10s="sref">tmp;
cache10  78                10  7>10   claa="+code=flags"EXPORT_SYMBOL_GPL         }
cache10amp;cache10name="L81">  81     10nam>10 2ead"voidsref">cache_is_eqword ad>hex_lock);
hex1char"*ead * * * 171 166 171alloc();
cache10g, insert an empty entry10g, >10 3];
alloc();
cache10>new =  * *cache10/cache.c#L84" id="L84" c10/ca>10 p" class="sredamee="L166"> 166 171 *cache10" id="L85" class="line" 10" i>10 head" class="sref">cache_head *1087">cache10s="line" name="L86">  8610s=">10 " class="srefdetae="L166"> 166 171cache10"L87" class="line" name=10"L8>10 ew" c">alloc();
cache10he.c#L88" id="L88" class10he.>10 href="net/sunnftae="L166"> 166 171alloc();
cache10ef="net/sunrpc/cache.c#L10ef=>10ef/sunrpc/cachhhhhhhhh*ad *cache10         11111111e*ad *cache10t" class="sref">init10t" >10eref">new-> 171cache10"+code=key" class="sref"10"+c>10esref">detail->while (e="L166"> 166 171  /a>  ce="L166"> 166 171alloc();
cache10amp; 171cache10lock" class="sref">hash_10loc>10ep" class="sre        ache>det*ad *);
  0xf0)>>4) + (}
'a'    }
<-npan class="cstringf>'9'    }
<-1 cache10s="line" name="L95">  9510s=">10ed" class="sref">cache>detail<*ad *);
  0x0f) + (>}
'a'    }
<-npan class="cstringf>'9'    }
<-1 cache10ef">hp = &(*10e" class="sref">old 171cache10ss="sref">cache_head10ss=>10eew" class="sref">new<<<<<<<< 171cache10class="sref">match(<10cla>10e="L118"> 118     rpc/cache.c#L141" id="L141" cla11ef">cache11ef">s="sref">match(<11ef">11ef"L118"> 118cache11e/a>         1nftae="L166"> 166 171 171 166 171cache11e" class="sref">init11e" >11eref">new-elsehf">alloc();
cache11e+code=key" class="sref"11e+c>110sref">detail->*ad *cache11emp;cache_is_elen="L171"> 171cache11eock" class="sref">hash_11eoc>11ep" class="srerpc/cache.c#L141" id="L141" cla11e6">cache11e="line" name="L95">  9511e=">110d" class="sreead *cache11ef">hp = &(*110" class="srefead * 171cache11es="sref">cache_head11es=>110ew" crpc/cache.c#L141" id="L141" cla1109">cache11elass="sref">match(<11ela>11e="L11a="+code=flags"EXPORT_SYMBOL_GPL         }
cache11" class="line" name="L1011" c>111tail"     cache11ef">tmp;
111e_ini="net/svoidsref">cache_is_ewarn_no_linrener_lock);
44"> 144struct alloc();
cache11/a>                }
>111ref">f">alloc();
cache11sref">new->1113me="L170"> 1nftae="L166"> 166 166 171 * 166alloc();
cache1113"> 113        *111t/sunrpc/cachhhhhhhhhref">cache_is_e+ctai=cache_head" cla+ctai=che_" name="L166"> 166 171 * 166cache11      166 166);
alloc();
cache11        cache>detail 166 166);
 166 166cache11p;111" class="srefrpc/cache.c#L141" id="L141" cla11"8">cache11 class="sref">hash_lock<11 cl>111ew" crpc/cache.c#L141" id="L141" cla11"9">cache11118" id="L118" class="li11118>111/a>  pc/cache.c#L141" id="L141" cla11rf">cache11he_put(struct 44"> 144struct alloc();
cache11c#L120" id="L120" class=11c#L>11hame="f">alloc();
cache11e=new" class="sref">new<11e=n>112ref">new-detae="L166"> 166cache_head" claatomic_rha>1/a>        if ( 166er;
alloc();
cache11ass="sref">EXPORT_SYMBOL11ass>11hsref">detail-> href="+code=detail" c4">h         hche_cache11ef">sunrpc_cache_lookup<11ef">11ht/sunrpc/cachnftae="L166"> 166 166alloc();
cache11s="line" name="L123"> 1211s=">11hp" class="sre        apan class="comment"> as This f="ne was never opened *     }
cache11a>, struct cache href="+code=detail" cfal h         cache11ode=ch" class="sref">ch<11ode>112" class="srefdetae="L166"> 166 166 166);
  - 30 ">alloc();
cache11f">head, >11hew" class="sref">new as    }
cache11ry" class="sref">expiry<11ry">1129 claapan class="comment">                  * We alloweforttne possibilityttnat someone might    }
cache11;                  * re="nrt a user   c  daemon without re="nrtingstne    }
cache11" class="sref">last_refr11" c>1131 claapan class="comment">                  * server; but after 30 seconds, we give up.    }
cache11b" class="sref">smp_wmb<11b" >1132 claapan class="comment">                  *     }
cache11LID, &detail->e href="+code=detail" cfal h         cache11gs" class="sref">flags11;t/sunrpc/cach href="+code=detail" c4">h         hche_cache11="line" name="L133"> 13311="l>11;5ef">rpc/cache.c#L141" id="L141" cla1136">cache11(struct cache_head *1137">cache11 as    }
cache11il" class="sref">detail<11il">11;8 claapan class="comment">  * reginrer n cupcal= et/sunr to user-   c  and >);
< itcupefortrha>>  bystne    }
cache11G, &  * upcal= daemon.    }
cache11=cache_revisit_request" 11=ca>11=c claapan class="comment">  *    }
cache11he_dequeue(  * Ehe. et/sunr is at monr one page long.    }
cache11ss="sref">head);
11=2 claapan class="comment">  *     }
cache11ame="L141"> 141     11ame>11=3 cladamee="L166"> 16644"> 144struct  144struct  *cache11="line" name="L142"> 14211="l>114t/sunrpc/cachhhhhhhhhvoidsaead *44"> 144struct cache11 144struct cache11">cache_head *c>114d" class="sref">cache>detail< effffffffffffchar"*e      cache11hash" class="sref">hash<11has>114" class="sref">oldalloc();
cache11 147        11=ew" cf">alloc();
cache11L148"> 148114/a>  pc/cache.c#L141" id="L141" cla115f">cache119" class="line" name="L1119" >119"w" class="srchar"ead * 171cache11et/sunrpc/cache.c#L150" 11et/>115ame="L170"> 1="ss="sref">cache_is_ehref="et/sunr_lock);
cache11struct new-char"*ad *cache11   struct  1namee="L166"> 166 171cache11de=tmp" class="sref">tmp11de=>115t/suna href="net/sunrpc/cache.c#L101155">cache11LID, &alloc();
cache11p;119d" class="sref">cachee="L166"> 166);
 166cache11LID, &oldcache11ATIVE, &1158me="L170"> 1rpc/cache.c#L141" id="L141" cla1159">cache11A148"> 148115/a>  pc/cache.c#L141" id="L141" cla116f">cache11;
 171 *);
 166);
cache11lass="sref">update(<11las>116ame="L170"> 1nftail-> 171cache11a>, ,>11;ref">new->cache11p;116ead" class="sref">cache_head *<1164">cache11esh_unlocked(116t/sunrpc/cachad *);
 *);
 *);
cache11" class="line" name="L1611" c>116p" class="srenftail->);
alloc();
cache11ef">old;
11;d" class="sref">cachead *);
}
 171cache11p;11;" class="sref">oldcache11ref">hash_lock);
1168me="L170"> 1rpc/cache.c#L141" id="L141" cla1169">cache11" class="line" name="L1611" c>116/a>  pc/cache.c#L141" id="L141" cla117f">cache11mp =  171 166 171 166);
cache11c#L170" id="L170" class=11c#L>117ame="a href="net/sunrpc/cache.c#L101172">cache11f">cache_put(>11mref">new-ref">cache_is_ehref="et/sunr_lock);
 166        if (        if ( 171cache11="L172" class="line" nam11="L>117ead" class="sref">cache_head *<1174">cache11ass="sref">NULL;
117t/sunrpc/cachnftae="L166"> 166 171alloc();
cache11  1" class="sref"54ref="11  1>11mp" class="sre        f="+code=flags"kfre<_lock);
}
 171cache11 117d" class="sref">cachead *);
}
cache11amp;oldcache11L77" class="line" name="11L77>1178me="L170"> 1rpc/cache.c#L141" id="L141" cla11m9">cache11s="sref">tmp;
 118<4struct );
 166);
 *er_lock);
erche_ =c0cache11  78                11  7>118
" class="sread *);
 166cache_detailitemche_ = n
);
cache11amp; 166 171 * 171cache11name="L81">  81     11nam>118ref">new-ref">cache_is_ehr/_lock);
 166 171 166);
 166 171cache11g, insert an empty entry11g, >1183ef">new-ref">cache_is_ehr/_lock);
 166er;
cache11>new = cache11/cache.c#L84" id="L84" c11/ca>11 p" class="sree="L166"> 166/a>        if ();
 166);
 *        if ( 166);
);
<" cl cache11" id="L85" class="line" 11" i>1186/sunrpc/cachad * 165     spin ="L1651/a>        if ();
<              );
<     che_ cache11s="line" name="L86">  8611s=">11 " class="srefe="L166"> 166);
/a>        if ();
< wair(struct );
< wairche_ cache11"L87" class="line" name=11"L8>1188me="L170"> 1 href="0cache11he.c#L88" id="L88" class11he.>118="L11rpc/cache.c#L141" id="L141" cla119f">cache11ef="net/sunrpc/cache.c#L11ef=>119  claa="+code=flags"EXPORT_SYMBOL_GPL         }
);
cache11        cache11t" class="sref">init11t" >1192 claapan class="comment"> as    }
cache11"+code=key" class="sref"11"+c>1193 claapan class="comment">  * parse a message from user-   c  and pss= it    }
cache11amp;  * to n cappropriate f="ne    }
cache11lock" class="sref">hash_11loc>11ep" clapan class="comment">  * Messages are, like et/sunrs, separated into fields by    }
cache11s="line" name="L95">  9511s=">11ed" clapan class="comment">  *    c s and +c>)ot s as \xHEXSTRING ortembedded \nnn octal    }
cache11ef">hp = &(*119" claapan class="comment">  *    }
cache11ss="sref">cache_head11ss=>1198 claapan class="comment">  * Message is    }
cache11class="sref">match(<11cla>1199 claapan class="comment">  *  1 hply f="nehcache12ef">s="sref">match(<12ef">120c claapan class="comment">  *    }
cache12e/a>          * key and contnt" are both parsed by f="ne    }
cache12e" class="sref">init12e" >1202 claapan class="comment">  *     }
cache12e+code=key" class="sref"12e+c>120ead" class="sref">cache_head *<12e4">cache12emp; 166}
}
 166);
cache12eock" class="sref">hash_12eoc>12ep" clnamee="L166"> 166);
char"*ead * *);
 166 171cache12e="line" name="L95">  9512e=">120d" clf">alloc();
cache12ef">hp = &(*120" class="srefapan class="comment"> as  href="byt s copied, ort-1 on errort*     }
cache12es="sref">cache_head12es=>120ew" class="srchar"*ad * *cache12elass="sref">match(<12ela>120href="net/sunnamee="L166"> 166 171cache12" class="line" name="L1012" c>121tail"     cache12ef">tmp;
1211" class="srewhile (*ad * 166cache12/a>                }
>121ref">a href="net/sunrpc/cache.c#L101213">cache12sref">new->1213me="L170"> 1nftae="L166"> 166 166alloc();
cache1213"> 113        *121t/sunrpc/cachhhhhhhhhrpan class="comment"> as HEX STRING *     }
cache12     cache12        cachewhile (e="L166"> 166 171 166 171alloc();
cache12p;121" class="sref">old 166 166 171cache12 class="sref">hash_lock<12 cl>121ew" c">alloc();
cache12118" id="L118" class="li12118>121="L118"> 118     s> 166 171}
cache12he_put( 166cache12c#L120" id="L120" class=12c#L>122ame="L170"> 11111111eeeeeeeeeeeeeeeeebetakcache12e=new" class="sref">new<12e=n>122ref">a href="net/sunrpc/cache.c#L101223">cache12ass="sref">EXPORT_SYMBOL12ass>12hsref">detail->s> 171 166 171}
cache12ef">sunrpc_cache_lookup<12ef">122t/sunrpc/cachhhhhhhhhhhhhhhhhnftae="L166"> 166 171cache12s="line" name="L123"> 1212s=">12hp" class="sre        eeeeeeeeeeeeeeeebetakcache12a>, struct cache_head *1227">cache12ode=ch" class="sref">ch<12ode>122" class="sref">old *);
 166 171cache12f">head, >12hew" class="sref">newcache12ry" class="sref">expiry<12ry">122="L118"> 118     s> 171cache12; 118     rpc/cache.c#L141" id="L141" cla1231">cache12" class="sref">last_refr12" c>12;ame="L170"> 1}-elsehf">alloc();
cache12b" class="sref">smp_wmb<12b" >12;ref">new-> as text with \nnn octal quotings*     }
cache12LID, &detail->while (*ad *'\n'    }
< /a>  /a>  c*ad *  /a>  ce="L166"> 166 171 166 171alloc();
cache12gs" class="sref">flags123t/sunrpc/cachhhhhhhhhhhhhhhhhnfta*ad *alloc();
cache12="line" name="L133"> 13312="l>123p" class="sre        eeeeeeeeeeeee="L166"> 166}
alloc();
cache12(struct cache>detail< effe="L166"> 166}
alloc();
cache12old 166}
alloc();
cache12il" class="sref">detail<12il">123ew" class="sref">new 166 171 *cache12G, & 118     s> 166cache12=cache_revisit_request" 12=ca>124
" class="sre        ache>detaaaaaaaae="L166"> 166 171 166 171 *cache12he_dequeue( 11111111eeeeeeeeeeeeeeeeee="L166"> 166 171 166 171 *cache12ss="sref">head);
124ref">new-> *);
 166 171cache12ame="L141"> 141     12ame>124sref">detail-> 118     eeef="+code=flags"len="L171"> 171cache12="line" name="L142"> 14212="l>124t/sunrpc/cachhhhhhhhhhhhhhhhh}-elsehf">alloc();
cache12cache12">cache_head *c>124d" class="sref">cache>detail< efffffff="+code=flags"len="L171"> 171cache12hash" class="sref">hash<12has>124" class="sref">oldcache12 147        124ew" class="sref">newcache12L148"> 148124="L118"> 118cache129" class="line" name="L1129" >125tail"     cache12et/sunrpc/cache.c#L150" 12et/>125ame="L170"> 1nfta*ad *'\n'    }
< /a>  /a>  c*ad *cache12struct new->cache12   struct  1while (*ad * 166cache12de=tmp" class="sref">tmp12de=>125t/sunrpc/cachead *cache12LID, &'\0'    }
<cache12p;129d" class="sre href="+code=detail" clen="L171"> 171cache12LID, &cache12ATIVE, &1258me="+code=detail" cEXPORT_SYMBOL_GPL         }
cache12A148"> 148125/a>  pc/cache.c#L141" id="L141" cla126f">cache12;
cache12lass="sref">update(<12las>1261 claapan class="comment"> as    }
cache12a>, ,>1262 claapan class="comment">  * support /procunrpc/cache.c/$CACHENAME/contnt"    }
cache12p;1263 claapan class="comment">  * as a seqfile.    }
cache12esh_unlocked(1264 claapan class="comment">  * We f=ll " namhref="show pss=ingsNULLeforttne item to    }
cache12" class="line" name="L1612" c>126p" clapan class="comment">  * ger a hha>er,ttnen pss= eae. etal item inttne f="ne    }
cache12ef">old;
126d" clapan class="comment">  *     }
cache12p;12;" claa href="net/sunrpc/cache.c#L161268">cache12ref">hash_lock);
1268me="="ss="sref">cache_is_ehandle="L171"> 171alloc();
cache12" class="line" name="L1612" c>126="L118"> 118<44"> 144struct cache12mp = cache12c#L170" id="L170" class=12c#L>127ame="a href="net/sunrpc/cache.c#L101272">cache12f">cache_put(>12mref">="net/svoidsead * 144struct  *cache_detailmche_ he="L166"> 166 *;
cache12="L172" class="line" nam12="L>1273ef">new-ref">cache_is_e__acquire;
cache_head" clahdcode" name="L166"> 166cache12ass="sref">NULL;
127t/sunf">alloc();
cache12  1" class="sref"54ref="12  1>127p" class="sree="L166"> 166 166 171 *;
cache12 127d" class="sreunsignednnamee="L166"> 166 166cache12amp; 144struct  *cache12L77" class="line" name="12L77>1278me="L170"> 144"> 144struct 44"> 144struct  171 *cache_detailmche_" name="L166"> 166 171 166cache_head" clahdcodecache12s="sref">tmp;
cache12  78                12  7>128tail"     cache12amp; 166cache12name="L81">  81     12nam>128ref">new-detail-> 171cache12g, insert an empty entry12g, >128sref">detail-> href="+code=detail" cSEQ_START_TOKEN         cache12>new =  171cache12/cache.c#L84" id="L84" c12/ca>12 p" class="sree="L166"> 166 171  c>(1LL<<32  - 1 cache12" id="L85" class="line" 12" i>128head" class="sref">cache_head *1287">cache12s="line" name="L86">  8612s=">12 " class="sreffort>}
 166 171 * 166 166 166cache12"L87" class="line" name=12"L8>128ew" class="sref">new->cache12he.c#L88" id="L88" class12he.>128="L118"> 118     s>cache12ef="net/sunrpc/cache.c#L12ef=>129
" class="sread * 171  = ~>(1LL<<32  - 1 cache12        alloc();
cache12t" class="sref">init12t" >129ref">new-> *cache12"+code=key" class="sref"12"+c>129sref">detail->ad * 171cache12amp; 166 166cache_head" clahdcode" name="L166"> 166 171  /a>  ">alloc();
cache12lock" class="sref">hash_12loc>129p" class="sre        ad *cache_head" clahdcode" name="L166"> 166 171 *cache12s="line" name="L95">  9512s=">129d" class="srenftae="L166"> 166 166cache_head" clahdcode" name="L166"> 166 171cache12ef">hp = &(*129" class="sref">oldcache12ss="sref">cache_head12ss=>129ew" class="sread *;
 171cache12class="sref">match(<12cla>129="L118"> 118< href="+code=detail" cc>cache_head" clahdcode" name="L166"> 166 171 *cache13ef">s="sref">match(<13ef">130c clarpc/cache.c#L141" id="L141" cla13e1">cache13e/a>        cache13e" class="sref">init13e" >130ref">="net/svoidsead *44"> 144struct  *cache_detailmche_ hvoidsead * 166 *;
cache13e+code=key" class="sref"13e+c>130ead" f">alloc();
cache13emp; 144struct  *cache13eock" class="sref">hash_13eoc>130p" class="srenamee="L166"> 166 *;
cache13e="line" name="L95">  9513e=">1306/sunrpc/cach44"> 144struct 44"> 144struct  171 *cache_detailmche_" name="L166"> 166 171 166cache_head" clahdcodecache13ef">hp = &(*130" claa href="net/sunrpc/cache.c#L1613e8">cache13es="sref">cache_head13es=>130ew" class="srnftae="L166"> 166cache13elass="sref">match(<13ela>130="L118"> 118     e="L166"> 166cache13" class="line" name="L1013" c>131
" class="sreelsehnftae="L166"> 166 166alloc();
cache13ef">tmp;
131ame="L170"> 11111111erd *cache13/a>                }
>131ref">new-> *;
cache13sref">new->1313me="L170"> 1}-elsehf">alloc();
cache1313"> 113        *131t/sunrpc/cachhhhhhhhh++ead *;
cache13      166cache13        cache13p;131" class="sref*ad *;
cache13 class="sref">hash_lock<13 cl>131ew" class="srwhile (e="L166"> 166 166cache_head" clahdcode" name="L166"> 166 171  /a>  ">alloc();
cache13118" id="L118" class="li13118>131="L118"> 118    +code=detail" cc>cache_head" clahdcode" name="L166"> 166 171 *alloc();
cache13he_put(cache13c#L120" id="L120" class=13c#L>132ame="L170"> 11111111e*ad *;
cache13e=new" class="sref">new<13e=n>1322" class="srerpc/cache.c#L141" id="L141" cla1323">cache13ass="sref">EXPORT_SYMBOL13ass>1323me="L170"> 1nftae="L166"> 166 166cache_head" clahdcode" name="L166"> 166 171cache13ef">sunrpc_cache_lookup<13ef">132t/sunrpc/cachhhhhhhhh href="      if (cache13s="line" name="L123"> 1213s=">13hp" class="sre++ead *;
cache13a>, struct cache_head" clahdcode" name="L166"> 166 171 *cache13ode=ch" class="sref">ch<13ode>132" clarpc/cache.c#L141" id="L141" cla1328">cache13f">head, >132ew" c">alloc();
cache13ry" class="sref">expiry<13ry">132="L11="net/svoidsad *44"> 144struct  *cache_detailmche_ hvoidsead *cache13;+code=detail" cc>cache_head" clahdcode" name="L166"> 166cache13" class="sref">last_refr13" c>13;ame="f">alloc();
cache13b" class="sref">smp_wmb<13b" >13;ref">new-44"> 144struct 44"> 144struct  171 *cache_detailmche_" name="L166"> 166 171 166cache_head" clahdcodecache13LID, &new-ref">cache_is_erha> ="L165"> 165     rha> ="L1651/a>        if (cache_head" clahdcode" name="L166"> 166cache13gs" class="sref">flags133t/sunrpc/cache.c#L141" id="L141" cla1335">cache13="line" name="L133"> 13313="l>133p" clpc/cache.c#L141" id="L141" cla1336">cache13(struct  16644"> 144struct  *cache_detailmche_ hvoidsead *cache13alloc();
cache13il" class="sref">detail<13il">1338me="L170"> 144"> 144struct  *cache13G, & 118<44"> 144struct 44"> 144struct  171 *cache_detailmche_" name="L166"> 166 171 166cache_head" clahdcodecache13=cache_revisit_request" 13=ca>134tail"     cache13he_dequeue( 1nftae="L166"> 166cache13ss="sref">head);
134ref">new->cache_head" clahdcode" name="L166"> 166cache_detailmche_ h+code=detail" cc>cache_head" clahdcode h+code=detail" cNULL         cache13ame="L141"> 141     13ame>134ead" class="sref">cache_head *<13=4">cache13="line" name="L142"> 14213="l>134t/sunrpc/cachad *ad *cache13 171ad *cache_detailmche_ h+pan class="cstringf>"# expiry=%ldh hfcnt=%d flags=%lx\n"    }
<,a href="net/sunrpc/cache.c#L101346">cache13">cache_head *c>134d" class="sref">cache>detail< ef+code=detail" cconvert_to_wallc             +code=detail" ccp(struct  166 171cache13hash" class="sref">hash<13has>134" class="sref">oldcache_head" claatomic_rha>1/a>        if ( 166 165     rhf1 * 166cache13 147        134ew" class="sre="L166"> 166);
cache13L148"> 148134="L118"> 118 166cache_head" clahdcode,f+code=detail" ccp(struct cache139" class="line" name="L1139" >135
" class="sre        rpan class="comment"> as cref="ef=   do s a cref="put on fai=ure *     }
cache13et/sunrpc/cache.c#L150" 13et/>135ame="L170"> 11111111erd * 171ad *cache_detailmche_ h+pan class="cstringf>"# "    }
< cache13struct new-elsehf">alloc();
cache13   struct detail->nftae="L166"> 166cache_head" clahref="is_expire>1+code=detail" cc>cache_head" clahdcode,f+code=detail" ccp(struct cache13de=tmp" class="sref">tmp13de=>135t/sunrpc/cachhhhhhhhh1111111erd * 171ad *cache_detailmche_ h+pan class="cstringf>"# "    }
< cache13LID, &cache_head" clahdcode cache13p;135d" class="srerpc/cache.c#L141" id="L141" cla1397">cache13LID, &cache13ATIVE, &1358me="L170"> 1 href="+code=detail" cc>cache_head" clahdcode" name="L166"> 166cache_detailmche_ h+code=detail" cc>cache_head" clahdcode h+code=detail" ccp(struct cache13A148"> 148135="L11rpc/cache.c#L141" id="L141" cla136f">cache13;
cache13lass="sref">update(<13las>1361 cla="net/sconst<44"> 144struct  171 166alloc();
cache13a>, ,>136ref">new-.ad *cache13p;1363ef">new-.ad *cache13esh_unlocked(1364ef">new-.ad *cache13" class="line" name="L1613" c>1365ef">new-.ad *cache13ef">old;
136d" cl}cache13p;13;" claa href="net/sunrpc/cache.c#L161368">cache13ref">hash_lock);
1368me="="net/snamee="L166"> 166 17144"> 144struct  * 144struct  *cache13" class="line" name="L1613" c>136="L118"> 118     s> 144struct cache13mp = alloc();
cache13c#L170" id="L170" class=13c#L>137ame="L170"> 1="ss="sref">cache_is_ehandle="L171"> 171 * 171cache13f">cache_put(>137ref">a href="net/sunrpc/cache.c#L101373">cache13="L172" class="line" nam13="L>1373me="L170"> 1nftail->cache_head" clahdcode || il->+code=detail" cc>cache_head" clahdcode" name="L166"> 166cache13ass="sref">NULL;
137t/sunrpc/cachhhhhhhhh href="-e="L166"> 166cache13  1" class="sref"54ref="13  1>137p" class="sree="L166"> 166 171 171+code=detail" cfilecache_head" clafileche_, /a>        if ( * 171cache13 137d" class="srenftae="L166"> 166 171alloc();
cache13amp;old *cache_head" clahdcode" name="L166"> 166cache13L77" class="line" name="13L77>137ew" class="sref">new< href="-e="L166"> 166cache13s="sref">tmp;
 118cache13  78                13  7>138tail"     cache13amp; 171 166cache_head" clahdcode = n
cache13name="L81">  81     13nam>138ref">new- href="0cache13g, insert an empty entry13g, >138sref"rpc/cache.c#L141" id="L141" cla1384">cache13>new = cache13/cache.c#L84" id="L84" c13/ca>13 p" cl="net/snamee="L166"> 166 17144"> 144struct  * 144struct  *cache13" id="L85" class="line" 13" i>138d" class="sref">cache44"> 144struct cache13s="line" name="L86">  8613s=">138" claf">alloc();
cache13"L87" class="line" name=13"L8>138ew" class="srnamee="L166"> 166);
 171+code=detail" cin  *cache13he.c#L88" id="L88" class13he.>138="L118"> 118 *cache_head" clahdcode" name="L166"> 166cache13ef="net/sunrpc/cache.c#L13ef=>139
" class="sre href="+code=detail" crer_lock);
cache13        cache13t" class="sref">init13t" >139ref">a href="net/sunrpc/cache.c#L101393">cache13"+code=key" class="sref"13"+c>139sref"="net/snamee="L166"> 16644"> 144struct  * 144struct  *cache13amp; 144struct cache13lock" class="sref">hash_13loc>139p" clf">alloc();
cache13s="line" name="L95">  9513s=">139d" class="srenftail->cache_head" clahdcode || il->+code=detail" cc>cache_head" clahdcode" name="L166"> 166cache13ef">hp = &(*139" class="sref">old 166cache13ss="sref">cache_head13ss=>1398me="L170"> 1 href="+code=detail" cnonseekable_open="L171"> 171+code=detail" cin  *cache13class="sref">match(<13cla>139="L11rpc/cache.c#L141" id="L141" cla14ef">cache14ef">s="sref">match(<14ef">140tail"     cache14e/a>         16644"> 144struct  * 144struct  *cache14e" class="sref">init14e" >140ref">new-> 144struct cache14e+code=key" class="sref"14e+c>140ead" f">alloc();
cache14emp;cache_head" clahdcode" name="L166"> 166cache14eock" class="sref">hash_14eoc>140p" class="sre href="0cache14e="line" name="L95">  9514e=">1406/sunrpc/cache.c#L141" id="L141" cla14e7">cache14ef">hp = &(*140" claa href="net/sunrpc/cache.c#L1614e8">cache14es="sref">cache_head14es=>1408me="="net/sn
 166 flush          flush144"> 144struct  * * 171cache14elass="sref">match(<14ela>140="L118"> 118               n
 166 166 *;
cache14" class="line" name="L1014" c>141
" class="sre         h"net/sue44"> 144struct cache14ef">tmp;
141ame="f">alloc();
cache14/a>                }
>141ref">new-char n
 171cache14sref">new->1413me="L170"> 1unsignednlong n
cache1413"> 113        *141t/sunrpc/cachad * 166 171cache14     cache14         171ad * 171 * 171+code=detail" cc>cache_head" clahdcode" name="L166"> 166 171cache14p;141" class="srefe="L166"> 166 171 171ad * 171cache14 class="sref">hash_lock<14 cl>141ew" class="srnftae="L166"> 166 166 171cache14118" id="L118" class="li14118>141="L118"> 118    e href="0cache14he_put( 171cache14c#L120" id="L120" class=14c#L>142ame="L170"> 1nftae="L166"> 166 171 166cache14e=new" class="sref">new<14e=n>142ref">new-> * 171cache14ass="sref">EXPORT_SYMBOL14ass>1423me="L170"> 1nftae="L166"> 166ad * 171ad * 171 171cache14ef">sunrpc_cache_lookup<14ef">142t/sunrpc/cachhhhhhhhh href="-e="L166"> 166cache14s="line" name="L123"> 1214s=">14hp" class="sreead *;
 166 171cache14a>, struct  171cache14ode=ch" class="sref">ch<14ode>142" clarpc/cache.c#L141" id="L141" cla1428">cache14f">head, >142ew" c">alloc();
cache14ry" class="sref">expiry<14ry">142="L11="net/sn
 16644"> 144struct  * * 171cache14; 166 166 *;
cache14" class="sref">last_refr14" c>143ame="L170"> 11111111eeeeeeeeeeee44"> 144struct cache14b" class="sref">smp_wmb<14b" >14;ref">f">alloc();
cache14LID, &new-char n
 171cache14gs" class="sref">flags1434ef">new-char ead * *cache14="line" name="L133"> 13314="l>143p" clpc/cache.c#L141" id="L141" cla1436">cache14(struct  166 * 171cache14old 166cache14il" class="sref">detail<14il">143ew" class="srnftae="L166"> 166ad * 171 * 171 166cache14G, & 118    e href="-e="L166"> 166cache14=cache_revisit_request" 14=ca>144
" class="sread * 171 166cache14he_dequeue(ad * 171        if (cache14ss="sref">head);
144ref">new-detaead *  /a>   ead *cache14ame="L141"> 141     14ame>144sref">detail-> href="-e="L166"> 166cache14="line" name="L142"> 14214="l>144t/sunpc/cache.c#L141" id="L141" cla1445">cache14 171cache14">cache_head *c>144d" class="sread *cache_head" clahdcode" name="L166"> 166 171cache14hash" class="sref">hash<14has>144" class="srefe="L166"> 166cache_head" clahdcode" name="L166"> 166cache14 147        144ew" class="sre="L166"> 166cache14L148"> 148144/a>  pc/cache.c#L141" id="L141" cla145f">cache149" class="line" name="L1149" >145
" class="sreead *;
 166cache14et/sunrpc/cache.c#L150" 14et/>145ame="L170"> 1 href="+code=detail" ccounr(struct cache14struct rpc/cache.c#L141" id="L141" cla1493">cache14   struct cache_head *<1454">cache14de=tmp" class="sref">tmp14de=>145t/sun="net/sn
 166 procf;
 procf<144"> 144struct  * * 171cache14LID, & 166 166 *;
cache14p;145d" clf">alloc();
cache14LID, & 144struct  *ad * 166 * 166 166cache14ATIVE, &145ew" c">alloc();
cache14A148"> 148145="L118"> 118< href="+code=detail" ccref="rea>/a>;
1ad * * 171 166 166;
cache_head" clahdcode cache14;
cache14lass="sref">update(<14las>146ame="a href="net/sunrpc/cache.c#L101462">cache14a>, ,>1462/sun="net/sn
 166;
44"> 144struct  * * 171cache14p;146sref">detail->                  n
 166 166 *;
cache14esh_unlocked(1464ef">f">alloc();
cache14" class="line" name="L1614" c>1465ef">new-44"> 144struct  *ad * 166 * 166 166cache14ef">old;
146d" cla href="net/sunrpc/cache.c#L101467">cache14p;1467"L118"> 118< href="+code=detail" ccref="write/a>;
ad * * 171 166 166;
cache_head" clahdcode cache14ref">hash_lock);
1468me="rpc/cache.c#L141" id="L141" cla1469">cache14" class="line" name="L1614" c>146/a>  pc/cache.c#L141" id="L141" cla147f">cache14mp =  166;
44"> 144struct  * 166 171 *cache14c#L170" id="L170" class=14c#L>147ame="f">alloc();
cache14f">cache_put(>147ref">new-44"> 144struct  *ad * 166 * 166 166cache14="L172" class="line" nam14="L>147ead" class="sref">cache_head *<1474">cache14ass="sref">NULL;
147t/sunrpc/cach href="+code=detail" ccref="poll/a>;
ad * *cache_head" clahdcode cache14  1" class="sref"54ref="14  1>147p" clrpc/cache.c#L141" id="L141" cla1476">cache14 147d" cla href="net/sunrpc/cache.c#L101477">cache14amp; 144struct  *cache14L77" class="line" name="14L77>147ew" class="sref">new<<<<<<<<<<<<<<< 166cache_head" clahmdcode hunsignednlong n
cache14s="sref">tmp;
alloc();
cache14  78                14  7>1480ef">new-44"> 144struct  * * 166 * 166cache14amp; 1="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166cache14name="L81">  81     14nam>148ref">a href="net/sunrpc/cache.c#L101483">cache14g, insert an empty entry14g, >1483/sunrpc/cach href="+code=detail" ccref="ioctl/a>;
ad * * *cache_head" clahmdcode hn
cache_head" clahdcode cache14>new = cache14/cache.c#L84" id="L84" c14/ca>148p" clpc/cache.c#L141" id="L141" cla1486">cache14" id="L85" class="line" 14" i>148d" cl="net/snamee="L166"> 166;
44"> 144struct  * 144struct  *cache14s="line" name="L86">  8614s=">148" claf">alloc();
cache14"L87" class="line" name=14"L8>1488me="L170"> 144"> 144struct  *ad * 166cache14he.c#L88" id="L88" class14he.>148/a>  pc/cache.c#L141" id="L141" cla149f">cache14ef="net/sunrpc/cache.c#L14ef=>149
" class="sre href="+code=detail" chref="open/a>;
ad * * *cache_head" clahdcode cache14        cache14t" class="sref">init14t" >149ref">a href="net/sunrpc/cache.c#L101493">cache14"+code=key" class="sref"14"+c>149sref"="net/snamee="L166"> 166;
44"> 144struct  * 144struct  *cache14amp;f">alloc();
cache14lock" class="sref">hash_14loc>1495ef">new-44"> 144struct  *ad * 166cache14s="line" name="L95">  9514s=">149d" cla href="net/sunrpc/cache.c#L101497">cache14ef">hp = &(*1497"L118"> 118< href="+code=detail" ccref="release="L171"> 171ad * * *cache_head" clahdcode cache14ss="sref">cache_head14ss=>1498me="rpc/cache.c#L141" id="L141" cla1499">cache14class="sref">match(<14cla>149/a>  pc/cache.c#L141" id="L141" cla15ef">cache15ef">s="sref">match(<15ef">150
" cl="net/sconst<44"> 144struct  171 166;
alloc();
cache15e/a>         1.ad * *cache15e" class="sref">init15e" >150ref">new-.ad * *cache15e+code=key" class="sref"15e+c>1503ef">new-.ad */a>;
 procf;
 procf<1cache15emp; *cache15eock" class="sref">hash_15eoc>150p" class="sre.ad *;
;
cache15e="line" name="L95">  9515e=">1506" class="sre.ad *;
 * as for FIONREAD *     }
cache15ef">hp = &(*1507me="L170"> 1.ad *;
;
cache15es="sref">cache_head15es=>1508ef">new-.ad * 171 *cache15elass="sref">match(<15ela>150="L11}cache15" class="line" name="L1015" c>151tail"     cache15ef">tmp;
1511ref"="net/snamee="L166"> 166;
44"> 144struct  * 144struct  *cache15/a>                }
>151ref">f">alloc();
cache15sref">new->1513me="L170"> 144"> 144struct  *ad * 166cache1513"> 113        *151t/sunpc/cache.c#L141" id="L141" cla1515">cache15      166;
ad * * *cache_head" clahdcode cache15        cache15p;151" claa href="net/sunrpc/cache.c#L161518">cache15 class="sref">hash_lock<15 cl>1518me="="net/snamee="L166"> 166;
44"> 144struct  * 144struct  *cache15118" id="L118" class="li15118>151="L11f">alloc();
cache15he_put(new-44"> 144struct  *ad * 166cache15c#L120" id="L120" class=15c#L>152ame="a href="net/sunrpc/cache.c#L1015h2">cache15e=new" class="sref">new<15e=n>152ref">new- href="e="L166"> 166;
ad * * *cache_head" clahdcode cache15ass="sref">EXPORT_SYMBOL15ass>152sref"rpc/cache.c#L141" id="L141" cla15h4">cache15ef">sunrpc_cache_lookup<15ef">152t/sunpc/cache.c#L141" id="L141" cla15r5">cache15s="line" name="L123"> 1215s=">152p" cl="net/sconst<44"> 144struct  171 166;
alloc();
cache15a>, struct  *;
cache15ode=ch" class="sref">ch<15ode>1527me="L170"> 1.ad */a>;
1cache15f">head, >1528ef">new-.ad * *cache15ry" class="sref">expiry<15ry">1529me="L170"> 1.ad * 171 *;
cache15;cache15" class="sref">last_refr15" c>153ame="a href="net/sunrpc/cache.c#L101532">cache15b" class="sref">smp_wmb<15b" >1532/sun="net/snamee="L166"> 166;
 144struct  * 144struct  *cache15LID, &alloc();
cache15gs" class="sref">flags1534ef">new-44"> 144struct  *ad * 166cache15="line" name="L133"> 13315="l>153p" clpc/cache.c#L141" id="L141" cla1536">cache15(struct ad * * *cache_head" clahdcode cache15cache15il" class="sref">detail<15il">153ew" c">alloc();
cache15G, & 166;
 144struct  * 144struct  *cache15=cache_revisit_request" 15=ca>154
" clf">alloc();
cache15he_dequeue( 1="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166();
cache15ss="sref">head);
154ref">a href="net/sunrpc/cache.c#L101543">cache15ame="L141"> 141     15ame>1543/sunrpc/cach href="+code=detail" crelease_flush         ad * * *cache_head" clahdcode cache15="line" name="L142"> 14215="l>154t/sunrpc/cache.c#L141" id="L141" cla1545">cache15cache15">cache_head *c>154d" cl="net/sad * 166 flush_procf;
 144struct  * * 171cache15hash" class="sref">hash<15has>154" class="sref">old * 166 166 *;
cache15 147        154ew" cf">alloc();
cache15L148"> 1481549me="L170"> 1="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166();
cache159" class="line" name="L1159" >155tail"     cache15et/sunrpc/cache.c#L150" 15et/>155ame="L170"> 1 href="+code=detail" crha> flush          flush1ad * * 171 166 166;
cache_head" clahdcode cache15struct rpc/cache.c#L141" id="L141" cla1593">cache15   struct cache_head *<1554">cache15de=tmp" class="sref">tmp15de=>155t/sun="net/sn
 166;
 144struct  *cache_head *<1555">cache15LID, & * 171cache15p;1556" class="sre                          ad * 166 166 *;
cache15LID, &alloc();
cache15ATIVE, &1558me="L170"> 144"> 144struct  *ad * 166 * 166 166();
cache15A148"> 148155/a>  pc/cache.c#L141" id="L141" cla156f">cache15;
ad * * 171 166 166;
cache_head" clahdcode cache15lass="sref">update(<15las>1561" clrpc/cache.c#L141" id="L141" cla1562">cache15a>, ,>156ref">a href="net/sunrpc/cache.c#L101563">cache15p;156sref"="net/sconst<44"> 144struct  171 166;
alloc();
cache15esh_unlocked(156t/sunrpc/cach.ad *;
cache15" class="line" name="L1615" c>1565ef">new-.ad */a>;
 flush_procf<1cache15ef">old;
1566" class="sre.ad *;
cache15p;1567me="L170"> 1.ad * 171 *;
cache15ref">hash_lock);
1568ef">new-.ad * *cache15" class="line" name="L1615" c>156="L11}cache15mp = cache15c#L170" id="L170" class=15c#L>1571ref"="net/svoidcad *;
44"> 144struct  144struct  *cache15f">cache_put(>157ref">f">alloc();
cache15="L172" class="line" nam15="L>1573me="L170"> 144"> 144struct  * 171cache15ass="sref">NULL;
157t/sunpc/cache.c#L141" id="L141" cla1575">cache15  1" class="sref"54ref="15  1>1575ef">new-nftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
 *cache15 1576" class="sre         href=cache15amp;new-nftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
cache15L77" class="line" name="15L77>157ew" class="sref">new *apan class="cstringf>"flush"    }
<,f+code=detail" cc>cache_head" clahdcode" name="L166"> 166 *;
;
cache15s="sref">tmp;
new-nftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
cache15  78                15  7>1580ef">new-ef">new *apan class="cstringf>"channel"    }
<,f+code=detail" cc>cache_head" clahdcode" name="L166"> 166 *;
;
cache15amp; 1nftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
cache15name="L81">  81     15nam>158ref">new-> *apan class="cstringf>"contnt""    }
<,f+code=detail" cc>cache_head" clahdcode" name="L166"> 166 *;
;
cache15g, insert an empty entry15g, >1583/sunrpc/cach+code=detail" cc>cache_head" clahdcode" name="L166"> 166 *;
;
 *cache15>new =  171 *ad */a>;
cache15/cache.c#L84" id="L84" c15/ca>158p" class="sread *acode=detail" cc>cache_head" clahdcode" name="L166"> 166 * 171 166;
cache15" id="L85" class="line" 15" i>1586/sunrpc/cache.c#L141" id="L141" cla1587">cache15s="line" name="L86">  8615s=">158" claa href="net/sunrpc/cache.c#L161588">cache15"L87" class="line" name=15"L8>1588me="#ifdef *;
cache15he.c#L88" id="L88" class15he.>1589/sun="net/snamee="L166"> 166;
44"> 144struct  144struct  *cache15ef="net/sunrpc/cache.c#L15ef=>159
" clf">alloc();
cache15         1="ss="sref">cache_is_eproc_dir_nt"ry          *cache15t" class="sref">init15t" >159ref">new-44"> 144struct  * 171cache15"+code=key" class="sref"15"+c>159ead" class="sref">cache_head *<1594">cache15amp; 171 *ad */a>;
cache15lock" class="sref">hash_15loc>159p" class="sread *cache_head" clahdcode" name="L166"> 166 *;
;
 *;
cache_head" clahdcode" name="L166"> 166 * 171 166;
cache15s="line" name="L95">  9515s=">1596" class="srenftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
 *cache15ef">hp = &(*159" class="sref">old *;
cache15ss="sref">cache_head15ss=>159ew" class="sre="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
 *cache15class="sref">match(<15cla>1599w" class="sre="L166"> 166cache_head" clahdcode" name="L166"> 166 *;
;
 *cache16ef">s="sref">match(<16ef">160tail"     cache16e/a>         1ad * *apan class="cstringf>"flush"    }
<,f+code=detail" cS_IFREG         cache16e" class="sref">init16e" >160ref">new->-> *cache_head" clahdcode" name="L166"> 166 *;
;
cache16e+code=key" class="sref"16e+c>1603ef">new----------------------&me="L166"> 166;
cache_head" clahdcode cache16emp;cache_head" clahdcode" name="L166"> 166 *;
;
 *cache16eock" class="sref">hash_16eoc>1605ef">new-nftae="L166"> 166

*cache16e="line" name="L95"> 9516e=">1606" class="sre gotocad *; cache16ef">hp = &(*160" claa href="net/sunrpc/cache.c#L1616e8">cache16es="sref">cache_head16es=>1608ef">new-nftae="L166"> 166cache_head" clahdcode" name="L166"> 166; n||h+code=detail" cc>cache_head" clahdcode" name="L166"> 166 171alloc(); cache16elass="sref">match(<16ela>1609" class="sre ad * *apan class="cstringf>"channel" } <,f+code=detail" cS_IFREG cache16" class="line" name="L1016" c>1610ef">new-ef">new<>-> *cache_head" clahdcode" name="L166"> 166 *; ; cache16ef">tmp; 1611ef">new-ef">new<>-> 166; cache_head" clahdcode cache16/a> } >161ref">new-> *cache_head" clahdcode" name="L166"> 166 *; ; *cache16sref">new->1613ef">new---------nftae="L166"> 166

*cache1613"> 113 *1614ef">new-ef">new<> *; cache16 cache16 166cache_head" clahdcode" name="L166"> 166; alloc(); cache16p;161" class="sref">old * *apan class="cstringf>"contnt"" } <,f+code=detail" cS_IFREG cache16 class="sref">hash_lock<16 cl>161ew" class="sref">new<<<<<<<<<<<<<<< *cache_head" clahdcode" name="L166"> 166 *; ; cache16118" id="L118" class="li16118>1619" class="sre &me="L166"> 166; cache_head" clahdcode cache16he_put(new-ef">new *cache_head" clahdcode" name="L166"> 166 *; ; *cache16c#L120" id="L120" class=16c#L>1621ef">new-ef">new 166

*cache16e=new" class="sref">new<16e=n>162ref">new->->gotocad *; cache16ass="sref">EXPORT_SYMBOL16ass>1623" class="srerpc/cache.c#L141" id="L141" cla16h4">cache16ef">sunrpc_cache_lookup<16ef">162t/sunrpc/cach href="0cache16s="line" name="L123"> 1216s=">162p" clad *; cache16a>, struct ; ad *cache_head" clahdcode,h+code=detail" cef=(struct cache16ode=ch" class="sref">ch<16ode>1627"L118"> 118< href="-+code=detail" cENOMEM(struct cache16f">head, >1628me="rpc/cache.c#L141" id="L141" cla16h9">cache16ry" class="sref">expiry<16ry">1629me="#else rpan class="comment"> as CONFIG_PROC_FS * } cache16; 166; 44"> 144struct 144struct *cache16" class="sref">last_refr16" c>163ame="f">alloc(); cache16b" class="sref">smp_wmb<16b" >163ref">new- href="0cache16LID, &cache16gs" class="sref">flags1634ef">#endifpc/cache.c#L141" id="L141" cla1635">cache16="line" name="L133"> 13316="l>163p" clpc/cache.c#L141" id="L141" cla1636">cache16(struct *n4struct 171void a href="net/sunrpc/cache.c#L101637">cache16alloc(); cache16il" class="sref">detail<16il">163ew" class="sre="L166"> 166 171&me="L166"> 166cache16G, &cache16=cache_revisit_request" 16=ca>164tail" cache16he_dequeue( 166 144struct 144struct *cache16ss="sref">head); 164ref">f">alloc(); cache16ame="L141"> 141 16ame>1643/sunrpc/cachnamee="L166"> 166cache16="line" name="L142"> 14216="l>164t/sunpc/cache.c#L141" id="L141" cla1645">cache16ad *cache_head" clahdcode cache16">cache_head *c>1646" class="sread * *; ad *cache_head" clahdcode,h+code=detail" cef=(struct cache16hash" class="sref">hash<16has>1647ef">new-nftae="L166"> 166cache16 147 164ew" class="sref">new *cache16L148"> 1481649me="L170"> 1 href="+code=detail" crh=(struct cache169" class="line" name="L1169" >165tail"rpc/cache.c#L141" id="L141" cla1651">cache16et/sunrpc/cache.c#L150" 16et/>165ame="+code=detail" cEXPORT_SYMBOL_GPL ad *cache16struct a href="net/sunrpc/cache.c#L101693">cache16 struct *44"> 144struct 144struct *cache16de=tmp" class="sref">tmp16de=>165t/sunf">alloc(); cache16LID, &; ad *cache_head" clahdcode,h+code=detail" cef=(struct cache16p;1656" class="sread *cache16LID, &cache16ATIVE, &1658me="+code=detail" cEXPORT_SYMBOL_GPL ad *cache16A148"> 148165/a> pc/cache.c#L141" id="L141" cla166f">cache16; 144struct 144struct 144struct *cache16lass="sref">update(<16las>166ame="f">alloc(); cache16a>, ,>166ref">new-44"> 144struct cache16p;166ead" class="sref">cache_head *<1664">cache16esh_unlocked(166t/sunrpc/cachad *cache_head" clahdcode<=cad *ad *44"> 144struct cache16" class="line" name="L1616" c>1665ef">new-nftae="L166"> 166cache_head" clahdcode<==cad *cache16ef">old; 1666" class="sre href=cad *-+code=detail" cENOMEM(struct cache16p;166" claa href="net/sunrpc/cache.c#L161668">cache16ref">hash_lock); 166ew" class="sre="L166"> 166cache_head" clahdcode" name="L166"> 166 *; 166 17144"> 144struct cache16" class="line" name="L1616" c>1669" class="sre h+code=detail" cGFP_KERNEL cache16mp = new-nftae="L166"> 166cache_head" clahdcode" name="L166"> 166 *alloc(); cache16c#L170" id="L170" class=16c#L>1671ef">new-ef">new *ad *cache_head" clahdcode cache16f">cache_put(>167ref">new-> *-+code=detail" cENOMEM(struct cache16="L172" class="line" nam16="L>1673" class="srerpc/cache.c#L141" id="L141" cla1674">cache16ass="sref">NULL; 1674/sunrpc/cach+code=detail" cc>cache_head" clahdcode" name="L166"> 166 *cache16 1" class="sref"54ref="16 1>1675ef">new- href="e="L166"> 166cache_head" clahdcodecache16 1676/sunrpc/cache.c#L141" id="L141" cla1677">cache16amp;+code=detail" cEXPORT_SYMBOL_GPL ad *cache16L77" class="line" name="16L77>167ew" c">alloc(); cache16s="sref">tmp; voidcad *44"> 144struct 144struct *cache16 78 16 7>168 " clf">alloc(); cache16amp; 1ad *ad *cache_head" clahdcode" name="L166"> 166cache16name="L81"> 81 16nam>168ref">new-ad *ad *cache_head" clahdcode cache16g, insert an empty entry16g, >168sref"rpc/cache.c#L141" id="L141" cla1684">cache16>new = ad *cache16/cache.c#L84" id="L84" c16/ca>168p" clpc/cache.c#L141" id="L141" cla1686">cache16" id="L85" class="line" 16" i>168d" cl="net/sad * 166; 44"> 144struct * * 171cache16s="line" name="L86"> 8616s=">168" class="sref">old-ad * 166 166 *; cache16"L87" class="line" name=16"L8>168ew" cf">alloc(); cache16he.c#L88" id="L88" class16he.>1689me="L170"> 1="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166; cache16ef="net/sunrpc/cache.c#L16ef=>169tail" cache16 1 href="+code=detail" chref="read/a>; ad * * 171 166 166; cache_head" clahdcode cache16t" class="sref">init16t" >169ref">rpc/cache.c#L141" id="L141" cla1693">cache16"+code=key" class="sref"16"+c>169ead" class="sref">cache_head *<1694">cache16amp; * 166; 44"> 144struct * * 171cache16lock" class="sref">hash_16loc>169p" class="sref">old-ad * 166 166 *; cache16s="line" name="L95"> 9516s=">1696" clf">alloc(); cache16ef">hp = &(*169" class="sref="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166; cache16ss="sref">cache_head16ss=>169ew" c">alloc(); cache16class="sref">match(<16cla>1699me="L170"> 1 href="+code=detail" chref="write/a>; ad * * 171 166 166; cache_head" clahdcode cache17ef">s="sref">match(<17ef">170tail"rpc/cache.c#L141" id="L141" cla17e1">cache17e/a> cache17e" class="sref">init17e" >170ref">="net/sunsignedsnamee="L166"> 166; 44"> 144struct * 166 *cache17e+code=key" class="sref"17e+c>1703ef">f">alloc(); cache17emp;cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166; cache17eock" class="sref">hash_17eoc>170p" clpc/cache.c#L141" id="L141" cla17e6">cache17e="line" name="L95"> 9517e=">1706" class="sre href="+code=detail" chref="poll/a>; ad * *cache_head" clahdcode cache17ef">hp = &(*170" clarpc/cache.c#L141" id="L141" cla17e8">cache17es="sref">cache_head17es=>170ew" c">alloc(); cache17elass="sref">match(<17ela>1709/sun="net/slongn4struct 144struct *alloc(); cache17" class="line" name="L1017" c>1710ef">new-ef">new<>-&unsignedsnamee="L166"> 166cache_head" clahmdcode,struct cache17ef">tmp; 171ame="f">alloc(); cache17/a> } >171ref">new-44"> 144struct * * 166 166cache17sref">new->1713ef">new-="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166; cache1713"> 113 *171t/sunpc/cache.c#L141" id="L141" cla1715">cache17 new- href="e="L166"> 166; ad * *cache_head" clahmdcode,<4struct cache_head" clahdcode cache17 cache17p;171" claa href="net/sunrpc/cache.c#L161718">cache17 class="sref">hash_lock<17 cl>171ew" c="net/snamee="L166"> 166; 44"> 144struct * 144struct *cache17118" id="L118" class="li17118>1719" clf">alloc(); cache17he_put(new-="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166; cache17c#L120" id="L120" class=17c#L>172ame="pc/cache.c#L141" id="L141" cla17h2">cache17e=new" class="sref">new<17e=n>172ref">new- href="e="L166"> 166; ad * *cache_head" clahdcode cache17ass="sref">EXPORT_SYMBOL17ass>172sref"rpc/cache.c#L141" id="L141" cla17h4">cache17ef">sunrpc_cache_lookup<17ef">172t/sunpc/cache.c#L141" id="L141" cla17r5">cache17s="line" name="L123"> 1217s=">172p" cl="net/snamee="L166"> 166; 44"> 144struct * 144struct *cache17a>, struct alloc(); cache17ode=ch" class="sref">ch<17ode>172" class="sref="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166; cache17f">head, >172ew" c">alloc(); cache17ry" class="sref">expiry<17ry">1729me="L170"> 1 href="+code=detail" chref="release/a>; ad * *cache_head" clahdcode cache17;cache17" class="sref">last_refr17" c>173ame="pc/cache.c#L141" id="L141" cla1732">cache17b" class="sref">smp_wmb<17b" >173ref">const<44"> 144struct 166; alloc(); cache17LID, &new-.ad *new-ef=cad *alloc(); cache17gs" class="sref">flags1734ef">new-.ad *new-e=cad *alloc(); cache17="line" name="L133"> 13317="l>1735ef">new-.ad *; ; alloc(); cache17(struct new-.ad *; ; alloc(); cache17new-.ad *; ; alloc(); cache17il" class="sref">detail<17il">173ew" class="sr.ad *; * as for FIONREAD * } cache17G, &new-.ad *; ; alloc(); cache17=cache_revisit_request" 17=ca>1740ef">new-.ad *; ; alloc(); cache17he_dequeue(cache17ss="sref">head); 174ref">a href="net/sunrpc/cache.c#L101743">cache17ame="L141"> 141 17ame>1743/sun="net/snamee="L166"> 166; 44"> 144struct * 144struct *cache17="line" name="L142"> 14217="l>174t/sunf">alloc(); cache17cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166; cache17">cache_head *c>1746" cla hrefc(); cache17hash" class="sref">hash<17has>1747"L118"> 118< href="e="L166"> 166; ad * *cache_head" clahdcode cache17 147 1748me="rpc/cache.c#L141" id="L141" cla17=9">cache17L148"> 148174/a> pc/cache.c#L141" id="L141" cla175f">cache179" class="line" name="L1179" >175 " cl="net/snamee="L166"> 166; 44"> 144struct * 144struct *cache17et/sunrpc/cache.c#L150" 17et/>175ame="f">alloc(); cache17struct new-44"> 144struct *ad * 166; cache17 struct cache_head *<1754">cache17de=tmp" class="sref">tmp17de=>175t/sunrpc/cach href="e="L166"> 166; ad * *cache_head" clahdcode cache17LID, &cache17p;1756" cla hrefc(); cache17LID, & 144struct 166; alloc(); cache17ATIVE, &175ew" class="sr.ad *; ; alloc(); cache17A148"> 1481759ef">new-.ad *; ; alloc(); cache17; new-.ad *new-e=cad *alloc(); cache17lass="sref">update(<17las>1761ef">new-.ad *; ; alloc(); cache17a>, ,>176ref">}cache17p;176ead" class="sref">cache_head *<1764">cache17esh_unlocked(1764/sun="net/snamee="L166"> 166; 144struct * 144struct *cache17" class="line" name="L1617" c>1765ef">f">alloc(); cache17ef">old; 1766" class="sre44"> 144struct *ad * 166; cache17p;176" claa href="net/sunrpc/cache.c#L161768">cache17ref">hash_lock); 176ew" class="sr href="e="L166"> 166; *cache_head" clahdcode cache17" class="line" name="L1617" c>1769/sunrpc/cache.c#L141" id="L141" cla177f">cache17mp = cache17c#L170" id="L170" class=17c#L>1771ef">="net/snamee="L166"> 166; 144struct * 144struct *cache17f">cache_put(>177ref">f">alloc(); cache17="L172" class="line" nam17="L>1773ef">new-="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166; cache17ass="sref">NULL; 177t/sunpc/cache.c#L141" id="L141" cla1775">cache17 1" class="sref"54ref="17 1>1775ef">new- href="e="L166"> 166; *cache_head" clahdcode cache17 1776/sunrpc/cache.c#L141" id="L141" cla1777">cache17amp;cache17L77" class="line" name="17L77>177ew" c="net/sad * 166; 144struct * * 171cache17s="sref">tmp; 166 166 *; cache17 78 17 7>178 " clf">alloc(); cache17amp; 1="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166; cache17name="L81"> 81 17nam>178ref">a href="net/sunrpc/cache.c#L101783">cache17g, insert an empty entry17g, >1783ef">new- href="e="L166"> 166; 171 166 166; cache_head" clahdcode cache17>new = cache17/cache.c#L84" id="L84" c17/ca>178p" clpc/cache.c#L141" id="L141" cla1786">cache17" id="L85" class="line" 17" i>178d" cl="net/sad * 166; 144struct *cache17s="line" name="L86"> 8617s=">178" class="sref">old- const * 171cache17"L87" class="line" name=17"L8>178ew" class="sref">new< ad * 166 166 *; cache17he.c#L88" id="L88" class17he.>1789" clf">alloc(); cache17ef="net/sunrpc/cache.c#L17ef=>1790ef">new-="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode =cad *ad * 166 * 166 166; cache17 cache17t" class="sref">init17t" >179ref">new- href="e="L166"> 166; 171 166 166; cache_head" clahdcode cache17"+code=key" class="sref"17"+c>179sref"rpc/cache.c#L141" id="L141" cla1794">cache17amp;cache17lock" class="sref">hash_17loc>179p" clconst<44"> 144struct 166; alloc(); cache17s="line" name="L95"> 9517s=">1796ef">new-.ad *; cache17ef">hp = &(*1797ef">new-.ad *; cache17ss="sref">cache_head17ss=>179ew" class="sr.ad *; cache17class="sref">match(<17cla>1799ef">new-.ad *; cache18ef">s="sref">match(<18ef">1800ef">new-.ad *new-e=cad *alloc(); cache18e/a> cache18e" class="sref">init18e" >180ref">a href="net/sunrpc/cache.c#L1018e3">cache18e+code=key" class="sref"18e+c>1803ef">namee="L166"> 166 144struct *alloc(); cache18emp; 166alloc(); cache18eock" class="sref">hash_18eoc>180p" class="sref">old="ss="sref">cache_is_ehref="+ctai=cache_head" clahref="+ctai=che_head *cache_head" clahdcode a href="net/sunrpc/cache.c#L1018e6">cache18e="line" name="L95"> 9518e=">1806" clf">alloc(); cache18ef">hp = &(*180" class="sref="ss="sref">cache_is_eq="scache_head" claq="sme="Le="L166"> 166cache18es="sref">cache_head18es=>1808 class="sref="ss="sref">cache_is_ednt"ry *cache18elass="sref">match(<18ela>1809ef">new-namee="L166"> 166cache18" class="line" name="L1018" c>181tail" cache18ef">tmp; 181ame="L170"> 1ad * * *cache18/a> } >181ref">new-ad * *; ad *cache18sref">new->1813ef">new-ad * * *ad * * *; cache1813"> 113 *1814/sunrpc/cach+code=detail" cdiscache_head" cladiscodef=cad * 166cache_head" clahdcode cache18 new-nfta!+code=detail" cIS_ERR ad *cache18 cache_head" clahdcode- name="L166"> 166 *; *cache18p;181" class="srefelsea href="net/sunrpc/cache.et/su1818">cache18 class="sref">hash_lock<18 cl>181ew" class="sref">new 166 166ad *cache18118" id="L118" class="li18118>1819me="L170"> 1 href="+code=detail" cre=(struct cache18he_put(cache18c#L120" id="L120" class=18c#L>182ame="+code=detail" cEXPORT_SYMBOL_GPL ad *cache18e=new" class="sref">new<18e=n>182ref">a href="net/sunrpc/cache.c#L1018r3">cache18ass="sref">EXPORT_SYMBOL18ass>182sref"voidcad * 144struct cache18ef">sunrpc_cache_lookup<18ef">182t/sunf">alloc(); cache18s="line" name="L123"> 1218s=">1825ef">new-ad * 166 *; cache18a>, struct new-ad *cache_head" clahdcode- name="L166"> 166 *; 166cache18ode=ch" class="sref">ch<18ode>182" clarpc/cache.c#L141" id="L141" cla18r8">cache18f">head, >182ew" c+code=detail" cEXPORT_SYMBOL_GPL ad *cache18ry" class="sref">expiry<18ry">182/a> pc/cache.c#L141" id="L141" cla183f">cache18;
The original LXR software by the c/cache.chttp://sourceforge.#L14projects/lxr">LXR ommeunityche_,hthis experient"al version by c/cache.cmai=to:lxr@codux.no"nlxr@codux.no1
lxr.codux.no kindly hosted by c/cache.chttp://www.redpill-codpro.no"nRedpill Lodpro ASche_,hprovider of Loduxhconsulting and opernetons services since 1995.