linux/fs/lockd/host.c
<<
.5" /spa> /form a .5" href="../linux+v3.7.2/fs/lockd/host.c">.5" img src="../.static/gfx/right.png" alt=">>">.5 /spa> .5 spa> class="lxr_search">.5" ="+search" method="post" onsubmit="return do_search(this);">.5" input typue=hidden" namue=navtarget" value=">.5" input typue=text" namue=search" ide=search">.5" buttiontypue=submit">Search .5 spa> class="lxr_prefs" a href="+prefs?return=fs/lockd/host.c".5" onclick="return ajax_prefs();">.5" Prefs /a>.5 /spa> " /div " form ac >="ajax+*" method="post" onsubmit="return false;">.5 input typue=hidden" namue=ajax_lookup" ide=ajax_lookup" value=">." /form ." div class="headingbottim">
div ide=file_contents"
   1 /a> spa> class="comment">/* /spa>
    2 /a> spa> class="comment"> * linux/fs/lockd/host.c /spa>
    3 /a> spa> class="comment"> * /spa>
    4 /a> spa> class="comment"> * Management for NLM peer hosts. The nlm_host struct is shared /spa>
    5 /a> spa> class="comment"> * betwee> client and server implementa	  >. The only reasionto /spa>
    6 /a> spa> class="comment"> * do so is to reduce code bloat. /spa>
    7 /a> spa> class="comment"> * /spa>
    8 /a> spa> class="comment"> * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de> /spa>
    9 /a> spa> class="comment"> */ /spa>
   2  11 /a>#include <linux/typus.h /a>>   12 /a>#include <linux/slab.h /a>>   13 /a>#include <linux/in.h /a>>   14 /a>#include <linux/in6.h /a>>   15 /a>#include <linux/sunrpc/clnt.h /a>>   16 /a>#include <linux/sunrpc/svc.h /a>>   17 /a>#include <linux/lockd/lockd.h /a>>   18 /a>#include <linux/mutex.h /a>>   19/oa
   20 /a>#include <linux/sunrpc/svc_xprt.h /a>>   21/oa
   22 /a>#include <net/ipv6.h /a>>   23/oa
   24 /a>#include "netns.h /a>"   25/oa
   26 /a>#define  a href="+code=NLMDBG_FACILITY" class="sref">NLMDBG_FACILITY /a>          a href="+code=NLMDBG_HOSTCACHE" class="sref">NLMDBG_HOSTCACHE/oa
   27 /a>#define  a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a>         32   28 /a>#define  a href="+code=NLM_HOST_REBIND" class="sref">NLM_HOST_REBIND /a>         (60 *  a href="+code=HZ" class="sref">HZ /a>)   29 /a>#define  a href="+code=NLM_HOST_EXPIRE" class="sref">NLM_HOST_EXPIRE /a>         (300 *  a href="+code=HZ" class="sref">HZ /a>)   30 /a>#define  a href="+code=NLM_HOST_COLLECT" class="sref">NLM_HOST_COLLECT /a>        (120 *  a href="+code=HZ" class="sref">HZ /a>)   31/oa
   32 /a>static struct  a href="+code=hlist_head" class="sref">hlist_head /a>         a href="+code=nlm_server_hosts" class="sref">nlm_server_hosts /a>[ a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a>];   33 /a>static struct  a href="+code=hlist_head" class="sref">hlist_head /a>         a href="+code=nlm_client_hosts" class="sref">nlm_client_hosts /a>[ a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a>];   34/oa
   35 /a>#define  a href="+code=for_each_host" class="sref">for_each_host /a>( a href="+code=host" class="sref">host /a>,  a href="+code=pos" class="sref">pos /a>,  a href="+code=chain" class="sref">chain /a>,  a href="+code=table" class="sref">table /a>) \   36 /a>        for (( a href="+code=chain" class="sref">chain /a>) = ( a href="+code=table" class="sref">table /a>); \   37 /a>             ( a href="+code=chain" class="sref">chain /a>) < ( a href="+code=table" class="sref">table /a>) +  a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a>; ++( a href="+code=chain" class="sref">chain /a>)) \   38 /a>                 a href="+code=hlist_for_each_entry" class="sref">hlist_for_each_entry /a>(( a href="+code=host" class="sref">host /a>), ( a href="+code=pos" class="sref">pos /a>), ( a href="+code=chain" class="sref">chain /a>),  a href="+code=h_hash" class="sref">h_hash /a>)   39/oa
   40 /a>#define  a href="+code=for_each_host_safe" class="sref">for_each_host_safe /a>( a href="+code=host" class="sref">host /a>,  a href="+code=pos" class="sref">pos /a>,  a href="+code=next" class="sref">next /a>,  a href="+code=chain" class="sref">chain /a>,  a href="+code=table" class="sref">table /a>) \   41 /a>        for (( a href="+code=chain" class="sref">chain /a>) = ( a href="+code=table" class="sref">table /a>); \   42 /a>             ( a href="+code=chain" class="sref">chain /a>) < ( a href="+code=table" class="sref">table /a>) +  a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a>; ++( a href="+code=chain" class="sref">chain /a>)) \   43 /a>                 a href="+code=hlist_for_each_entry_safe" class="sref">hlist_for_each_entry_safe /a>(( a href="+code=host" class="sref">host /a>), ( a href="+code=pos" class="sref">pos /a>), ( a href="+code=next" class="sref">next /a>), \   44 /a>                                                ( a href="+code=chain" class="sref">chain /a>),  a href="+code=h_hash" class="sref">h_hash /a>)   45/oa
   46 /a>static unsigned long             a href="+code=nrhosts" class="sref">nrhosts /a>;   47 /a>static  a href="+code=DEFINE_MUTEX" class="sref">DEFINE_MUTEX /a>( a href="+code=nlm_host_mutex" class="sref">nlm_host_mutex /a>);   48/oa
   49 /a>static void                      a href="+code=nlm_gc_hosts" class="sref">nlm_gc_hosts /a>(struct  a href="+code=net" class="sref">net /a> * a href="+code=net" class="sref">net /a>);   5  51 /a>struct  a href="+code=nlm_lookup_host_info" class="sref">nlm_lookup_host_info /a> {   52 /a>        const int                a href="+code=server" class="sref">server /a>;          spa> class="comment">/* search for server|client */ /spa>
   53 /a>        const struct  a href="+code=sockaddr" class="sref">sockaddr /a>   * a href="+code=sap" class="sref">sap /a>;            spa> class="comment">/* address to search for */ /spa>
   54 /a>        const  a href="+code=size_t" class="sref">size_t /a>             a href="+code=salen" class="sref">salen /a>;           spa> class="comment">/* it's length */ /spa>
   55 /a>        const unsigned short     a href="+code=protocol" class="sref">protocol /a>;        spa> class="comment">/* transport to search for*/ /spa>
   56 /a>        const  a href="+code=u32" class="sref">u32 /a>                a href="+code=version" class="sref">version /a>;         spa> class="comment">/* NLM version to search for */ /spa>
   57 /a>        const char              * a href="+code=hostnamu" class="sref">hostnamu /a>;       spa> class="comment">/* remote's hostnamu */ /spa>
   58 /a>        const  a href="+code=size_t" class="sref">size_t /a>             a href="+code=hostnamu_len" class="sref">hostnamu_len /a>;    spa> class="comment">/* it's length */ /spa>
   59 /a>        const int                a href="+code=noresvport" class="sref">noresvport /a>;      spa> class="comment">/* use non-priv port */ /spa>
   60 /a>        struct  a href="+code=net" class="sref">net /a>              * a href="+code=net" class="sref">net /a>;            spa> class="comment">/* network namuspace to bind */ /spa>
   61 /a>};   62/oa
   63 /a> spa> class="comment">/* /spa>
   64 /a> spa> class="comment"> * Hash func	  > must work well  > big- and little-endia> platforms /spa>
   65 /a> spa> class="comment"> */ /spa>
   66 /a>static unsigned int  a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>(const  a href="+code=__be32" class="sref">__be32 /a>  a href="+code=n" class="sref">n /a>)   67 /a>{   68 /a>        unsigned int  a href="+code=hash" class="sref">hash /a> = ( a href="+code=__forcu" class="sref">__forcu /a>  a href="+code=u32" class="sref">u32 /a>) a href="+code=n" class="sref">n /a> ^ (( a href="+code=__forcu" class="sref">__forcu /a>  a href="+code=u32" class="sref">u32 /a>) a href="+code=n" class="sref">n /a> >> 16);   69 /a>        return  a href="+code=hash" class="sref">hash /a> ^ ( a href="+code=hash" class="sref">hash /a> >> 8);   70 /a>}   71/oa
   72 /a>static unsigned int  a href="+code=__nlm_hash_addr4" class="sref">__nlm_hash_addr4 /a>(const struct  a href="+code=sockaddr" class="sref">sockaddr /a> * a href="+code=sap" class="sref">sap /a>)   73 /a>{   74 /a>        const struct  a href="+code=sockaddr_in" class="sref">sockaddr_in /a> * a href="+code=sin" class="sref">sin /a> = (struct  a href="+code=sockaddr_in" class="sref">sockaddr_in /a> *) a href="+code=sap" class="sref">sap /a>;   75 /a>        return  a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>( a href="+code=sin" class="sref">sin /a>-> a href="+code=sin_addr" class="sref">sin_addr /a>. a href="+code=s_addr" class="sref">s_addr /a>);   76 /a>}   77/oa
   78 /a>static unsigned int  a href="+code=__nlm_hash_addr6" class="sref">__nlm_hash_addr6 /a>(const struct  a href="+code=sockaddr" class="sref">sockaddr /a> * a href="+code=sap" class="sref">sap /a>)   79 /a>{   80 /a>        const struct  a href="+code=sockaddr_in6" class="sref">sockaddr_in6 /a> * a href="+code=sin6" class="sref">sin6 /a> = (struct  a href="+code=sockaddr_in6" class="sref">sockaddr_in6 /a> *) a href="+code=sap" class="sref">sap /a>;   81 /a>        const struct  a href="+code=in6_addr" class="sref">in6_addr /a>  a href="+code=addr" class="sref">addr /a> =  a href="+code=sin6" class="sref">sin6 /a>-> a href="+code=sin6_addr" class="sref">sin6_addr /a>;   82 /a>        return  a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>( a href="+code=addr" class="sref">addr /a>. a href="+code=s6_addr32" class="sref">s6_addr32 /a>[0]) ^   83 /a>                a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>( a href="+code=addr" class="sref">addr /a>. a href="+code=s6_addr32" class="sref">s6_addr32 /a>[1]) ^   84 /a>                a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>( a href="+code=addr" class="sref">addr /a>. a href="+code=s6_addr32" class="sref">s6_addr32 /a>[2]) ^   85 /a>                a href="+code=__nlm_hash32" class="sref">__nlm_hash32 /a>( a href="+code=addr" class="sref">addr /a>. a href="+code=s6_addr32" class="sref">s6_addr32 /a>[3]);   86 /a>}   87/oa
   88 /a>static unsigned int  a href="+code=nlm_hash_address" class="sref">nlm_hash_address /a>(const struct  a href="+code=sockaddr" class="sref">sockaddr /a> * a href="+code=sap" class="sref">sap /a>)   89 /a>{   90 /a>        unsigned int  a href="+code=hash" class="sref">hash /a>;   91/oa
   92 /a>        switch ( a href="+code=sap" class="sref">sap /a>-> a href="+code=sa_family" class="sref">sa_family /a>) {   93 /a>        case  a href="+code=AF_INET" class="sref">AF_INET /a>:   94 /a>                 a href="+code=hash" class="sref">hash /a> =  a href="+code=__nlm_hash_addr4" class="sref">__nlm_hash_addr4 /a>( a href="+code=sap" class="sref">sap /a>);   95 /a>                break;   96 /a>        case  a href="+code=AF_INET6" class="sref">AF_INET6 /a>:   97 /a>                 a href="+code=hash" class="sref">hash /a> =  a href="+code=__nlm_hash_addr6" class="sref">__nlm_hash_addr6 /a>( a href="+code=sap" class="sref">sap /a>);   98 /a>                break;   99 /a>        default:  100 /a>                 a href="+code=hash" class="sref">hash /a> = 0;  101 /a>        }  102 /a>        return  a href="+code=hash" class="sref">hash /a> & ( a href="+code=NLM_HOST_NRHASH" class="sref">NLM_HOST_NRHASH /a> - 1);  103 /a>}  104/oa
  105 /a> spa> class="comment">/* /spa>
  106 /a> spa> class="comment"> * Allocate and initialize an nlm_host.  Common to both client and server. /spa>
  107 /a> spa> class="comment"> */ /spa>
  108 /a>static struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=nlm_alloc_host" class="sref">nlm_alloc_host /a>(struct  a href="+code=nlm_lookup_host_info" class="sref">nlm_lookup_host_info /a> * a href="+code=ni" class="sref">ni /a>,  109 /a>                                       struct  a href="+code=nsm_handle" class="sref">nsm_handle /a> * a href="+code=nsm" class="sref">nsm /a>)  12 111 /a>        struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a> =  a href="+code=NULL" class="sref">NULL /a>;  112 /a>        unsigned long  a href="+code=now" class="sref">now /a> =  a href="+code=jiffies" class="sref">jiffies /a>;  113/oa
  114 /a>        if ( a href="+code=nsm" class="sref">nsm /a> !=  a href="+code=NULL" class="sref">NULL /a>)  115 /a>                 a href="+code=atomic_inc" class="sref">atomic_inc /a>(& a href="+code=nsm" class="sref">nsm /a>-> a href="+code=sm_count" class="sref">sm_count /a>);  116 /a>        else {  117 /a>                 a href="+code=host" class="sref">host /a> =  a href="+code=NULL" class="sref">NULL /a>;  118 /a>                 a href="+code=nsm" class="sref">nsm /a> =  a href="+code=nsm_get_handle" class="sref">nsm_get_handle /a>( a href="+code=ni" class="sref">ni /a>-> a href="+code=sap" class="sref">sap /a>,  a href="+code=ni" class="sref">ni /a>-> a href="+code=salen" class="sref">salen /a>,  119 /a>                                         a href="+code=ni" class="sref">ni /a>-> a href="+code=hostnamu" class="sref">hostnamu /a>,  a href="+code=ni" class="sref">ni /a>-> a href="+code=hostnamu_len" class="sref">hostnamu_len /a>);  120 /a>                if ( a href="+code=unlikely" class="sref">unlikely /a>( a href="+code=nsm" class="sref">nsm /a> ==  a href="+code=NULL" class="sref">NULL /a>)) {  121 /a>                         a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %s failed; no nsm handle\n"
,  122 /a>                                 a href="+code=__func__" class="sref">__func__ /a>);  123 /a>                        goto  a href="+code=out" class="sref">out /a>;  124 /a>                }  125 /a>        }  126 /a>  127 /a>         a href="+code=host" class="sref">host /a> =  a href="+code=kmalloc" class="sref">kmalloc /a>(sizeof(* a href="+code=host" class="sref">host /a>),  a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL /a>);  128 /a>        if ( a href="+code=unlikely" class="sref">unlikely /a>( a href="+code=host" class="sref">host /a> ==  a href="+code=NULL" class="sref">NULL /a>)) {  129 /a>                 a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %s failed; no memory\n"
,  a href="+code=__func__" class="sref">__func__ /a>);  130 /a>                 a href="+code=nsm_release" class="sref">nsm_release /a>( a href="+code=nsm" class="sref">nsm /a>);  131 /a>                goto  a href="+code=out" class="sref">out /a>;  132 /a>        }  133/oa
  134 /a>         a href="+code=memcpy" class="sref">memcpy /a>( a href="+code=nlm_addr" class="sref">nlm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+code=ni" class="sref">ni /a>-> a href="+code=sap" class="sref">sap /a>,  a href="+code=ni" class="sref">ni /a>-> a href="+code=salen" class="sref">salen /a>);  135 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_addrlen" class="sref">h_addrlen /a>    =  a href="+code=ni" class="sref">ni /a>-> a href="+code=salen" class="sref">salen /a>;  136 /a>         a href="+code=rpc_set_port" class="sref">rpc_set_port /a>( a href="+code=nlm_addr" class="sref">nlm_addr /a>( a href="+code=host" class="sref">host /a>), 0);  137 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_srcaddrlen" class="sref">h_srcaddrlen /a> = 0;  138/oa
  139 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_rpcclnt" class="sref">h_rpcclnt /a>    =  a href="+code=NULL" class="sref">NULL /a>;  140 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_namu" class="sref">h_namu /a>       =  a href="+code=nsm" class="sref">nsm /a>-> a href="+code=sm_namu" class="sref">sm_namu /a>;  141 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_version" class="sref">h_version /a>    =  a href="+code=ni" class="sref">ni /a>-> a href="+code=version" class="sref">version /a>;  142 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_proto" class="sref">h_proto /a>      =  a href="+code=ni" class="sref">ni /a>-> a href="+code=protocol" class="sref">protocol /a>;  143 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_reclaiming" class="sref">h_reclaiming /a> = 0;  144 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_server" class="sref">h_server /a>     =  a href="+code=ni" class="sref">ni /a>-> a href="+code=server" class="sref">server /a>;  145 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_noresvport" class="sref">h_noresvport /a> =  a href="+code=ni" class="sref">ni /a>-> a href="+code=noresvport" class="sref">noresvport /a>;  146 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_inuse" class="sref">h_inuse /a>      = 0;  147 /a>         a href="+code=init_waitqueue_head" class="sref">init_waitqueue_head /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_gracewait" class="sref">h_gracewait /a>);  148 /a>         a href="+code=init_rwsem" class="sref">init_rwsem /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_rwsem" class="sref">h_rwsem /a>);  149 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_state" class="sref">h_state /a>      = 0;  150 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_nsmstate" class="sref">h_nsmstate /a>   = 0;  151 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_pidcount" class="sref">h_pidcount /a>   = 0;  152 /a>         a href="+code=atomic_set" class="sref">atomic_set /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count /a>, 1);  153 /a>         a href="+code=mutex_init" class="sref">mutex_init /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_mutex" class="sref">h_mutex /a>);  154 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_nextrebind" class="sref">h_nextrebind /a> =  a href="+code=now" class="sref">now /a> +  a href="+code=NLM_HOST_REBIND" class="sref">NLM_HOST_REBIND /a>;  155 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_expires" class="sref">h_expires /a>    =  a href="+code=now" class="sref">now /a> +  a href="+code=NLM_HOST_EXPIRE" class="sref">NLM_HOST_EXPIRE /a>;  156 /a>         a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_lockowners" class="sref">h_lockowners /a>);  157 /a>         a href="+code=spin_lock_init" class="sref">spin_lock_init /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_lock" class="sref">h_lock /a>);  158 /a>         a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_granted" class="sref">h_granted /a>);  159 /a>         a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_reclaim" class="sref">h_reclaim /a>);  160 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_nsmhandle" class="sref">h_nsmhandle /a>  =  a href="+code=nsm" class="sref">nsm /a>;  161 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=h_addrbuf" class="sref">h_addrbuf /a>    =  a href="+code=nsm" class="sref">nsm /a>-> a href="+code=sm_addrbuf" class="sref">sm_addrbuf /a>;  162 /a>         a href="+code=host" class="sref">host /a>-> a href="+code=net" class="sref">net /a>          =  a href="+code=ni" class="sref">ni /a>-> a href="+code=net" class="sref">net /a>;  163/oa
  164 /a> a href="+code=out" class="sref">out /a>:  165 /a>        return  a href="+code=host" class="sref">host /a>;  166 /a>}  167/oa
  168 /a> spa> class="comment">/* /spa>
  169 /a> spa> class="comment"> * Destroy an nlm_host and free associated resources /spa>
  170 /a> spa> class="comment"> * /spa>
  171 /a> spa> class="comment"> * Caller must hold nlm_host_mutex. /spa>
  172 /a> spa> class="comment"> */ /spa>
  173 /a>static void  a href="+code=nlm_destroy_host_locked" class="sref">nlm_destroy_host_locked /a>(struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)  174 /a>{  175 /a>        struct  a href="+code=rpc_clnt" class="sref">rpc_clnt /a> * a href="+code=clnt" class="sref">clnt /a>;  176 /a>        struct  a href="+code=lockd_net" class="sref">lockd_net /a> * a href="+code=ln" class="sref">ln /a> =  a href="+code=net_generic" class="sref">net_generic /a>( a href="+code=host" class="sref">host /a>-> a href="+code=net" class="sref">net /a>,  a href="+code=lockd_net_id" class="sref">lockd_net_id /a>); /* NLM version lass="sref">sockaddr /a> /a>     o "

 

    div ide=search_result3class="sref">host /a>-> a href="+code=h_reclaiming" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>);          a href="+coBUG_ONass="sref">nsm BUG_ON div !>,  a href="+cod>hliemptmcpy" class="sred>hliemptmEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_lockowners" class="sref">h_lockowners //a>);          a href="+coBUG_ONass="sref">nsm BUG_ON div     a href="+code=atomre_head" class="srede=atomre_hset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count //a>);          a href="+codd>hlidelock_init" class="sredd>hlidelock_iset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_hash" class="sref">h_hash /a>);          a href="+cof">nunmok_ioaddr" class="sref">nunmok_ioaric /a>( a href="+code=host" class="sref">host /a>);          a href="+code=nsm_release" class="sref">nsm_release /a>( a href="+code=host" class="sref">host /a>-> a href="+code=h_nsmhandle" class="sref">h_nsmhandle /a>);   87/oa
 socde=clnt" class="sref">clnt /a> =  a href="+code=host" class="sref">host /a>-> a href="+code=h_rpcclnt" class="sref">h_rpcclnt a>);         if ( a href="+code=clnt" class="sref">clnt /a> !=  a href="+code=NULL" class="sref">NULL /a>)                  a href="+cof">rphutdocknlm_clilnt" class="sref">rphutdocknlm_cliase /a>( a href="+code=clnt" class="sref">clnt /a>);          a href="+coknd flnt" class="sreknd fric /a>( a href="+code=host" class="sref">host /a>);          a href="+code=ln" class="sref">ln /a>-> a href="+code=nrhosts" class="sref">nrhosts --a>);   94 /a>     gt; a href="+code=nrhosts" class="sref">nrhosts --a>);   95 /a>}   spa> class="commen/*"> * /spa>
  spa> class="commen *old f">cnlm_lookup_h - Fo bi sp/* Nup_h nsmhan matcht3c a>/* rem f">serve* /spa>
  spa> class="comment">@sap:>/* netwo/* addreof f">serve* /spa>
  spa> class="comment">@salen:9;s lengof f">ser sh_addres* /spa>
  spa> class="comment">@f">proto:>/* transpof">protomon _inus* /spa>
  spa> class="comment" @f">vers:p/* Nf">protomf">versio* /spa>
  spa> class="comment" @kd/he" nckd: 9;\0d: 9;-terminociatkd/he" neof f">serve* /spa>
  spa> class="comment">@f">noresvp: 1    se non-pilegiatansposhould be _indve* /spa>
  105 /a> spa> class="comment"> * /spa>
  106 /a> spa> class="comment">R  retsroy an nlm_ho   strure that matches the p cled-isio* /spa>
  107 /a> spa> class="comment" [f">ser sh_addr,>/* transpof">proto,>/* NLM vers, f">ser kd/he" n]tex. /spa>
  spa> class="commen *oIf one doesnd: 9;t alre_hy exiconst the lm_hocache, a>new nsmhan ires* /spa>
  spa> class="comment">cre_ciatst a   retedtex. /spa>
  spa> class="comment"> */ /spa>
 struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+cold f">cnlm_lookup_host" class="sref">f">cnlm_lookup_hric /a>(const struct  a href="+code=sockaddr" class="sref">sockaddr /a> * a href="+code=sap" class="sref">sap a>
,                                      const  a href="+code=size_t" class="sref">size_t /> * a href="+code=salen" class="sref">salen /a>,                                      const unsigned sho> * a href="+code=protocol" class="sref">protocol /a>,  114 /a>                                     const  a href="+code=u32" class="sref">u32 /st  a href="+code=version" class="sref">version /a>,  115 /a>                                     const cha> * a href="+code=hostnamu" class="sref">hostnamu /a>,  116 /a>                                  ed int  a href="+code=noresvport" class="sref">noresvport /a>,  117 /a>                                  a>(struct  a href="+code=net" class="sref">net /a> * a href="+code=net" class="sref">net /a>,  118 /a>{  119 /a>     a>(struct  a href="+code=nlm_lookup_host_info" class="sref">nlm_lookup_host_info / =  a href="+code=ni" class="sref">ni  =>)) {  120 /a>             /a>. a href="+code=server" class="sref">server          = 0/a>,  121 /a>             /a>. a href="+code=sap" class="sref">sap             a> =  a href="+code=sap" class="sref">sap a>
,  122 /a>             /a>. a href="+code=salen" class="sref">salen           a> =  a href="+code=salen" class="sref">salen /a>,  123 /a>             /a>. a href="+code=protocol" class="sref">protocol        a> =  a href="+code=protocol" class="sref">protocol /a>,  124 /a>             /a>. a href="+code=version" class="sref">version         a> =  a href="+code=version" class="sref">version /a>,              /a>. a href="+code=hostnamu" class="sref">hostnamu        a> =  a href="+code=hostnamu" class="sref">hostnamu /a>,              /a>. a href="+code=hostnamu_len" class="sref">hostnamu_len    a> =  a href="+codtaddrlen" class="sredtaddrric /a>( a href="+code=hostnamu" class="sref">hostnamu )/a>,              /a>. a href="+code=noresvport" class="sref">noresvport      a> =  a href="+code=noresvport" class="sref">noresvport /a>,              /a>. a href="+code=net" class="sref">net /a>         a> =  a href="+code=net" class="sref">net /a>,  129 /a>     /a>};         struct  a href="+codd>hliue_head" class="sredd>hliue_hlnt /a> * a href="+codhae=sin" class="sredhae=lnt a>);         struct  a href="+codd>hlin"+cead" class="sredd>hlin"+clnt /a> * a href="+copoosts" class="srepoolnt a>);  132 /a>     a>(struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host a>);      a>(struct  a href="+code=nsm_handle" class="sref">nsm_handle /a> * a href="+code=nsm" class="sref">nsm     =  a href="+code=NULL" class="sref">NULL /a>;  134 /a>        struct  a href="+code=lockd_net" class="sref">lockd_net /a> * a href="+code=ln" class="sref">ln /a> =  a href="+code=net_generic" class="sref">net_generic /a>( a href="+code=net" class="sref">net /a>,  a href="+code=lockd_net_id" class="sref">lockd_net_id /a>);  135 >);  136 /a>         a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: d: 9;,NLM v=d: &#u,of">pr=d: &#s)ory\n"
,  a href="+code=__func__" class="sref">__func__ /a>,                      /a>( a href="+code=hostnamu" class="sref">hostnamu  ?> =  a href="+code=hostnamu" class="sref">hostnamu  : a>( spa> class="string">&qu<nonea> &g\n"),  a href="+code=version" class="sref">version /a>,                      /a>( a href="+code=protocol" class="sref">protocol  a> ==  a href="+coIPPROTO_UDPcol" class="sreIPPROTO_UDPamu  ?> >( spa> class="string">&quudpg\n"( spa> class="string">&qutcpg\n");  140 /a>         a href="+cof">mut=h_lock" class="sref">mut=h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);  142 /a>         a href="+codhae=sin" class="sredhae=lnt /a>a>(& a href="+codd nlm_cli_=nrhosts" class="srefd nlm_cli_=nrholnt [mp; a href="+codd nlm_hash_address" class="sref">nlm_hash_address / =  a href="+code=sap" class="sref">sap )]a>);  143 /a>         a href="+codd>hlifor_each_clirmcpy" class="sredd>hlifor_each_clirmric /a>( a href="+code=host" class="sref">host a>),  a href="+copoosts" class="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hash />)) {                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=net" class="sref">net /a> !=  a href="+code=net" class="sref">net /a>,                      continuea>);                 i!>,  a href="+cof">rpmpnlm_addr" class="sref">rpmpnlm_aric /a>( a href="+code=nlm_addr" class="sref">nlm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+code=sap" class="sref">sap )/a>,                      continuea>);               a> spa> class="commen/* S" nesh_addr. Sharlize NSM nsmhan if we alre_hy have one "> */ /spa>
                 if ( a href="+code=nsm" class="sref">nsm /a> ==  a href="+code=NULL" class="sref">NULL /a>
                          a href="+code=nsm" class="sref">nsm     =  a href="+code=host" class="sref">host /a>-> a href="+code=h_nsmhandle" class="sref">h_nsmhandle a>);                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=h_proto" class="sref">h_proto /a> !=  a href="+code=protocol" class="sref">protocol /a>
                      continuea>);                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=h_version" class="sref">h_version /a> !=  a href="+code=version" class="sref">version /a>
                      continuea>);                  a href="+codl>nsm_gem_host" class="sref">nsm_gem_hddr /a>( a href="+code=host" class="sref">host /a>);                  a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %oundgt; a href=" (d: &#s)ory\n"
,  a href="+code=__func__" class="sref">__func__ /a>,                          a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm=h_addrbuf" class="sref">h_addrbuf /a>);                 goto  a href="+code=out" class="sref">out /a>;         }  163/oa
          a href="+code=host" class="sref">host /a> =  a href="+code=nlm_alloc_host" class="sref">nlm_alloc_host /a>(& a href="+code=ni" class="sref">ni /     a href="+code=nsm" class="sref">nsm /a>);  165 /a>        if ( a href="+code=unlikely" class="sref">unlikely /a>( a href="+code=host" class="sref">host /a> ==  a href="+code=NULL" class="sref">NULL /a>);                 goto  a href="+code=out" class="sref">out /a>;  167/oa
 socdd>hli>h_iue_head" class="sredd>hli>h_iue_host /a>(& a href="+co>h_reclaiming /a> = 0; size_t /ae=nsm=h_hash" class="sref">h_hash a>),  a href="+codhae=sin" class="sredhae=lnt /a>);          a href="+code=ln" class="sref">ln /a>-> a href="+code=nrhosts" class="sref">nrhosts ++a>);          a href="+code=nrhosts" class="sref">nrhosts ++a>);          a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %cre_ciatt; a href=" (d: &#s)ory\n"
,  a href="+code=__func__" class="sref">__func__ /a>,                  a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm=h_addrbuf" class="sref">h_addrbuf /a>);  175 to  a href="+code=out" class="sref">out /a>:          a href="+cof">mutf">h_lock" class="sref">mutf">h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);         return  a href="+code=host" class="sref">host /a>; 2* NLM    }  spa> class="commen/*"> * /spa>
  spa> class="comment">f">f">cnsm_relekup_h - sm_rele th clief">nlm_hos* /spa>
  spa> class="comment" @kd/h: an nlm_ho gosm_releas* /spa>
  spa> class="comment"as* /spa>
  spa> class="comment"> */ /spa>
 cnsm_relekup_host" class="sref">f">cnsm_relekup_hntk /a>(struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)         if ( a href="+code=host" class="sref">host /a> ==  a href="+code=NULL" class="sref">NULL /a>
                 ret/a>;          a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"locksm_rele th cliet; a href="+code=h_reclaiming" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>);          a href="+coBUG_ONass="sref">nsm BUG_ON div     a href="+code=atomre_head" class="srede=atomre_hset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count / <>), 0);          a href="+coBUG_ONass="sref">nsm BUG_ON div     a href="+code=host" class="sref">host /a>-> a href="+code=h_server" class="sref">h_server , 0);         if ( a href="+code=atomdec_and_te=host" class="srede=atomdec_and_te=hset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count //>)) {                  a href="+coBUG_ONass="sref">nsm BUG_ON div !>,  a href="+cod>hliemptmcpy" class="sred>hliemptmEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_lockowners" class="sref">h_lockowners //a>);                  a href="+coBUG_ONass="sref">nsm BUG_ON div !>,  a href="+cod>hliemptmcpy" class="sred>hliemptmEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_granted" class="sref">h_granted //a>);                  a href="+coBUG_ONass="sref">nsm BUG_ON div !>,  a href="+cod>hliemptmcpy" class="sred>hliemptmEAD /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_reclaim" class="sref">h_reclaim //a>);                  a href="+cof">mut=h_lock" class="sref">mut=h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);              mp; a href="+codd nlm_destroy_host_locked" class="sref">nlm_destroy_host_locked /a>( a href="+code=host" class="sref">host /a>);                  a href="+cof">mutf">h_lock" class="sref">mutf">h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);         } );  106 /a> spa> class="commen/*"> * /spa>
  107 /a> spa> class="comment" f">svcnlm_lookup_h - Fo bi sp/* Nup_h nsmhan matcht3c a>/* rem lm_clias* /spa>
  spa> class="commen *o@rqstp: ins="t3c /* Nreque_hos* /spa>
  spa> class="comment">@kd/he" ncke" neof th cliet; aos* /spa>
  spa> class="comment">@kd/he" n_len:9;s lengof th cliet; a>h_nam* /spa>
  spa> class="comment"am* /spa>
  spa> class="comment" R  retsroy an nlm_ho   strure that matches the [th cliesh_addr,am* /spa>
  spa> class="comment" /* transpof">proto,>/* NLM vers, th cliet; a>h_n]gof the p cled-isio* /spa>
  spa> class="comment">/* Nreque_h. oIf one doesnd: 9;t alre_hy exiconst the lm_hocache, aio* /spa>
  spa> class="comment">new nsmhan ir>cre_ciatst a   retedtex. /spa>
  spa> class="comment"ex. /spa>
  spa> class="comment" Before possibly>cre_ct3c a>new an nlm_h,    co(strua f">sockadd. /spa>
  spa> class="commen *oforua fpecific  resouo/* addrest cele the fs/al system nsres* /spa>
  spa> class="comment">multipan /* netwo/* addres. oThe family>of the /* addrestes* /spa>
  spa> class="comment">rq_d/* a ir>guah_graiatto be the s" ness the family>of thees* /spa>
  spa> class="comment">/* addrest rq_/* a,  r itd: 9;s s"femon _in the s" nefamily>foadd. /spa>
  spa> class="comment" the sresouo/* addrtex. /spa>
  spa> class="comment"> */ /spa>
  124 /a>struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+cold svcnlm_lookup_host" class="sref">svcnlm_lookup_hntk /a>(const struct  a href="+codvcnrqstost" class="sredvcnrqstost /a> * a href="+corqstpost" class="srerqstpc__ /a>,                                     const cha> * a href="+code=hostnamu" class="sref">hostnamu /a>,                                     conct  a href="+code=size_t" class="sref">size_t /> * a href="+cokd/he" n_lenamu" class="sref">hostnamu_len /a>
         struct  a href="+codd>hliue_head" class="sredd>hliue_hlnt /a> * a href="+codhae=sin" class="sredhae=lnt a>);      a>(struct  a href="+codd>hlin"+cead" class="sredd>hlin"+clnt /a> * a href="+copoosts" class="srepoolnt a>);         struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host     =  a href="+code=NULL" class="sref">NULL /a>;         struct  a href="+code=nsm_handle" class="sref">nsm_handle /a> * a href="+code=nsm" class="sref">nsm     =  a href="+code=NULL" class="sref">NULL /a>;  132 /a>     a>(struct  a href="+code=sockaddr" class="sref">sockaddr /a> * a href="+codrc_de=sap" class="srefrc_de=nsm     =  a href="+codvcndockaddr" class="srefvcndockaked /a>( a href="+corqstpost" class="srerqstpc__ /a>);          a href="+code=size_t" class="sref">size_t /> * a href="+codrc_ddrlen" class="sredrc_ddrnsm     =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_d/* addrlen" class="srerq_d/* addrULL /a>;  134 /a>        struct  a href="+code=net" class="sref">net /a> * a href="+code=net" class="sref">net     =  a href="+coSVC_NETnet" class="sreSVC_NETked /a>( a href="+corqstpost" class="srerqstpc__ /a>);         struct  a href="+code=nlm_lookup_host_info" class="sref">nlm_lookup_host_info / =  a href="+code=ni" class="sref">ni  =>)) {              /a>. a href="+code=server" class="sref">server          = 1/a>,              /a>. a href="+code=sap" class="sref">sap             a> =  a href="+codvcnockaddr" class="srefvcnockaked /a>( a href="+corqstpost" class="srerqstpc__ //a>,              /a>. a href="+code=salen" class="sref">salen           a> =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_/* addrlen" class="srerq_/* addrULL /a>,              /a>. a href="+code=protocol" class="sref">protocol        a> =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_f">plen" class="srerq_f">pULL /a>,              /a>. a href="+code=version" class="sref">version         a> =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_vowners" class="srerq_vownULL /a>,              /a>. a href="+code=hostnamu" class="sref">hostnamu        a> =  a href="+code=hostnamu" class="sref">hostnamu /a>,              /a>. a href="+cokd/he" n_lenamu" class="sref">hostnamu_len    a> =  a href="+code=hostn_lenamu" class="sref">hostnamu_len /a>,              /a>. a href="+code=net" class="sref">net /a>         a> =  a href="+code=net" class="sref">net /a>,      /a>};         struct  a href="+cofs/lockd_net" class="sref">lockd_net /a> * a href="+code=ln" class="sref">ln /a> =  a href="+code=net_generic" class="sref">net_generic /a>( a href="+code=net" class="sref">net /a>,  a href="+code=lockd_net_id" class="sref">lockd_net_id /a>);       >,  a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,NLM v=d: &#u,of">pr=d: &#s)ory\n"
,  a href="+code=__func__" class="sref">__func__ /a>,                      /dpr) =  a href="+code=hostn_lenamu" class="sref">hostnamu_len /> =  a href="+code=hostnamu" class="sref">hostnamu /> =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_vowners" class="srerq_vownULL /a>,                      / =  a href="+corqstpost" class="srerqstpc__ /a>-> a href="+corq_f">plen" class="srerq_f">pULL  a> ==  a href="+coIPPROTO_UDPcol" class="sreIPPROTO_UDPamu  ?> >( spa> class="string">&quudpg\n"( spa> class="string">&qutcpg\n"); );          a href="+cof">mut=h_lock" class="sref">mut=h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);         if ( a href="+cotitnaafter_eqost" class="sretitnaafter_eqric /a>( a href="+cojiffieners" class="srejiffiennet /a>,  a href="+code=ln" class="sref">ln /a>-> a href="+codex>neeric" class="sref"x>neetex //a>
              mp; a href="+codd nglloc_hress" class="sref">nglloc_hrric /a>( a href="+code=net" class="sref">net /a>); );          a href="+codhae=sin" class="sredhae=lnt /a>a>(& a href="+codd nf">serloc_hress" class="sref">nf">serloc_hrlnt [mp; a href="+codd nlm_hash_address" class="sref">nlm_hash_address / =  a href="+code=ni" class="sref">ni /a>. a href="+code=sap" class="sref">sap )]a>);      >,  a href="+codd>hlifor_each_clirmcpy" class="sredd>hlifor_each_clirmric /a>( a href="+code=host" class="sref">host a>),  a href="+copoosts" class="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hash />)) {                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=net" class="sref">net /a> !=  a href="+code=net" class="sref">net /a>,                      continuea>);                 i!>,  a href="+cof">rpmpnlm_addr" class="sref">rpmpnlm_aric /a>( a href="+code=nlm_addr" class="sref">nlm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+code=ni" class="sref">ni /a>. a href="+code=sap" class="sref">sap )/a>,                      continuea>);               a> spa> class="commen/* S" nesh_addr. Sharlize NSM nsmhan if we alre_hy have one "> */ /spa>
                 if ( a href="+code=nsm" class="sref">nsm /a> ==  a href="+code=NULL" class="sref">NULL /a>
                      > * a href="+code=nsm" class="sref">nsm     =  a href="+code=host" class="sref">host /a>-> a href="+code=h_nsmhandle" class="sref">h_nsmhandle a>);                  if ( a href="+code=host" class="sref">host /a>-> a href="+code=h_proto" class="sref">h_proto /a> !=  a href="+code=ni" class="sref">ni /a>. a href="+code=protocol" class="sref">protocol /a>
                      continuea>);                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=h_version" class="sref">h_version /a> !=  a href="+code=ni" class="sref">ni /a>. a href="+code=version" class="sref">version /a>
                      continuea>);                 i!>,  a href="+cof">rpmpnlm_addr" class="sref">rpmpnlm_aric /a>( a href="+code=nsrclm_addr" class="sref">nsrclm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+codrc_de=sap" class="srefrc_de=nsm )/a>,                      continuea>);              ma> spa> class="commen/* Movemon ue_h>of >h_h dhae=. "> */ /spa>
              >,  a href="+codd>hlideocol" class="sredd>hlideontk /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_hash" class="sref">h_hash /a>);                  a href="+codd>hli>h_iue_head" class="sredd>hli>h_iue_host /a>(& a href="+co>h_reclaiming /a> = 0; size_t /ae=nsm=h_hash" class="sref">h_hash a>),  a href="+codhae=sin" class="sredhae=lnt /a>); 37 118 /a>                 a href="+codl>nsm_gem_host" class="sref">nsm_gem_hddr /a>( a href="+code=host" class="sref">host /a>);                  a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %oundgt; a href=" (d: &#s)ory\n");                          a href="+code=__func__" class="sref">__func__ /     a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm=h_addrbuf" class="sref">h_addrbuf /a>);                 goto  a href="+code=out" class="sref">out /a>;         }          a href="+code=host" class="sref">host /a> =  a href="+code=nlm_alloc_host" class="sref">nlm_alloc_host /a>(& a href="+code=ni" class="sref">ni /     a href="+code=nsm" class="sref">nsm /a>);         if ( a href="+code=unlikely" class="sref">unlikely /a>( a href="+code=host" class="sref">host /a> ==  a href="+code=NULL" class="sref">NULL /a>);                 goto  a href="+code=out" class="sref">out /a>; socmemcpkely" class="srememcpkric /a>( a href="+code=nsrclm_addr" class="sref">nsrclm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+codrc_de=sap" class="srefrc_de=nsm a>),  a href="+codrc_ddrlen" class="sredrc_ddrnsm /a>);          a href="+co>h_reclaiming /a> = 0; size_t /ae=nsmsrclm_alenamu" class="srefmsrclm_alenost /a> =  a href="+codrc_ddrlen" class="sredrc_ddrnsm a>);          a href="+codd>hli>h_iue_head" class="sredd>hli>h_iue_host /a>(& a href="+co>h_reclaiming /a> = 0; size_t /ae=nsm=h_hash" class="sref">h_hash a>),  a href="+codhae=sin" class="sredhae=lnt /a>);          a href="+code=ln" class="sref">ln /a>-> a href="+code=nrhosts" class="sref">nrhosts ++a>);          a href="+code=nrhosts" class="sref">nrhosts ++a>);          a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockd: %cre_ciatt; a href=" (d: &#s)ory\n"             >,  a href="+code=__func__" class="sref">__func__ /     a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm=h_addrbuf" class="sref">h_addrbuf /a>);  out /a>: socm">mutf">h_lock" class="sref">mutf">h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);         return  a href="+code=host" class="sref">host /a>;  spa> class="commen/*"> * /spa>
  spa> class="comment" f">svcnsm_relekup_h - sm_rele f">seref">nlm_hos* /spa>
  spa> class="comment">@kd/h: an nlm_ho gosm_releas* /spa>
  spa> class="comment"as* /spa>
  106 /a> spa> class="comment">Hm_hois lm_destiatl_cirest f">nglloc_h()tex. /spa>
  107 /a> spa> class="comment"> */ /spa>
 svcnsm_relekup_hntk /a>(struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)         if ( a href="+code=host" class="sref">host /a> ==  a href="+code=NULL" class="sref">NULL /a>
                 ret/a>;          a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"locksm_rele f">seret; a href="+code=h_reclaiming" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>);          a href="+coBUG_ONass="sref">nsm BUG_ON div     a href="+code=atomre_head" class="srede=atomre_hset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count / <>), 0);          a href="+coBUG_ONass="sref">nsm BUG_ON div !>,  a href="+co>h_reclaiming /a> = 0; size_t /ae=nsmsh_server" class="sref">h_server , 0);      >,  a href="+code=atomdecead" class="srede=atomdecset /a>(& a href="+code=host" class="sref">host /a>-> a href="+code=h_count" class="sref">h_count / 0);  spa> class="commen/"as* /spa>
  spa> class="comment">Cre_ci the /* NRPC th clieforuasp/* Npeeadd. /spa>
  spa> class="comment"> */ /spa>
 (struct  a href="+cof">rplcount" class="sref">rplcoost /aa>
  124 ct  a href="+code=nbindnlm_host" class="sref">nbindnlm_hntk /a>(struct  a href="+code=nlm_host" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)      a>(struct  a href="+cof">rplcount" class="sref">rplcoost /a),  a href="+codlcount" class="sreplcoost  0); socde=dprintk" class="sref">dprintk /a>( spa> class="string">"lockf">nbindnlm_h href=" (d: &#s)ory\n"                         a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsm=h_addrbuf" class="sref">h_addrbuf /a>); );      ma> spa> class="commen/* Ls/lNup_h nsmhan "> */ /spa>
          a href="+cof">mut=h_lock" class="sref">mut=h_lntk /a>(& a href="+co>h_reclaiming /a> = 0; size_t /ae=nsmst_muost" class="sreh">h_mutex /a>);  134 /a>     ma> spa> class="commen/* If wed: 9;ve alre_hy cre_ciatstNRPC th cli, che/lNwhetheadd. /spa>
  spa> class="commenttttttttt*NRPC rebindois requirocke. /spa>
  spa> class="commenttttttttt*> */ /spa>
         i     a href="+codlcount" class="sreplcoost     =  a href="+code=host" class="sref">host /a>-> a href="+codef">dlcount" class="sredef">dlcount / a> !=  a href="+code=NULL" class="sref">NULL />)) {                 if ( a href="+cotitnaafter_eqost" class="sretitnaafter_eqric /a>( a href="+cojiffieners" class="srejiffiennet /a>,  a href="+code=host" class="sref">host /a>-> a href="+code=extrebindass="sref">nsm /a>extrebindULL /a>)) {              /a>         a href="+cof">rforce_rebindass="sref">nsm f">rforce_rebindric /a>( a href="+codlcount" class="sreplcoost /a>);                          a href="+code=host" class="sref">host /a>-> a href="+code=extrebindass="sref">nsm /a>extrebindULL     =  a href="+cojiffieners" class="srejiffiennet  + !=  a href="+codLM_HOST_REBINDULL" class="srefLM_HOST_REBINDost  0);                          a href="+code=dprintk" class="sref">dprintk /a>( spa> class="string">"lockfext rebindoin href=lu jiffienory\n"             /a>                         a href="+code=host" class="sref">host /a>-> a href="+code=extrebindass="sref">nsm /a>extrebindULL  -  =  a href="+cojiffieners" class="srejiffiennet /a>);                 }      / else>)) {              unsigniatlong  =  a href="+coincrecommers" class="sreincrecommULL     =  a href="+cof">svcntitnde=out" class="sref">svcntitnde=ost  0);              a>(struct  a href="+cof">rtitnde=out" class="sref">rtitnde=116 /f ( a href="+cotitnparmners" class="sretitnparmnULL    )) {                      /a>. a href="+coto_initvaocol" class="sreto_initvao117 /a>     =  a href="+coincrecommers" class="sreincrecommULL aoa
                      /a>. a href="+coto_increcommers" class="sreto_increcomm118 /a>   =  a href="+coincrecommers" class="sreincrecommULL aoa
                      /a>. a href="+coto_maxvaocol" class="sreto_maxvao129 /a>      =  a href="+coincrecommers" class="sreincrecommULL t*N6ULaoa
                      /a>. a href="+coto_re="seners" class="sreto_re="sen117 /a>    5Uaoa
              /a>};              a>(struct  a href="+cof">rpre_ci_argners" class="srer">rpre_ci_argn116 /f ( a href="+coargners" class="sreargn116 /  )) {                      /a>. a href="+code=net" class="sref">net /a>         a> =  a href="+code=host" class="sref">host /a>-> a href="+code=net" class="sref">net /a>,                      /a>. a href="+code=protocol" class="sref">protocol        a> =  a href="+code=host" class="sref">host /a>-> a href="+code=h_proto" class="sref">h_proto /a>,                      /a>. a href="+cosh_address" class="sresh_address         a> =  a href="+code=nlm_addr" class="sref">nlm_addr /a>( a href="+code=host" class="sref">host /aa>,                      /a>. a href="+cosh_af">sess" class="sresh_af">scol        a> =  a href="+code=host" class="sref">host /a>-> a href="+codelm_alenamu" class="srefm/* addrULL /a>,                      /a>. a href="+cotitnde=out" class="sretitnde=116 /       a>a>(& a href="+cotitnparmners" class="sretitnparmnULL /a>,                      /a>. a href="+co>h_ser= class="sref">nsm >h_ser= cl117 /a>     =  a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu ia>,                      /a>. a href="+code=gra=nsm" class="srede=gra=116 /       a>a>(& a href="+cof">nde=gra=nsm" class="sref">nde=gra=amu ia>,                      /a>. a href="+code=version" class="sref">version         a> =  a href="+code=host" class="sref">host /a>-> a href="+code=h_version" class="sref">h_version ia>,                      /a>. a href="+cosuthflavoaddr" class="sresuthflavoa117 /a>     =  a href="+coRPC_AUTH_UNIXddr" class="sreRPC_AUTH_UNIXion ia>,              /a>     /a>. a href="+coflagners" class="sreflagn122 /a>       = if ( a href="+coRPC_CLNT_CREATE_NOPINGddr" class="sreRPC_CLNT_CREATE_NOPING122 /|a>,                                         f ( a href="+coRPC_CLNT_CREATE_AUTOBINDULL" class="sreRPC_CLNT_CREATE_AUTOBINDost /aa>,              /a>}; );               a> spa> class="commen/"as* /spa>
  spa> class="commenttttttttttttttttt* fs/lo re="sen f">sereside bfs/ls sutomatically  r we walias* /spa>
  spa> class="commen tttttttttttttttt* tkd/etto be softNRPC talls. Ch clieside talls naiatto beas* /spa>
  spa> class="commenttttttttttttttttt* hardNRPC taskrtex. /spa>
  spa> class="commenttttttttttttttttt*> */ /spa>
                 i!>,  a href="+co>h_reclaiming /a> = 0; size_t /ae=nsmsh_server" class="sref">h_server ,a>
                      f ( a href="+coargners" class="sreargn116 /a>. a href="+coflagners" class="sreflagn122 /|   =  a href="+coRPC_CLNT_CREATE_HARDRTRYULL" class="sreRPC_CLNT_CREATE_HARDRTRYost  0);                 if ( a href="+code=host" class="sref">host /a>-> a href="+code=h_versino4#L'Vm_rele f">seret; a href="+code=h_reclaimin05L163" id4=L173" class="line" namu4=L173496amu4=L16437 114 /a>             m4> spa4 class="commen/* Movem" class="sreargn116 /a>. a href="+coflagners" class="sreflagn122 /|   =  a href="+coRPC_CLNT_CREATE_HARDRTRYULL" class="sreRPC_CLNNONPRIVPOR( a href="+corqslass="sreRPC_CLNNONPRIVPOR(t.4#L163" id4=L173" class="line" namu4=L16537 115 /a>             >4  a h4ef="+codd>hlideocol" cass="sref">host /a>-> a href="+code=h_versino4#L'Vm_rele f">seretlm_alenost /a> =  a href="+codrc_ddrlen" 73" class="line" namu4=L173496amu4=L16637 116 /a>              4  a h4ef="+codd>hli>h_iue_he" class="sreargn116 /a>. a href="+coflagners" class="sreflagn122 /sss         a> =  a hresf="+code=nlmclass="sref">nlm_addrm_addr /a>( a href="+code=host" class="sref">host /a>),  a href="+codrc_de=sap" cL163" id4=L173" class="line" namu4=L16737 167/oa
               4  a h4ef="+codl>nsm_gem_host" class="sref"> =  a href="+code=host" class="sref">host /a>="+coargne116 /f ( a href="+coargneclaiming /a> = 0;               4  a h4ef="+code=dprintk" claing /a> = 0; );               4     4    a href="+code=__func__" class="sref">__fu-> a href="+codef">dlcount" class="sredef">dlcount / a> !=  a href="+code=NULL" css="sref">host /a>;               4 goto4 a href="+code=out" clst.4#L145" id4=L145" class="line" namu3e=L8438 132 /a>        } "lockfext rebindoin href=lu jiffiencouldm_hocachoargne"fs/ls/lockdref=s="sref">h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>);  =  a href="+code=host" class="sref">host /a>;          a hre4="+co48href="fs/lockd/host.4#122" id3=L132" class="line"4namu4=L16538 165 /a>        if ( a4href=4+code=unlikely#122" id3=L132" class="line"4namu4=L16638 116 /a>              4 goto48t.3c#L97" id3e=L97" class="line"4namu3e=L8438 167/oa
 h_lntk /a>(& a href="+codd nlm_host_muost" class="srefref">size_t /ae=nsmst_muost" class="sreh">h_mutex /a>); soc4emcpkely" clas class="sref">host /a>;          a hre4="+co4h_recl#122" id3=L132" class="line"4namu3e=L9439 140 /a>         a hre4="+co49t.4#L131" id4=L131" class="line" namu3e=L9439 161 /a>         a hre4="+co49Cre_ci the /* NRPC th clief/host.4#L137" id4=L167" class="line" namu3e=L9439 142 /a>         a hre4="+co49the sresouo/* addrtex. /spa>
 Fo="fs/ " idmap f="+coa href="remote/ls sut" id4=t.4#L137" id4=L167" class="line" namu3e=L8439 163/oa
          a hre4="+co4e=dprirele124" id3=L124" class="line"4namu4=L16539 115 /a>             >4  a h4ef="+cass="sref">nlm_addrffienet /a> * a href="+code=hoffienet /a>m_hosost" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)  dprintk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,"<;h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>); soc4">mutf">h_lockass="sref">host /a>-> a href="+code=h_versino4#L'Vm_rele f">seretount / a> !=  a href="+code=NULL" cst_muot_muoclass="sretitnparmnUfter_eqric /a>( a href="+cojiffieners" class="srejiffiennet /a>,  a href="+code=host" class="sref">host /a>-> a href="+code=extrebindass="sref">nsm /a>extrebindULL /a>)) {         return4 a hr49f="+code=dprintk" class="sref">dprin f">rforce_rebindric /a>( a href="+codlcount" class="sreplcoost /a>-> a href="+codef">dlcount" class="sredef">dlcount / a> !=  a href="+code=NULL" cl4100" id4=L114" class="line"5namu4=L10540 130    } host /a>-> a href="+code=extrebindass="sref">nsm /a>extrebindULL /a>)) {  spa> class="c5mmen/5"> * /#122" id3=L132" class="line"5n3mu4=L10549 163/oa
  spa> class="c5mment5>@kd/h: an nlm_ho gosm_relea/host.4#L137" id4=L167" class="line"5namu4=L10540 105 /a> spa> class="c5mment5as* /spa>
   107 /a> spa> class="c5mment5> */ /ost" class="sref">nlm_host /a> * a href="+code=host" class=t" class="sref">nsm_gem_hddr /a>( a href="+code=host" class=ost" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>) h_lockass="sref">host /a>-> a href="+code=h_versi4#L119" id4=L139" class="line"5namu4=L11541 140 /a>        if ( a5href=51   a href="+code=__fu"sref">host /a>tk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,=ho<;h_reclaiming /a> = 0; size_t /ae=nsm" class="sref">nsm /a>h_namu /a>);               5 ret/5>; (& a href="+codein/m_host_muost" class="srefref">size_t /ae=nsmst_muost" class="sreh">h_mutex / 0); size_t /ae=nsmst_muost" class="sreh">h_mutexexpir !=  a href="+codexexpir !hostclass="srejiffiennet  + !=  a href="+codLM_HOST_REBINDULL" class="srefLM_HOST_EXPIREost  0);          a hre5="+co5e=dprintk" cla#122" id3=L132" class="line"5namu4=L11541 104/oa
 host /a>;          a hre5="+co5UG_ONa#122" id3=L132" class="line"5n6mu4=L10541 136 /a>         a hre5="+co51t.3c#L97" id3e=L97" class="line"5namu4=L11541 117 /a>     >,  a hre5="+co51 */ /oshost /a>ockd/st" _osnlm_href="e_host /a>(& a href="h_reclais="sreplcoost  0);ach; h_ser= class=================ci_argners" class="srehs"+codle a>); host /a>o class="sref">host /a>inf,  spa> class="c5mmen/5as* /sL119" id4=L139" class="line"5namu4=L12542 171 /a> spa> class="c5mment52; nlm_host /a> * a href="+code=host" class="sref">host /a>)  spa> class="c5mment522 nlm_href="e_host /a>(& a href="h_reclais="sreplcoost  0);>); (struct  a href5"+cof523 nlm_href="nnlmst /a>(& a href="nnlmclais="sreplcoost  0) a href="+codhae=sin" claL100" id4=L100" class="line"5namu4=L1154> 124 ct  a href="+code5nbind52t.4#5100" id4=L115" class="line"5namu4=L12542 115 )) { nsm BUG_ON dit=h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);      a>(struct5 a hr52G_ONass="sref">nsm BUG_ON di"+code=ho) dlcou="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hash;ach; host /a>-> a href="+code=h_proto" class="sref">h_protosmhandle a>); NULL /a>osoc52a>. a href="+co>h_ser= clt_muot_muoclass="sretitnpa-> a href="+code=h_proto" class="sref">h_protosmhosNULL />)inf, h_proos              5     5    a href="+code=host" class="sref">host /a>-> a href="+code= class="sref">nsm /a>h_namu inmhosNULL />)inf, h_proos); __fu-> a href="+codef">dlcount" class="sredef">dlcos     ma> spa> 5lass=53t.4#2100" id4==L92" class="line"5namu4=L13543 142 /a>         a hre5="+co53 ( a href="+coargners" class="sreargn116 /a>nsm_gem_hddr /a>( a href="+code=host" class="sref">host /a>); mutf">h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);  134 /a>     ma> spa> 5lass=5commen/* If weeeeeeeeeeeeeeeee class="sref">host /a>;  spa> class="c5mment53f="+codd>hlideocol" c#122" id3=L132" class="line"5namu4=L13543 106 /a> spa> class="c5mment53G_ONass="sref#122" id3=L132" class="line"5namu4=L12543 117 /a>        i     5 href53t.3="line": 3      a href="+code5namu4=L13543 118 /a>              5 if (53>mutf">h_lock" class="sref">mutf">h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);              /5>    53="+code=host" class="sref">host /a>;               5     54st.4#1100" id4==L91" class="line"5namu4=L14544 121 /a>              5     54t.4#2100" id4==L92" class="line"5namu4=L14544 122 /a>             /5>    54> * /spa>
               5 } svcnsm_relekup_h - sm_rele f">fs/locloco> ed - R=h_reclall" csources held by loco> ed /host.t.4#3100" id4==L93" class="line"5namu4=L13544 124 /a>     / else>))5{              u5signi54s* /spa>
              a5(stru54Hm_hois lm_destiatl_cirest f">We were notifi/lochatref="specifi/lo; ed.  R=h_recost.4#6100" id4==L96" class="line"5namu4=L12544 117 /a>              5     54 */ /spa>
               5     54tttttttttttttt* tkd/etto be "host.3#L124" id3=L124" class="line"5namu4=L14544 129 /a>              5     5/a>. arelekup_host" class="srfs/locloco> edex /a>);  class="sref">host /a>inf,               5     55s* /sL119" id4=L139" class="line"5namu4=L15545 121 /a>             /5>}; <55; nlm_hs"+codle a>); host /a>o             a5(stru552 nlm_host /a> * a href="+code=host" class="sref">host /a>)               5     55t.4#L124" id4=L134" class="line"5namu4=L15545 114 /a>              5     5/a>. a href="+"sref">host /a>onlm_asstloco> _f="+coa>);  _f="+colass="sref">host /a>inf,               5     5/a>. a href="+" class="sref">unlikely /a>( a href="+code=host" class="sref">host /a>oNULL /a>);               5     5/a>. a href="+cosh_af"ost.4#2100" id4=L112" class="line"5namu4=L15545 117 /a>              5     55t.3="line": 3      a href="+code5namu4=L15545 118 /a>              5     5/a>. a href="+on ue_h>of >h_h dhae=. "> arklall"f="+s ti/lockdthis NSM os ed.ost.3#L124" id3=L124" class="line"5namu4=L15545 129 /a>              5     55tttttttttttttt* hardNRPC taskrtex. /">We runref="f="p loptheadly, because we dr"p ef=";              5     56tttttttttttttt*> */ /spa>
               5     56Cre_ci the /* NRPC th cliefoa href="s/To arelekprocessing a";             /5>    56the sresouo/* addrtex. /spa>a href="shost.3#L124" id3=L124" class="line"5namu4=L16546 123 /a>              5     5              whiless="sreplcoost    ) nlm_ackd/st" _osnlm_hostkd/hos/st" >); " class="sref">h_hashoNULL />)inf, NULL />)) {              /5>}; <5 href="fs/lockd/host.4ass="sref">nlm_hoss/lofreefs/loclosources); host /a>); ); __fu"sref">svcnsm_relekup_hntk /a>(struct  a href="+code=nlm_h"sref">host /a>);               5> spa56G_ONass="sref#122" id3=L132" class="line"5namu4=L16546 107 /a> spa> class="c5mment567            whiless="sreplcoost    ) nlm_ackd/st" _osnlm_host
 ); " class="sref">h_hashoNULL />)inf, NULL />)) {  spa> class="c5mmen 56f="+codl>nsm_gem_host" class="sref">los=NUL hrcohos>( a href="+codelos=NUL hrcohos>nlm_h"sref">host /a>);  spa> class="c5mment56f="+code=dprintk" class="sref">dprinlos=NUL hrcnsm_relekup_hntk /a>(struct=NUL hrcnsm_releknlm_h"sref">host /a>);  spa> class="c5mment570_ONass="sref#122" id3=L132" class="line"5namu4=L17547 131 /a>              5 i!>,57t.4#2100" id4==L92" class="line"5namu4=L17547 122 /a>              5     57=nrhosts" class="sref">nrhosts"+locnsm_a>); host /a>o              5 if (5a href#122" id3=L132" class="line"5namu4=L16537 114 /a>             m5> spa57t.4#5100" id4=L115" class="line"5namu4=L16537 115 /a>             >5  a h5ef="+cos); osss=ost" class="sref">nlm_h      a> =  a href="+code="sref">host /a>oc     a> =  a href="+codL176" id3e=L86" class="line"56amu4=L16537 116 /a>              5  a h57t.3c#L145" id4=L145" class="line"5namu4=L16537 167/oa
 nlm_href="e_host /a>(& a href="h_reclais="sreplcoost  0);>);               5  a h5ef="+codl>nsm_ost" class="sref">nlm_href="nnlmst /a>(& a href="nnlmclais="sreplcoost  0) a href="+codhae=sin" claL100" id4=L100" class="line"5namu4=L16537 129 /a>              5  a h5ef="+code=dpriost" class="sref">nlm_host /a> * a href="+code=host" class="sref">host /a>)               5     58t.4#L131" id4=L131" class="line"5namu3e=L8538 131 /a>              5 goto5 a href="+code" class="sref">unlioc     a> =  a href="+codL#L128" id4=L138" class="line"5namu3e=L8538 132 /a>        } nlm_" cla_oc     a> =  a hre" cla_oc class="sref">host /a>l nlm_act_generi/a>(& a hrefact_generi/osss="sref">host /a>oa href="fs/lockd/host.4#Llass="sref">nlm_" cla_oc _iost /a>(& a " cla_oc _iost.3#L169" id3e=L79" class="line"5namu3e=L8538 163/oa
          a hre5="+co58href="fs/lockd/host.4" class="sref">unlil net /a>, ); osssmcs=0L176" id3e=L86" class="line"5namu4=L16538 165 /a>        if ( a5href=58f="+code=__func__" clllllllllost.4#2100" id4=L112" class="line"5namu4=L16538 116 /a>              5 goto58class="commen/"as* /spsreplcoost  0)  /a>( spa> class="sting">"lsreplcoost  0)KERN_WARNATE_NOPING122 /|a>KERN_WARNATElass=lockfext rebindoin href=lu jiffiencouldm_hocachshutdown";h_reclaiming /a> = 0;  =  a href="+codL2100" id4=L112" class="line"5namu4=L16538 167/oa
  = 0; ( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,aoa
 h_reclaiming /a> = 0; net /a>, ); osss /a> = 0;  =  a href="+codL2100" id4=L112" class="line"5n2om3ent"538 NLM version lass="sre5">soc5emcpkely" clashost.4#L145" id4=L145" class="line"5namu4=L16538 159 /a>         a hre5="+co58f="+code=dprintk" claing sref">net /a>, ); osssmcs=0L176" id3e=L86" class="line"5namu3e=L9539 140 /a>         a hre5="+co59   a href="+code=__func__" clost.4#2100" id4=L112" class="line"5namu3e=L9539 161 /a>         a hre5="+co59; "lsreplcoost  0)KERN_WARNATE_NOPING122 /|a>KERN_WARNATElass=lockfext rebindoin href=lu jiffiencouldm_hocachshutdown";h_reclaimingL2100" id4=L112" class="line"5namu3e=L9539 142 /a>         a hre5="+co59 ( a href="+coargnersst" class="sreftk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,aoa
 h_reclaiming /a> = 0; ); osssL2100" id4=L112" class="line"5namu3e=L8539 163/oa
          a hre5="+co59t.4#5100" id4=L115" class="line"5namu4=L16539 115 /a>             >5  a h59G_ONass="sref">nsm BUG_ON di"+code=ho) dlcou="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hashhostkd/hos/st" >); " clL#L128" id4=L138" class="line"5namu3e=L9539 126 /a> unlioc     a> =  a href="+codlt_muot_muoclass="sretitnpa-> a href="+code=h_proto" class="sref">h_prooc     a> =  a href="+codlss="sref">NULL />)oc     a> =  a href="+codL176" id3e=L86" class="line"5namu3e=L9539 117 to  a href="+code5out" 59a>. a href="+cotitnde=out" clcontinue2100" id4=L112" class="line"5n2om3ent"539 NLM version lass="sre5">soc59f="+codl>nsm_gem_host" class="sref">tk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*em_hostaoa
         return5 a hr59f="+code=dprintk" clagem_host" class="sref">-> a href="+code=h_proto" class="sref">h_pro ing" class="sref">h_reclaiming /a> = 0; size_t /ae=nsmst_muost" class="sreh">h_mutex / 0); -> a href="+code=h_proto" class="sref">h_pro iinum_a>); h_pro iexpir !=  a href="+codexexpir !host /a> = 0; h_prooc     a> =  a href="+codL2100" id4=L112" class="line"6namu4=L10640  91/oa
  spa> class="c6mmen/6"> * /#122" id3=L132" class="line"6n3mu4=L10649 163/oa
  spa> class="c6mment60=dprirele124" id3=L124" class="line"6namu4=L10640 105 /a> spa> class="c6mment60f="+cass="sref">nlm_addrshutdown/st" >_oc     a> =  a hreaddrshutdown/st" >_oc osss=ost" class="sref">nlm_h      a> =  a href="+code="sref">host /a>oc     a> =  a href="+codL176" id3e=L86" class="line"6n6mu4=L10649 126 /a>  107 /a> spa> class="c6mment607            ost" class="sref">nlm_href="e_host /a>(& a href="h_reclais="sreplcoost  0);>); nsm_ost" class="sref">nlm_href="nnlmst /a>(& a href="nnlmclais="sreplcoost  0) a href="+codhae=sin" claL100" id4=L100" class="line"6namu4=L10640 169 )) { nlm_host /a> * a href="+code=host" class="sref">host /a>)         if ( a6href=61t.4#L131" id4=L131" class="line"6namu4=L11641 131 /a>              6 ret/6>; host /a>t=h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>);          a hre6="+co6e=dprintk" claon ue_h>of >h_h dhae=. ">First, makelall"f="+s eligibckdref=gc"shost.3#L124" id3=L124" class="line"6namu4=L11641 104/oa
 "lockd: (kd/h=d: 9;d: &#*3d: 9;,nuking all"f="+s  hrec paoa
 p...f">h_reclaiming /a> = 0;  =  a href="+codL2100" id4=L112" class="line"6namu4=L116415143 /a>         a hre6="+co61G_ONass="sref">nsm BUG_ON di"+code=ho) dlcou="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hashhostkd/hos/st" >); " clL#L128" id4=L138" class="line"6n6mu4=L10641 136 /a>         a hre6="+co61class="commen/"as* /s" class="sref">unlioc     a> =  a href="+codlt_muot_muoclass="sretitnpa-> a href="+code=h_proto" class="sref">h_prooc     a> =  a href="+codlss="sref">NULL />)oc     a> =  a href="+codL176" id3e=L86" class="line"6namu4=L11641 117 /a>     >,  a hre6="+co61a>. a href="+cotitnde=out" clcontinue2100" id4=L112" class="line"6namu4=L10641 NLM    } h_sera> = 0; h_pro iexpir !=  a href="+codexexpir !hostclass="srejiffiennet  + !=  a href="+codLM_HOST_REBI- 12100" id4=L112" class="line"6namu4=L10641  39/oa
 host /a>-> a href="+code=h_versino4#L'Vm_rele f">seretount / a> !=  a href="+code=NULL" cL#L128" id4=L138" class="line"6namu4=L12642 170 /a> spa> class="c6mmen/62   a href="+code=__fugem_host" class="sref">f="+shutdown/
  !=  a href="f="+shutdown/
 dlcount" class="sredef">dlcount / a> !=  a href="+code=NULL" cl4100" id4=L114" class="line"6namu4=L12642 171 /a> spa> class="c6mment62   a href="+code=dprintk" class="sref">dprin-> a href="+codef">dlcount" class="sredef">dlcount / a> !=  a href="+code=NULL" css="sref">host /a>;  spa> class="c6mment62 ( a href="+coargners#122" id3=L132" class="line"6namu4=L11642  63 a>(struct  a href6"+cof62=dprintk" cla#122" id3=L132" class="line"6namu4=L1164> 124 ct  a href="+code6nbind62t.4#5100" id4=L115" class="line"6namu4=L12642 115 )) { of >h_h dhae=. ">Then, per"+cm a garbagelcollection pof "shost.3#L124" id3=L124" class="line"6namu4=L12642 116 /a>     a>(struct6 a hr62G_ONass="sref">nsm BUG_ON dicode=c/st" >); osss="sref">host /a>oa href="fs/lockd/host.4#l4100" id4=L114" class="line"6namu4=L11642 167/oa
 h_lntk /a>(& a href="+codd nlm_host_muost" class="sref">nlm_h">h_mutex /a>); soc62a>. a152" id3=L152" class="line"6namu4=L10642 129 /a>              6     6    a href="+cst" class="sref">nltexplain/st" >); osss="sref">host /a>oa href="fs/lockd/host.4#l4100" id4=L114" class="line"6namu4=L13643 120 >);      ma> spa> 6lass=63t.4#2100" id4==L92" class="line"6namu4=L13643 142 /a>         a hre6="+co63> * /spa>
 svcnsm_relekup_h - sm_rele Shut down"ef="; 134 /a>     ma> spa> 6lass=63@kd/h: an nlm_ho gosm_releas* Note/chatrefis routine is hrefed only atlly  r wehutdown"+coj.ost.3#L124" id3=L124" class="line"6namu4=L12643 105 /a> spa> class="c6mment63s* /spa>
  spa> class="c6mment63G_ONarele124" id3=L124" class="line"6namu4=L12643 117 /a>        i     6 href63t.3="ass="sref">nlm_addrshutdown/st" >    a> =  a hreaddrshutdown/st" >osss=releL176" id3e=L86" class="line"6namu4=L13643 118 /a>              6 if (63cnsm_L119" id4=L139" class="line"6namu4=L13643 129 /a>             /6>    63   a href="+cst" class="sreftk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,shutting down";h_reclaimingL2100" id4=L112" class="line"6namu4=L14644 120 /a>              6     640  a href="+cst" class="sref">nlshutdown/st" >_oc     a> =  a hreaddrshutdown/st" >_oc osss="sref">host /a>;               6     64t.4#21100" id4==L91" class="line"6namu4=L14644 122 /a>             /6>    64 ( a 152" id3=L152" class="line"6namu4=L14644 123 /a>              6 } svcnsm_relekup_h - sm_red/ost.3#L124" id3=L124" class="line"6namu4=L13644 124 /a>     / else>))6{              u6signi64s* /spa>
              a6(stru64Hm_hois lm_destiatl_cirest f">marklt_muocsweep ref= csources held by lomote/
               6     64 */ /spa>
               6     64tttttos              6     6/a>. a">nsm BUG_ON dicode=c/st" >); osss=ost" class="sref">nlm_h      a> =  a href="+code="sref">host /a>oc     a> =  a href="+codL176" id3e=L86" class="line"6namu4=L15645 120 /a>              6     65s* /sL119" id4=L139" class="line"6namu4=L15645 121 /a>             /6>}; <65; nlm_href="e_host /a>(& a href="h_reclais="sreplcoost  0);>);              a6(stru652 nlm_href="nnlmst /a>(& a href="nnlmclais="sreplcoost  0) a href="+codhae=sin" cla,s="sref">host /a>ockd    a> =  a href=xst.4#L100" id4=L100" class="line"6namu4=L15645 123 /a>              6     653 nlm_host /a> * a href="+code=host" class="sref">host /a>)               6     65t.4#5100" id4=L115" class="line"6namu4=L13645 115 /a>              6     65G_ONass="sref">nsm BUG_ON ditk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*3d: 9;,;h_reclaiming /a> = 0;  =  a href="+codL2100" id4=L112" class="line"6namu4=L15645 116 /a>              6     65G_ONass="sref">nsm BUG_ON di"+code=ho) dlcou="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hashhostkd/hos/st" >); " clL#L128" id4=L138" class="line"6namu4=L15645 117 /a>              6     65 href="+code=host" class="sref">host /a>oc     a> =  a href="+codlt_muot_muoclass="sretitnpa-> a href="+code=h_proto" class="sref">h_prooc     a> =  a href="+codlss="sref">NULL />)oc     a> =  a href="+codL176" id3e=L86" class="line"6namu4=L15645 118 /a>              6     65a>. a href="+co>h_ser= class=continue2100" id4=L112" class="line"6namu4=L15645 129 /a>              6     65f="+code=dprintk" class="sref">dprin-> a href="+code=h_proto" class="sref">h_pro iinum_a>);               6     660_ONass="sref#122" id3=L132" class="line"6namu4=L16646 131 /a>              6     66t.4#2100" id4==L92" class="line"6namu4=L15646 122 /a>             /6>    66=nrhosts" clasn ue_h>of >h_h dhae=. "> arklall"f="+s thatrhold " cls, b" cls o weha csd/host.3#L124" id3=L124" class="line"6namu4=L16646 123 /a>              6     6              s="sref">h_hashhos  a markclosources); host /a>oa href="fs/lockd/host.4#l4100" id4=L114" class="line"6namu4=L16646 114 /a>             /6>}; <66t.4#5100" id4=L115" class="line"6namu4=L16646 135 >); nsm BUG_ON di"+code=ho) ); dlcou="srepoolnt a>),  a href="+codhae=sin" class="sredhae=lnt iockd    a> =  a href=xst.4#ss="sredhae=lnt ing" class="sref">e=h_hash" class="sref">h_hashhostkd/hos/st" >); " clL#L128" id4=L138" class="line"6namu4=L15646 116 /a>              6> spa66class="commen/"as* /s" class="sref">unlioc     a> =  a href="+codlt_muot_muoclass="sretitnpa-> a href="+code=h_proto" class="sref">h_prooc     a> =  a href="+codlss="sref">NULL />)oc     a> =  a href="+codL176" id3e=L86" class="line"6namu4=L16646 107 /a> spa> class="c6mment66a>. a href="+cotitnde=out" clcontinue2100" id4=L112" class="line"6namu4=L15646 168 /a> spa> class="c6mmen 66f="+codl>nsm_gem_host" class="sref">unli="+coder_host /a>(& a ="+coder_hoquot;t_muost" class="srefref">size_t /ae=nsmst_muost" class="sreh">h_mutex / 0); dprin-> a href="+code=h_proto" class="sref">h_pro iinum_a>);  spa> class="c6mment66f="+code=dprintk" cla ||ass="sref">dprin+cojibe"+c_a>); host /a>-> a href="+code=extrebindass="sref">nsm /a>exexpir !=  a href="+codexexpir !host.4#L119" id4=L139" class="line"6namu4=L17647 170 /a> spa> class="c6mment67   a href="+code=__fugem_host" class="sref">tk /a>( spa> class="string">"lockd: (kd/h=d: 9;d: &#*lost=c/st" > skipping aoa
 h_reclaiming119" id4=L139" class="line"6namu4=L16647 131 /a>              6 i!>,67   a href="+code=dprintk" clagem_host"ockd: (kd/h=d: 9;d: &#* cn paoa
 d use aoa
 d exp,aoa
               6     67 ( a href="+coargners" class=gem_host" class="sref">-> a href="+code=extrebindass="sref">nsm /a>exng" class="sref">h_reclaiming /a> = 0; size_t /ae=nsmst_muost" class="sreh">h_mutex / 0);               6 if (67                  f ( a href=gem_host" class="sref">-> a href="+code=extrebindass="sref">nsm /a>exinum_a>); h_pro iexpir !=  a href="+codexexpir !host /a> = 0; h_prooc     a> =  a href="+codL2100" id4=L112" class="line"6namu4=L16637 114 /a>             m6> spa67ommen/* If weeeeeeeeeeeeeeeeecontinue2100" id4=L112" class="line"6namu4=L16637 115 /a>             >6  a h67f="+codd>hlideocol" c#122" id3=L132" class="line"66amu4=L16637 116 /a>              6  a h67class="commen/"as* /spsreplcoost  0)lostde/h=oyo) ); dlcouL2100" id4=L112" class="line"6namu4=L16637 167/oa
               6  a h67a>. a152" id3=L152" class="line"6namu4=L16637 129 /a>              6  a h679mutf">h_lockass="sref">host /a>oc     a> =  a href="+codL#L128" id4=L138" class="line"6namu3e=L8638 120 /a>              6     68   a href="+code=__fuost" class="sref">nlm_" cla_oc     a> =  a hre" cla_oc class="sref">host /a>l nlm_act_generi/a>(& a hrefact_generi/osss="sref">host /a>oa href="fs/lockd/host.4#Llass="sref">nlm_" cla_oc _iost /a>(& a " cla_oc _iost.uL2100" id4=L112" class="line"6namu3e=L8638 131 /a>              6 goto68t.4#2100" id4==L92" class="line"6namu3e=L8638 132 /a>        } host /a>l h_proocxt_g/a>(& a hrefacxt_g/t.4#mclass="sref">nlm_et  + !=  a href="+codLM_HOST_REBINDULL" class="srefLM_HOST_COLLECT href="fs/lockd/LM_HOST_COLLECTt.4#L100" id4=L100" class="line"6namu3e=L8638 163/oa
          a hre6="+co68href=#122" id3=L132" class="line"6namu4=L16638 165 /a>        if ( a6href=68f="+c


fo> er"> The original LXR software by cheDULL" clashttp://source"+cge.oc /project32"xr">LXR _h dunityt.4#Llefis experidhaeal hossion by ULL" clasmailto:"xr@ ux.nooclxr@ ux.not.4#. subfo> er"> lxr. ux.no kindly"f="+ed by ULL" clashttp://www.redpill- pro.noocRedpill L pro ASt.4#Llprovidera hrL uxlcon/uloing and operations kd/hices sincep1995.