linux/drivers/md/dm-log-userspace-base.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2006-2009 Red Hat, Inc.
   3 *
   4 * This file is released under the LGPL.
   5 */
   6
   7#include <linux/bio.h>
   8#include <linux/slab.h>
   9#include <linux/dm-dirty-log.h>
  10#include <linux/device-mapper.h>
  11#include <linux/dm-log-userspace.h>
  12#include <linux/module.h>
  13
  14#include "dm-log-userspace-transfer.h"
  15
  16#define DM_LOG_USERSPACE_VSN "1.1.0"
  17
  18struct flush_entry {
  19        int type;
  20        region_t region;
  21        struct list_head list;
  22};
  23
  24/*
  25 * This limit on the number of mark and clear request is, to a degree,
  26 * arbitrary.  However, there is some basis for the choice in the limits
  27 * imposed on the size of data payload by dm-log-userspace-transfer.c:
  28 * dm_consult_userspace().
  29 */
  30#define MAX_FLUSH_GROUP_COUNT 32
  31
  32struct log_c {
  33        struct dm_target *ti;
  34        struct dm_dev *log_dev;
  35        uint32_t region_size;
  36        region_t region_count;
  37        uint64_t luid;
  38        char uuid[DM_UUID_LEN];
  39
  40        char *usr_argv_str;
  41        uint32_t usr_argc;
  42
  43        /*
  44         * in_sync_hint gets set when doing is_remote_recovering.  It
  45         * represents the first region that needs recovery.  IOW, the
  46         * first zero bit of sync_bits.  This can be useful for to limit
  47         * traffic for calls like is_remote_recovering and get_resync_work,
  48         * but be take care in its use for anything else.
  49         */
  50        uint64_t in_sync_hint;
  51
  52        /*
  53         * Mark and clear requests are held until a flush is issued
  54         * so that we can group, and thereby limit, the amount of
  55         * network traffic between kernel and userspace.  The 'flush_lock'
  56         * is used to protect these lists.
  57         */
  58        spinlock_t flush_lock;
  59        struct list_head mark_list;
  60        struct list_head clear_list;
  61};
  62
  63static mempool_t *flush_entry_pool;
  64
  65static void *flush_entry_alloc(gfp_t gfp_mask, void *pool_data)
  66{
  67        return kmalloc(sizeof(struct flush_entry), gfp_mask);
  68}
  69
  70static void flush_entry_free(void *element, void *pool_data)
  71{
  72        kfree(element);
  73}
  74
  75static int userspace_do_request(struct log_c *lc, const char *uuid,
  76                                int request_type, char *data, size_t data_size,
  77                                char *rdata, size_t *rdata_size)
  78{
  79        int r;
  80
  81        /*
  82         * If the server isn't there, -ESRCH is returned,
  83         * and we must keep trying until the server is
  84         * restored.
  85         */
  86retry:
  87        r = dm_consult_userspace(uuid, lc->luid, request_type, data,
  88                                 data_size, rdata, rdata_size);
  89
  90        if (r != -ESRCH)
  91                return r;
  92
  93        DMERR(" Userspace log server not found.");
  94        while (1) {
  95                set_current_state(TASK_INTERRUPTIBLE);
  96                schedule_timeout(2*HZ);
  97                DMWARN("Attempting to contact userspace log server...");
  98                r = dm_consult_userspace(uuid, lc->luid, DM_ULOG_CTR,
  99serspace-base.c#L97" id="L97" class="0" cl4e=region" class="sref">region;

	  L="dri,dri,d id94" name="L93">  93        DMERR(  9'0etss="sref">gfp_maskdT) + 199serspace-base.c#L97" id="L97" class="0" cl4e=re10#in0clude <r != -  9'0etss="NULL_consult_userspace  9'0etss="NULL_con                r != -  9010 name="L102">  12#include <03ef="d3sref">r != -&quoee(ele10t;dm_dev *u97"mpleteL97">  97                );
  98                r = dm_consult_userspace((  9'0etss="NULL_con99serspace-base.c#L97" id="L97" class="0" cl4e=reOG_USERSP0ACE_VSN" class="sref">DM07ef="dze_t   9'0etss="NULL_con9ult_userspace  9'0etss="NULL_con                  901018" class0="line" name="L18">  18<09ef="d/a>,   85     -base.c#L10" id="L10" class="line" name="L10">  1gion" cla#include <  79        int   92
  97me="L88">  88  server..."  1#include  <  12#include <;r ref="+c9
  1.h>t;
ele1ot;dm-log-userspace-transfer.hh"t;
log_c {
DMM_LOG11ze_t gfog-userspace-ba#L4v33" 99serspace-base.c#L97" id="L97" class="0" cl4e=rLot;
  9'0etss="ctrspan  901L18" classs="line" name="L18">  18<s1ruct       e.c#L74" id="L74" cuserspace-base.cidm-log-userspace-base.trsp                  .trsp   e-ba-base.c#L10" id="L10" class="line" name="L10">      region_tdata_size  9'0etss="pan);
  9'0etss="NULL_con-base.c#L10" id="L10" class="line" name="L10">   #include &<r rivers/md/dm-logctrspan c">  9'0etss="ctrspan);
  9'0etss="NULL_con-base.c#L10" id="L10" class="line" name="L10">   .h>};
dm_dev *hrefname="L98">  980sult_userspace0;#L74" id="L74" cuserspace-base.cidm-l.h" cL69" id="L69" cldm-log-userspace-ba#L41" id;#L74" id="L74" cuserspace-base.cidm-l++se.c#L90" id="L90" class="line" name="L90">  901/a> * This 1limit12code=TASK_INTERRUPTIBLE" class="sref"trsp                  .trsp   e-baa+n>);

	  L="dri,dri,d id94" name="L93">  93   ">gfog-userspace-ba#L4v33" >;
 * arbitra1ry.  12SERSPACE_VSN "1.1.0&qu/a> * impos1ed on12e" name="L57">  5720;e.c#L80" id="L80" class=" Maxment">/*/*        * restored.
, rdata1dm-log-us1erspace-base.c#L29" id="1L29" 13e" name="L49">  49  9'0etss="pan);
  66  9'0etss="GFP_KERNEL  ="L30">  130#define region_t  9'0etss="pan);
 132
r != -HZ);
  97                r != -    struct 1&quoee(ele1ruct dm-log-userspace-transfer.hf="+code=1uint32_t" class="sref">u1int321t   9'0etss="pan  97me(unsigne#LlongLlong)ivers/md/dm-log-userspace-base.c#L33" +code=dm_consult_user  L="dri,dri,d id name="                reg1ion_t1/a>   980;#L74" id="L74" cuserspace-base.cidm-l.h" cL69" id="L69" cldm-log-userspace-ba#L41" id;#L74" id="L74" cuserspace-base.cidm-l++se.c#L90" id="L90" class="line" name="L90">  901        <1a href="+code=uint64_t" 1class13t;Attempting to contact userspace lo"trsp                  .trsp   e-baa+n>);
  9'0etss="pan
  97me="L88">  88">gfog-userspace-ba#L4v33" >;
uui1[DM_UUI1D_LEN1];
  9'0etss="ctrspan);
  9'0etss="pan  40    1    c1ar *  1int32_ee(ele1r_argc;
linux/module..h>;
  43    ="line" name="L80">  80
       1  * i1_sync_hint gets set when doin*c97" class_can  80
       1  * r1presents the first region tha"line" name="L80">  80
         *1 firs1 zero bit of sync_bits.  Thisar rgv97" idinsace-base.c#L27" id="L27" class="line" name="L27">  27<1pan class1="comment">         * tr1affic1for calls like is_remote_reco*ref="+h" cc#L3code+h" co
#L4scode=e-base.c#L27" id="L27" class="line" name="L27">  27<1p18" class 481        * but be take care in* Wee,#L4sc/spaversef="97" class=implecarea.2"
	specint olin=e-base.c#L27" id="L27" class="line" name="L27">  27<1serspace-1base.c#L49" id="L49" cla1ss="l1ne" nabit of sync_bits.  Thisar rgu.  Ta hrAn example mspan beace-base.c#L27" id="L27" class="line" name="L27">  27<1"+code=ui1nt64_t" class="sref">uin1t64_t15 class="done" id="72/c7/ca4o*ref="+h" cc#L3code+cluste,  27<1"a href="1>;
   ce-base.c#L27" id="L27" class="line" name="L27">  27<1"_argc  52     * Sors/mers="driv will d/dmp ofass="ch" cc#L3code+hrefid>  int a.2"
	purhe cmd/dm-log-userspace-base.c#L83" id="L83" class="line" 153     1    *1Mark and clear requests are h*an>
   1     1* so that we can group, and t*s/md/dm-log-userspace-base.c#L48" id="L48" class="line" nam1ss="comme1nt">         * network t1raffi1 between kernel and userspace        * restored.
  56  9'0etss="sr" class_canlog_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_clog_c {
gfog-userspace-ba#L4v33" se.c#L90" id="L90" class="line" name="L90">  901"+code=sp1inlock_t" class="sref">s1pinlo15uct lis16 19      e.c#L74" id="L74" ci server..."0-base.c#L10" id="L10" class="line" name="L10">  f="+code=1list_head" class="sref">1list_16119      e.c#L74" id="L74" c.trsp                  .trsp   e-ba-base.c#L10" id="L10" class="line" name="L10">  list;1
r ass="sref">data_size  9'0etss="ctrspan);
  9'0etss="NULL_con-base.c#L10" id="L10" class="line" name="L10">  >  611};
  75static int   9'0etss="NULL_con-base.c#L10" id="L10" class="line" name="L10">  >3mempool_t1 *&quoL74" id="L74" cllass="comment">         */
  >/a>;
gfp_1mask<166sref">r ass="sref">data_size);
  9'0etss="NULL_con-base.c#L10" id="L10" class="line" name="L10">  >ass="lin1)
  86,
,=usean>);
  >erspace-1sh_entry" class="sref">f1lush_1ntry  >+code=sp1;
);
  68}
HZ);
  97                ele1ment<17"sref">r != -  9'0etss="rINVAL_con-base.c#L10" id="L10" class="line" name="L10">  _data1)
ele1       linux/modulement)1;
&quoL74" id="L74" c int   66  75static int   67    GFP_KERNEL c">  9'0etss="GFP_KERNEL  ">  73}
);
, const char *HZ);
  97                1ize_t 
  a href="+1code=size_t" class="sref1">siz178rspace-base.ee(ele1 +code=sp1)
DM_UUI1base.c#L719" id="L79" class="line"1 name18e" name="L49">c#L80" id="L80" class=" -logptr
	
r;
r = dm_conan>(unsigne#Llong)ivers/md/dm-logsref">r =   userspace1-base.c#L81" id="L81" cl1ass="18a>                return   82<1/a>    18serspace-base.c#L92" id="L92sref">r = );
  33      1name="L831">  83
	  L="dri,dri,d id94" name="L93">  93   ">gfog-userspace-ba#L4v33" >0]) code+L93">  93   ers/md/dm-log-userspace-base.c#L38" id="L - 1)"ace log server not found.");
HZ);
  97                (2*  71{
siz1">request_type, 
  9'0etss="rINVAL_con-base.c#L10" id="L10" class="line" name="L10">  rda189rspace-base.ee(ele1_size1);
  79        int {
DMERa>                gfog-userspace-ba#L4v33" >0]sult_userspace(  9119erspace-base.c#L71" id="L71"*/         */DMEdm-log-userspace-base.c#L58" id="L58" c"                 82<1>;
DMEg-userspace-base.c#L59" id="L59" clas"               DMERR(&quoL74" id="L74" cINIT_LIST_HEADrspace-base.c#LINIT_LIST_HEAD  71<&e=dm_consult_userint DMEg-userspace-base.c#L60" id="L60" class="               dm-log-userspace-transfer.h="sref">s1et_current_state( gfog-userspace-ba#L4v33"  + 19 &e=dm_consult_usectrspan c">  9'0etss="ctrspan
sp                  .trsp   e-baah" cL0"ace log server not found.");
DMWAR1N(&q1ot;Attempting to contact userspace lo class="line" name="L71">  71{
lui1,  2egion" cl2ss="sref">region;
(ele2e10#i20clude <in_syn20#include20<);
  66,
,=useL67">  67    GFP_KERNEL c">  9'0etss="GFP_KERNEL 20 name="L202">  12#include <203ef=2d3sref">r cc#L!ct userspace lors/md/s_L88" id="L88" class=rs/md/s_L88" =use"ace log server not found.");
&g20;
&quoce-base.c#L71" id="L71"" class="line" name="L92">  92
  97                dm_dev *ce-base.c#L71" id="L71"i server..."9
 20&quo20;
  85);
 207/a>&quo20hedule_timeout" class="207ef=2dze_t (ele2e8/a>&quo20( 2018" clas20="line" name="L18">  18209ef=2d/a>,   43    ="line" name="L80">  80

#i2cclude <);
  98< int DMERa>                r = dm_consult_userspace(uuid, lc->2" name="L212">  12#include <2;r != -  9'0etss="ctrspan, lc->2".h&g2t;
&quoce-base.hhhhhhhhhhhhhhhhh=dm_consult_users/md/s_L88" id="L88" class=rs/md/s_L88" =use9 &e=dm_consult_useys/md/s_L88" ,
,=use                dm-log-userspace-transfer.2h&quo2t;
r cc#Lc#L71" id="L71"i server...");
D2M_LOG21ze_t 
  902Lot;
  92
  97                  182s21/a>,   92
  97                r != -  85);
 2 #include2&<ele2list;2
linux/modul2 .h&g2};
  43    =" Sinss=s="cc#L35">f="d does#L93"change,-log it#L9ws*       * restored.
dm_dev * * This 2limit22   98< int DMERa>                r = dm_consult_userspace(lc->2> * arbitra2ry.  22ze_t   9'0etss="NULL_con9u0, (ass="s)&e=dm_consult_useL88" id="L88" class="line" name&e=dm_consult_useL88"                             data_size, 2/a> * impos2ed on22try 2>18" clas2"L28" class="line" name=2"L28"22erspace-base.cc#L89" id="L89" cl  server...");
  92
f="d of=ers/molinL97">  97                  230#define r != -  85);
 2OUNT 232
ele2.c#L32" i2d="L32" class="line" nam2e="L323f="include/linux/module.h" class="fref">linux/modul2  struct 2&quoL74" id="L74" c int   98         */32"c 2Odm-log-u2ref="+code=dm_dev" class2="sre23>dm_dev *r = u2int322t               reg2ion_t23chedule_timeocc#L);
,
,=use ace log server not found.");
;
,
,=usea- 1]>  8
uui23/a>,   92
u9rs/md/ ref="+c"drivedL93"properly terminate"L97">  97                9
  9'0etss="rINVAL_con-base.c#L10" id="L10" class="line" name="L10"> 2ss="line"2 name="L40">  40    2    c24"sref">r != -  85);
 2242sref">r != -(ele2r_argc;
r != -);
(ele2r struct 2;;
&quoce-base.hhhhhhhhhhhhhhhhhhref="+code=log_c" clbleilog_mlogpace-base.c#L98" iclbleilog_mloglog-uivers/md/dm-log-userspace-base.c#L33" +code=dm_consult_useclbleserspace-base.c#lble=use me&e=dm_consult_usesref">r = r =        2  * i24>dm_dev *ce-base.cc#L89" id="L89" cl  server..."       2  * r24c, const char *  92
  97m                       *2 firs24ze_t          * tr2affic248rspace-base.ee(ele2p18" clas2 482       e="L85">  85);

  49  71{
uin2t64_t25">region_t);
r != -  71{
r != -  71{
  9'0etss="ctrspan     2    *25"string">&quoeD/md/ace log server not found.");
   2     25>dm_dev *ce-base.c#L71" id="L71"     DMERR(  9'0etss="sref">gfp_maskdTan>);
  9'0etss="ctrspan         * network t2raffi25c, const char *DMERR(      56(2*log_cDMEgass=xt c">  9'0etss="cass=xtskdTan>);
r =  2serspace-2base.c#L57" id="L57" cla2ss="l258rspace-base.ee(ele2"+code=sp2inlock_t" class="sref">s2pinlo25/a>[DM_UUI2ref="+cod2e=list_head" class="sref2">lis26 19      ref="+code=ESRCH" class="sref">ESRCH)
2list_26119(ele2list;2
  32ace-basvoi#L69" id="L69" clsr" class_dan c">  9'0etss="sr" class_danlog_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_cmempool_t2 *);
/a>;
  75static int log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"2fa>gfp_2mask<26                 86(voi#)>);
  98< int DMERa>                r = dm_consult_userspace(lc->2>erspace-2sh_entry" class="sref">f2lush_26>request_type,   9'0etss="NULL_con9u0,a>, lc->2>+code=sp2;
  9'0etss="NULL_con9ult_userspace  9'0etss="NULL_cons                 68}
  79        int ele2ment<27">region_tr = r =         int r != -  98< int DME-userspace-base.c#L33" 9L69" id="L69" clsref">r = r = linux/modul2ment)2;
&quoL74" id="L74" c class="line" name="L71">  71{
DMERR(  9'0etss="sref">gfp_maskdT                dm_dev *  71{
               2ize_t siz278rspaee(ele2 +code=sp2)
DM_UUI2base.c#L729" id="L79" class="line"2 name28e" naace-base.c#L74" id="L74" class="linepookuspen                log_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_cr;
r e.c#L74" id="L74" ci server..."  82<2/a>    28serspace-basect   75static int log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"2name="L832">  83dm_dev *  98< int DMERa>                r = dm_consult_userspace((, lc->2serspace-2base.c#L85" id="L85" cla2ss="l28c, const char *  9'0etss="NULL_con9u0,a>, lc->2ace-base.2c#L86" id="L86" class="l2ine" 28chedule_timeout(2M_ULOG_Ccode=datalt_userspace  9'0etss="NULL_con9ult_userspace  9'0etss="NULL_cons               siz28try 2rda289rspace-base.ref="+code=ESRCH" class="sref">ESRCH)
2);
ee(ele2     2   if ( in_syn2 id="L91"2 class="line" name="L91"2>  9129erspaace-base.c#L74" id="L74" class="linepostkuspen                log_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_c  82<2>;
DMERR(&quoe.c#L74" id="L74" ci server..."  75static int log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"2="sref">s2et_current_state(                 86  98< int DMERa>                r = dm_consult_userspace((, lc->2ef">DMWAR2N(&q2ot;Attempting to conta href="+code=datalt_userspace  9'0etss="NULL_con9u0,a>, lc->2;lui2,   9'0etss="NULL_con9ult_userspace  9'0etss="NULL_cons               region;
  79        int (ele30 name="L302">  12#include <303ef=30f="include/linux/module.h" class="fref">linux/modul30.h&g30;
log_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_cdm_dce log server not found.");
&quo30;
  75static int log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3e8/a>&quo30( 3018" clas30="line" name="L18">  18309ef=3d/a>, r = 0-base.c#L10" id="L10" class="line" name="L10"> 31gion" cl3#include <  49);
  98< int DMERa>                r = dm_consult_userspace(lc->3 10#i3cclude <r != -  9'0etss="NULL_con9u0,a>, lc->31#include3 <r != -  9'0etss="NULL_con9ult_userspace  9'0etss="NULL_cons                 12#include <3;linux/modul3".h&g3t;
&quoref="+code=ESRCH" clasi server..."(ele3h&quo3t;
D3M_LOG31ss="cace-baslass="sref">DMERint32"comment">         */32"clog_c {ers/m_f="ef="drivers/md/dm-logf=""sref">log_crequce log server not found.");
  183s31/a>,   75static int log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3#L19" id=3"L19" class="line" name=3"L19"32L79">  79        int r = ele3list;3
linux/modul3 .h&g3};
  80
  80
 * This 3limit32between kernel and userspace line" name="L80">  80
 * arbitra3ace-b32ze_tr_een     2og-ushr2ef, ws="sr2D_Lce-bamit3.2ze_t * arbitra3ace-b32ze_t3 92
dm_dev *ele2.3#L32" i2d="L32" class="l3ne" n33rspace-base.c#L75" ic" ers/m_f=""sref">lo 3limit3 {ers/m_f="ef="drivers/md 3limit32blog_crequname="L312">  12);
&quoe.c#L74" id="L74" ci server..."dm_dev *ct   >/a>;
;
  >/m-log-u2ref="+codm-logplog-uivers/md/dm-logrequev *ct reg23on_t233e.c#L98" id="L98" class="lin"L10" class="line" nam="L10">  >/a>;
 *ct ,=use3ace l33e.c#L98" id="L98" class="linva href="driversL88" id="L88" class="line" na)                *ct ;3log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3#L19" id=3"L19" class="line" name=3"L19"32L79">  79        int   92
linux/modul3"BLE);3DMERa>e" name="L98">  98< int r = dm_consult_userspace(r != -ele2r_argc;
;
r != - * impos2ed on22try 23_c" clble3log_mlogpace-base.c#L98"3iclbl34dm_dev *;
  92
linux/modul3 md/s_L88"3id="L88" class=rs/md/s_L38" =u3e"    lude/linux/module.h" class="fref">linux/modul3 m18" clas38" clas2 48
 * arbitra3ace-b3nt"> * This ef="in2 so that we can group, and t*slass="lineis_d="Lnline"  71{3);3erver not found.")35nclude2 <r{
_een     2og-ushr2ef, ws=a hum-logat2 so that we can group, and t*slass="lineis_d="Lnline" struct 2371{
 39'0etse2 <DMERR(<3pan c35m-log-3/&quo3class="commenIflf2">ucan_bog1uf2">uois#set,r"sr2D_Liss=diately2 so that we can group, and t*slass="lineis_d="Lnline" ine" nam3class="sref">DMERR( 3   * arbitra3ace-b32ze_tDMEgass=x3 c"> 35&<lo ef="in {ers/m_f="ef="drivers/md ef="in2 log_crequname="L312">  12r != -);
;3
r e.c#L74" id="L74" ci server..."23;
  82<2/a>    28serspace-basect   >/a>;
;
DMERR("L10" class="line" nam="L10">  >/a>;
 *ct   75static int <3 href36uot;#L35" d="L3);
 *ct log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3#L19" id=3"L19" class="line" name=3"L19"32L79">  79        int linux/modul3 NULL c"> 39'0etss="NULL_con9u0,a>,3 39'0etss="NULL_con9ult_us3rspac36 * arbitra3ace-bbbbbbbbb* We Lan neup,r"sspond ele23ent<237erspace-base.c#L48" id="L48" class="liset.  This#Ls beca="l/ hoog-r macclue Louldisel/  9" id="Lso that we can group, and t*slass="lineis_d="Lnline""ist;3_consult_userog_rs/ef">r3/a> =37nclude2 <cclumarkdog-u2/dm-loout-of-="in.  Iflw2sernf2">ut go"Lso that we can group, and t*slass="lineis_d="Lnline"" 61238" ipug_rs/md/ne" name="398"> 37+codee2 < * Thilass=sk, ws=mightdoginklog-u2/dm-lois#L8-="in"Lso that we can group, and t*slass="lineis_d="Lnline""etss="sr3
&quo3class="comm/li2nux/ddlikelyp     L19nectm-losr2oue 9" id= from2oue macclue "+cos.)"Lso that we can group, and t*slass="lineis_d="Lnline""ss="lin23"+code=size_t" class="s23ef">237s="comment"> * arbitra3ace-b/li2nux/d"Lso that we can group, and t*slass="lineis_d="Lnline""space-ba3"sr2"erspace-2code=size_3" cla37&<still=mightdbl/  problem2iflog-umirror Lacheslog-u2/dm-l"Lso that we can group, and t*slass="lineis_d="Lnline""ULL c"> 3)
 3" id="L79" class="line"23name237 * arbitra3ace-bbbbbbbbb* ogatois#aumirror problem.2 so that we can group, and t*slass="lineis_d="Lnline"         3   );
  79        int   75static int <3 href38rk and clear requests are ="line" name="L80">  80DMERR(e              23;
  98< int r = dm_consult_userspace(r != - 39'0etss="NULL_con9u0,a>,3lc->2ac                 ;
r != - 39'0etss="NULL_con9ult_us3rspac3  9'0etss="NULL_cons                          * impos2ed on22try 23a href="23code=rdata" class="sref23>rda238="+code=lc" c"sr2D_L"2>;
linux/modul3      3   if (r = log_cDMEgass=xt c">  9'0etss="cass=xtskd,";
DMEgass=xt cflush_=ist {ers/m_f="ef="flush_=istrequce log server not found.");
r e.c#L74" id="L74" ci server..."DMERR(    28sersp" name="L49">  49)         3     DMEgass=xt cfe {ers/m_f="ef="fN" clev *ct   75static int <3 href3"+codev *ct  3hedule_timeout" class="23ref"239e.c#L98" id="L98" class="lin=ist_for_each_="Lry {ers/m_f="ef="=ist_for_each_="Lrye=r" class="sref">r(( *ce-base.c#L71" id="L71"       9'0etss="L98" class="line" name="L98">  98< int r = dm_consult_userspace(rr != - 39'0etss="NULL_con9u0,a>,3lc->2;<                         r m-logplog-uivers/md/dm-logrequ">r != - 39'0etss="NULL_con9ult_us3rspac3  9'0etss="NULL_cons        2 ase.c#;"sr2/a>r m-logplog-uivers/md/dm-logrequ)">r != -#i34clude <  9'0etss="L98" class="lin"+code=DMWARN" class="sr3" name="L312">  12#include <3;linux/modul34/sp      4               2  * r24c, const char *  12#include <403ef=40ers/md/d2m-log243srefffffffffbreakclude/linux/module.h" class="fref">linux/modul34/3name="L40="sref">DMERR(linux/modul34ase.c#L984ass="lineookums *    28serspace-basect linux/modul34e" name="475">  75static int <4 href40"    lude/linux/module.h" class="fref">linux/modul3418" clas34="line" name="L18">  18349ef=34/a>, log_cDMEgass=xt c">  9'0etss="cass=xtskd,";
DMEgass=xt cflush_=ist {ers/m_f="ef="flush_=istrequce log server not found.");
  79        int  49'0etss="NULL_con9ult_us4rspac4  9="+code=useRR" ="L1nelog_c#L35" id="  494N3name="L4;
DMEgass=xt cfe {ers/m_f="ef="fN" cl,ref">DMEgass=xt ctmp_fe {ers/m_f="ef="tmp_fe79">  79        int DMERR(LIST_HEAR2N(rlinux/modul34h&quo4t;
  >/a>;
linux/modul34h        4ACE_VSN" class="sref">D34_LOG34ss="cace-baslass="sref">DMERint32"comment">         4/32"c  184s41rspac  75static int <4 href41 * arbitra3ace-bbbbbbbbb*22>dm_dev *r *ce-base.c#L71" id="L71"     " name="L49">  494list;4
  94.h&g34;
r(rspace(( *ce-base.c#L71" id="L71"     ;
]nt r m-logplog-uivers/md/dm-logrequme="L49">  494l&quo4">  80
gfp_lass="sr5" ic" ers/m_f=csers="line" name=3"L1unL79">++me="L49">  494l        4"drivers/md/dm-log-3/OG_4SERS342s="cace-baslass="sref">DMERint32"comment">         4md/dm-log4userspace-base.c#L91"3##4nclud42/aNULL c">  9'0etss="NULL_con              <=ist_move {ers/m_f="ef="=ist_movee=r"          rRist {ers/m_f="ef="=istrequata_size, 2/a>linux/modul34m18" clas4L28" class="line" name=24L28"242a>, r =   9'0etss="NULL_conase.c#L75" ic" (rlinux/modul34me="L92">4 92
"ult_ npace(lc->31breakclude/linux/module.h" class="fref">linux/modul34ef">ele2.4#L32" i2d="L32" class="l4ne" n43ers/md/d2m-log243srefclude/linux/module.h" class="fref">linux/modul34 struct 24a href="+code=dm_target24 cla243rk and clear requests are ="line" name="L80">  80  98< int r = dm_consult_userspace(r != -gfp_lass="srrrrrrrrrrrrrrrrrr         class="sref">rr != -reg24on_t243="+code=lc" class="sref">lc->2acan"*#;"sr2/a>  >/m">r != -,=use4ace l43/aNULL c">  9'0etss="NULL_cons        an  12#include <3;linux/modul34o18" clas4lass=rs/md/s_L88" =use>;4       2  * r24c,dev *ce-base.c#L71" id="L71"       92
  9'0etss="NULL_conaa href="include/li3uu"3iGroer send "+coed.  Attempt2oue-by-oue.b*22>dm_dev *(linux/modul34BLE);4lc  98< int r = linux/modul34Bf">ele2.4">ele2r_argc;
linux/modul34lstruct 24linux/modul34_c" clble4log_mlogpace-base.c#L98"4iclbl4440etss="ctrspclude/linux/module.h" class="fref">linux/modul34_de=dm_co4               92
successfu"sydprocessed2 so that we can group, and t*slass="lineis_d="Lnline4m18" clas48" clas2 48ud bylog-uc="ser.2 so that we can group, and t*slass="lineis_d="Lnline4span>
 * arbitra3ace-b/li2nux/d22>dm_dev *(linux/modul34 LE);4erver not found.")45rspaace-base.c#L74" id="L74" class="linepostkuspen 4 ass="sre471{
    28serspace-basect  49'0etsclude/linux/module.h" class="fref">linux/modul34 c" clble4href2"/a>4 ot;DMERR(<4pan c45m-log-3/&quo3class="com"32 so that we can group, and t*slass="lineis_d="Lnline4 ine" nam4class="sref">DMERR( 4   * arbitra3ace-b3nt"> * Thisflush2 so that we can group, and t*slass="lineis_d="Lnline4 d/s_L88"4" class="sref">DMEgass=x4 c"> 45&< * arbitra3ace-b3nTg-uflush happens#L8 twoist_ges.  First,id=2sendsu="s2 so that we can group, and t*slass="lineis_d="Lnline4)
-losg-u=ist.  Thpnp t2 so that we can group, and t*slass="lineis_d="Lnline4list;4
2itofor eupryd2/quem-.2 so that we can group, and t*slass="lineis_d="Lnline4>/a>;
ot;  75static int <4 href46m-log-3/&quo3class="commenAdditm-l="sy, ws=Louldiimples="c/ hoog-r th23a="sgat2 so that we can group, and t*slass="lineis_d="Lnline4ass="lin24
 * arbitra3ace-b3nsendsuog-u2/quem-s2up to2og-ushr2efo-u2/duc/a>2og-2 so that we can group, and t*slass="lineis_d="Lnline4ad/s_L88"4e.c#L98" id="L98" class=4line"46&< 49'0etss="NULL_con9u0,a>,42c="iit.2 so that we can group, and t*slass="lineis_d="Lnline4>f="+cod249'0etss="NULL_con9ult_us4rspac46 * arbitra3ace-b*2 so that we can group, and t*slass="lineis_d="Lnline4"+code=e24ement" class="sref">ele24ent<247erspace-base.c#L48" id="L48"/dRsr2D_s: 0"onusuccess, < 0"onu"+cour"2 so that we can group, and t*slass="lineis_d="Lnline4"ist;4_consult_userog_rs/ef">r4/a> =47nclude2 <248" ipug_rs/md/ne" name="498"> 47rspace-base.c#L75" ic" ers/m_f=""sref">loflushlog-userspace-bm-logf=""sflush2 log_crequce log server not found.");
&quoe.c#L74" id="L74" ci server..."dm_d" name="L49">  494"ot;247e.c#L98" id=";
log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3#L19" id=3"L19" class="line" name=3"L19"32L79">  79        int rlinux/modul34"ULL c"> 4)
rlinux/modul34"f="+cod24" id="L79" class="line"24name247+code=usean>);
DMEgass=xt cfe {ers/m_f="ef="fN" cl,ref">DMEgass=xt ctmp_fe {ers/m_f="ef="tmp_fe79">  79        int r = DMERa>spin_og1u_irqsave {ers/m_f="ef="spin_og1u_irqsavee=r"          (linux/modul34         4       9="+code=useRR" =ist_spli/md eit {ers/m_f="ef="=ist_spli/md eite=r"          linux/modul34e" name="475">  75static int <4 href48erint linux/modul34ase.c#L824" id="L84" class="line"24name248eRR" class="sref">DMERR(spin_unog1u_irq"sstore {ers/m_f="ef="spin_unog1u_irq"sstoree=r"          (linux/modul34 ot; *ct  49'0etss="NULL_con9u0,a>,4, 2/a>, 2/a>);
 49'0etss="NULL_con9ult_us4rspac4  9'0etss=""sr2D_Lame="L49">  494a href="24code=rdata" class="sref24>rda248a>, r = DMERR(e" name="L98">  98< int r = linux/modul34     4   if (       2  * r24c, const char *  79        int   94 ame="L834s="sref">DMERR(  98< int r = linux/modul34         4            2  * r24c, const char *  75static int <4 href49  9'0etss="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
  98< int r = dm_consult_userspace(dm_con91"1l3d1FLUSH_userce-baslass="sref">DMERint32"comment">         4; href="249'0etss="NULL_con9u0,a>,4lc->2;  12#include <3;  12#include <3;  12#include <3;linux/modul34NULL c"> 49'0etss="NULL_con9ult_us4rspac49" naace-base.c#L74" id="L74" class="linepookuspen  510#i35clude <:ce-base.c#L74" id="L74" class="linepookuspen  511#i35class="line" name="L91"25WARN"50="+code=lc" c-3/&quo3class="com"32 so that we can group, and t*slass="lineis_d="Lnline50 name="L502">  12#include <503ef=50+codee2 <DMERR(  75static int <506ef=50m-log-3/&quo3class="comm/li2nux/d22>dm_dev *r(rsa_size, 2/a>( *ce-base.c#L71" id="L71"       75static int <5 href50/aNULL c">  9'0etss="L98" class="lin=ist_del  L="dri,dri,d =ist_dele=r" a_size, 2/a>rRist {ers/m_f="ef="=istrequnclude/linux/module.h" class="fref">linux/modul3518" clas35="line" name="L18">  18359ef=350="+code=lc" class="sre, 2/a>r(linux/modul3519" clas35='0etss="NULL_con9ult_us5er...509RR" class="sclude/linux/module.h" class="fref">linux/modul35;
r(rsa_size, 2/a>( *ce-base.c#L71" id="L71"      59'0etss="NULL_con9u0,a>,5, 2/a>rRist {ers/m_f="ef="=istrequnclude/linux/module.h" class="fref">linux/modul35NULL c"> 59'0etss="NULL_con9ult_us5rspac51ers/md/d2m-log243srefe, 2/a>r(linux/modul35N3name="L5;
linux/modul35Nse.c#L985         *       2  * r24c, const char *D35_LOG351="+code=lc" class="sr"ef="s            table_eupnt {ers/m_f="ef="   table_eupnte=r" class="sref">r = rrlinux/modul35N" name="5L74" id="L74" class="lin5log_c51"    lude/linux/module.h" class="fref">linux/modul35L18" clas5s="line" name="L18">  185s51="+code=lc" c"sr2D_Lclass="comment">       2  * r24cclude/linux/module.h" class="fref">linux/modul35N9" clas3575">  75static int <5 href51e.c#Lclude/linux/module.h" class="fref">linux/modul35   r = ;5
&g35;
2un=esslabsolutelyd2/quired.2 so that we can group, and t*slass="lineis_d="Lnline5l&quo5">  80
 * arbitra3ace-b322>dm_dev *requname="L312">  12,  *ce-base.c#L71" id="L71"       9unsigneddloa>2pace(5 92
log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-base.c#L91"3#L19" id=3"L19" class="line" name=3"L19"32L79">  79        int DMEgass=xt cfe {ers/m_f="ef="fN" clev *ct ele2.5#L32" i2d="L32" class="l5ne" n53  32ace-basvoi#L69" id="L69" clsr" class_dan c">  95 struct 25a href="+code=dm_target25 cla253erint dm_dev *DMERR(fe {ers/m_f="ef="fN" clTa href="drivers/mmempool_="src {ers/m_f="ef="mempool_="srce=r" class="sref">r  12linux/modul35ode=dm_co5sult_usec#L35" d="L3 ser5er...53  9'0etss="srme="L312">  12linux/modul35o        5ion_t" class="sref">reg25on_t253s="cace-baslass="sref">DMERint32"comment">         5od/dm-log5vers/md/s_L88" ,=use5ace l53e.c#L98" id="L98" class="linspin_og1u_irqsave {ers/m_f="ef="spin_og1u_irqsavee=r"          (linux/modul35o18" clas5lass=rs/md/s_L88" =use>;5r *ct   92
DMERR(fe {ers/m_f="ef="fN" clsult_userog_rs/ef">r m-logplog-uivers/md/dm-logrequTa href="drivers/m6ver[a2E2">r m-loga2o th s/m_f="ef="91"1l3d1MARK_REstrequnclude/linux/module.h" class="fre         DMERR2pacef="=ist_spli/md eite=r" 5     54tmp_fe79">  79        int , 2/a>linux/modul34ase.c#L824" id="L84" class="line"24name248eRR" class="sref">DMERR(spin_unog1u_irq"sstore {ers/m_f="ef="spin_unog1u_irq"sstoree=r"   5lush_oue_5y_oue {ers/m_f="ef="flus5_oue_54c;
  185s51="+coriverlog_5s/md4pace-4ase.c#L98" il5g_rs/5d/clude/linux/module.h" class="fref">linux/modul34_c5 clble4lo5_mlogpace-base.c#L98"4ic5bl44454
linux/modul35   linux/modul35    45&<f=So,i2nuxv" na">suceslEgass  Iendsuoworat This#="sref">=x4 c"> 45&<sucesr_eac/li2nux/d"Ls=x4 c"> 45&<r = ele2doesamers=x4 c"> 45&<sucearbitatre * arbf;li2nmig-se=x4 c"> 45&<55 t*slass="lineis_d="Lnline5.h<-3/ 45&< 49'0etsclude/linux/modul"L32" class="l5ne" n53  32ace-basvoi#L69" id="L69" clsr" span clas5="com45dm_dev *  12 * Thi5flush2 so that we can gr5up, a55srefRESUMEuidnst char *,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<log_cDMEgass=xt c">  9'0etss="cass=xtskdTa href="drivers/md/dm-log-userspace-bashrmment">5* arbitra3ace-b3nTg-uflu5h hap56ref="drs/md/s_L88" i4="L8845e.c#L98" id="L98" class546erspace5base.c#L48" id="L48"* im5tr/ma56ass="sref">DME#L98" il5g_rs/5d/clude/linux/module.h" class="fref">linux/modul34_c5 clble4lo46nclude25<;4
f="=and t*sc5=u that wehurt"frludeany way, excepL502">  12#include <503ef=50+codee2 <  12#include <503ef=50+codee2 < * arbitra3ace-b3nsen5suog-56="L98" class="linspin_og1u_irqsave {ers/m_f="ef="spoi#L69" id="L69" clsr" class_dan c">  95 struct 25a href="+code=dm_target25 cla253erint dm_devlinux/modul34ase.c#L824" id="L84" lt; 49'0etss="NULL_con950,a>,57ment">       2  * r24e=uuid" class="srERRlush_=g1u="line" ERRcode=dldiimples="c18"ref">"Fss="l""in_="Lry esh_t we aincc5=2p/a>f="="&<linux/modul34ase.c#L824" id="L84" ="lineis_5="Lnline4>f="+cod249'0et5s="NU57st_for_each_="Lry_safs5_oue_54c;
DM5h" class="frefde/linore {ers/m_f="ef="spin_unog"+code=  5                     4" 5157.");
loflushlog-users5ace-b57RR" =ist_spli/md eit {ers/m_f="efss="srme="L312">  12linux/modul35o        5ion_t" class="sref">reg25on_t253s="cace-baslass="sref">DMERint32"comment">         5od/dm-log5vrs/md/d3m5log31>requce log server 5ot fo57ef">DMERR(fe {ers/m_f="erqsave {ers/m_f="ef="spin_og1u_irqsavee=r"          ,f="cass=xtskdTa href="drivers/md/dm-log-userspace-bass4"/a>;5r247e.c#L98"" name="5="L92">  92
DMERR(fe {ers/m_f="ef="fN" clsult_userog_rs/ef">r m-logplog-uivers/md/dm-logrequTa href="drivers/m6ver[a2E2">r m-loga2o th s/m_f        4      79        ine5/3name="L50="sref">DMERR2pacef="=ist_spli/md eite=r" 5     54tmp_fe79">  79        int , 2/a>linux/modul34ase.c#L824" id="L8 c5#t;r,4       s5_oue_54c;
);
(spin_unog1u_irq"sstore {ers/m_f="ef="spin_unoef="+code5DMWA4N" cl48/aNULL c">  5="+co58shr2efosr2f="iitothem.  Thie/linux/module.h" class="fref">linux/modul34_c5 clble4loatic int 54 href48erint  45lsr" span get_at i3u_worklinux/module.h" class="fref">linux/modul34_c5 clble4loas/md/d3m5e"24name248eRR" class="s5ef">D58houghhis#="sin-#L10s=x4 c"> 4linux/module.h" class="fref">linux/modul34_c5 clble4loa4"/a>linux/modul34_c5 clble4loa_d="L75"5de=lc" cn 2 class="comme5t"=is58ref="driv5rs/md52me.h" class=""lineis_doup, aef">linux/me-base.c#L74" id="L74" class="linepookuspen  511#i3="mark_=i5trequnta_siza_sizf="+cod5=useR58+cod5=dmr_eachult_usec#L35" id5" ser52nclude2 < 45&<5 5 ele24ent<247erspace-base.c#L48" id=get_at i3u_workL69" id="L69" clsr" span get_at i3u_workli_dev *  94 ame5"L834s="sref">DMERR(5span459RR" =ist_spli/md eit {ers/m_fizea> *s/md/d3m5roer2 logclass="sref">r<5a> = 5a href="+code=18" clas5L28" class="line" name=25L28"252a>,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<gp_lass="srrsafee=r" class=".'0etss="sref">gpIends+code=lc" c;
dm_dev *2/a>DMERint32"comme5t">  595="line" name=              5mpkd="Lnline4>f=So,pkdref=_54c;
lc->2;<6e="L360 class="fref">linux/modul35L18" clas5s="line" name=612#in6lude <3;  79        int   79        int , 2/a>);
f=So,pkdref=" class="fref">linux/modul34ase.c#L824" id="L8 c6350'0etse6 <DMERR(fe {ers/m_f="e">  75static int <4 href49  9'0etss="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
linux/modul34ase.c#L824" id="L8 c6360'0etse6        4     r nt">         4; linux/modul34ase.c#L824" id="L8 c6370'0etse6  const char *linux/modul34ase.c#L824" id="L8 c6380'0etse6 ode=m-logf=""sro_requem6"L71"60 =ist_empty {ers/m_f="ef="=ist_emptye=r" a_size6ule.h" cl6ss="fref">linux/modul3516" cla635="line" namechult_usg-3/OG_5d/dm-log5userspace-base.c#L91"3<4 href49  9'0etsspkd="Lnline4>f=So,pkdref=.             5md                   s5_ouede=datalt_userspace(fe {ers/m_f="e">  75static int <: (i <)href49  9'0etsspkd="Lnline4>f=So,pkdref=.             5m.'0etss="sref">gpIends54c;
(spin_unog1u_irq"sstore {ers/m_f="ef="spin_un6ule.h" cl6ss="fref">linux/modul35N6LL c"61shr2efosr2f="iitothem.  Thie/linux/module.h" class="fref">linux/modul34_c5 clble4l62/a> 45lsr" span set_at      i3ulinux/module.h" class="fref">linux/modul34_c5 clble4l6250'0etse6hreflush_="Lry_pool {ers6m_f="61houghhis#="sin-#L10s=x4 c"> 4linux/module.h" class="fref">linux/modul34_c5 clble4l6d/d35-log651erint eleus="efaslassnf="=and t*s>linux/mlinux/module.h" class="fref">linux/modul34_c5 clble4l6d70'0etse6    5ACE_VSN" class="sre6">D3561ref="driv5rs/md52me.h" class="dul35   <&<linux/module.h" class="fref">linux/modul34_c5 clble4l6d80'0etse6_f="ef="   table_eupnte=6" cla61+cod5=dmr_eachult_usec#L35" i5&< *       2  * r24="ef="r nt">         4;_dev *  186s51="+code=lc" c"sr26_Lcla6s="com/dm-log-users5ace-b51e.c#L98" id="L98" class="l6clas3575"6  75static int <5 hr6f51e.62   r = 6a 5re62de=log_=Hclas18" clas5L28" class="line" name=25L28"252a>,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<linux/modul35Nse.c..43  9'0etss="sref">gp_lass="srrsafee=r" class=".'0etss="sref">gpIends54c;
  80
6de=DMWARN6 class="sr3Lot;
6a hre62dul35o18" clas5lass=rs/md/s_pkd="Lnline4>f=So,pkdref=.             5md            rf=So,pkdref=.             5m.'0etss="sref">gpIend_use=datalt_userspa..43  9'0etss="sref">gp_lass="srr)href49  9'0etssi   i3uhref="+code=faii   i3uli_df="drivers/m91"1l3d1MARK_REGION {ers/m_f="ef="96o18">  186class="li5me="L92">5 92<6a>
DMERa>spin_og1u_i">  75static int <4 href49  9'0etss="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
,f_SYNClush_=g1u="line" name=3SET_REa>,f_SYNCchult href="include/li3uux/2 so that we c5=iverlog_6class="s36mef="+cod5m-l-base.c#L106 id="610"5class53="++++++++++++++++++++++++++e=r" claspli/md eite=r" 5   pkd="Lnline4>f=So,pkdref=erusec#L35" d="L3 ser4erpkd="Lnline4>f=So,pkdref="t href="include/li3uux/2 so that we c5=iverlog_6cgroup, a6"+code=log_d="L75" class6"li5e6">ele2.5#L32"                          nt">         4;          4; linux/modul34ase.c#L824" id="L8 c6_usec#L356 id=" serv5r...&53eRR" c6ass="63fffffffffbrea5clude5linux/5L18" clas5s="line" name=6lush_="Lr6_poolrequname="L312">  16linux/modul34_c5 clble4l6class="fr6f">linux/modul35ode=dm_c65sult63ws=Louldiimples="c/ hoog-r tssssssss*a href="inbe niceimentth 2  aains5portil79">:cs;linux/module.h" class="fref">linux/modul34_c5 clble4l6ers/md/s_688" ,=use5ace l53e.c6L98" 63+cod5=dmr_eachult_usec#L35" ssssssss*aHowf="f.2 s5 theasy em hrefaindetecg-2 so:csolvce-base.c#L74" id="L74" class="linepookuspen  511#i6lude/linu6/module.h" class="fref">6inux/63 href="include/li3u.h" classssssssss*5&< *ct        s5_oue_54c;
D6ERR(spin_unog1u_irq"sstore {ers/m_f="ef="spin_un6g1u_irq"s6toree=r"   5lush_oue_5y_6ue {e64shr2efosr2f="iitothem.  Thie/linux/module.h" class="fref">linux/modul34_c5 clble4l6ef="fluf=6ef="fl5sh_=istrequnclude6linux64re * arbf;li2nmig-se=x4 c"> 45lsr" span get_ i3u_talt_91nux/module.h" class="fref">linux/modul34_c5 clble4l6eusec#L356oree=r"   5llass_dan m-l6g243s64houghhis#="sin-#L10s=x4 c"> 4linux/module.h" class="fref">linux/modul34_c5 clble4l6L18">  186s51="+coriverlog_5s/6d4pac6-4ase.c#L98" il5g_rs/5d/cluds* Ifxthereinclany sortioail79">:c w we *slsultref="up, er="f.linux/module.h" class="fref">linux/modul34_c5 clble4l6Llass="fr6-base.c#L98"4ic5bl44454<6a>
:cd5" ser52nclude2 < 45&<suceslEgass  Ie6dsuow65ele24eusecace-b322>dm_dev * *65"4 cl/dm-log-users5ace-b51e.c#L98" id="L98" class="l6> = suc6arbit65RR" =ist_spli/md eit {ers/m_fizea> *55 t*6lass="lineis_d="Lnline5.6<-3/<65ef">DMERR(fe {ers/m_f="eu..43  9'0etss="sref">gup_lass="srrsafee=r" class=" i3u_talt_href="+code=fai i3u_talt_91_d_54c;
  186>{
649'0e6547s="sr2 ase.c#L82/ms5L28" class="line" name=25L28"252a>,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<  79        iddata_fize            linux/modul34ase.c#L824" id="L8 c6fRESUMEui6nst char *);
 49'="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
       2  * r24="ef="rnt">         4; linux/modul34ase.c#L824" id="L8 c6hrmment">6* arbitra3ace-b3nTg-uflu6h hap66st_for_each_="Lry_saffffffffffffffffffe=r" claspli/md eite=r" 5    i3u_talt_href="+code=fai i3u_talt_91_ders/md/dm-logrequTa hrddata_fize            linux/modul34ase.c#L824" id="L8 c646erspace6base.c#L48" id="L48"* im6tr/ma66RR(spin_unog1u_irq"sstore {ers/m_f="ef="spin_un646nclude26<linux/modul35N3name="L5;
ele2.5#L32"         ist_emptye=r" a_size, 2/a>;
  79        int   79        int   79        int , 2/a> * arbitra3ace-b3nsen6suog-66 =ist_empty {ers/m_f="ef="=ist_emptye=r" a_size6lt; * 49'0etss="NULL_con960,a>,67ment"5h" class="frefde/linore {ers/m_f="ef="spin_uno6="lineis_6="Lnline4>f="+cod249'0et6s="NU67ref="drs/md/s_L88" i4="L8845e.c#L98" id="L98" class6"lineis_d6"Lnline4"+code=e24ement"6class67cesr_eac/li2nux/d"Ls=x4 c">e/linux/module.h" class="fref">linux/modul34_c5 clble4l6"+code=  6                     4" 6167m53 9">ele2doesamers=x4 c"> 45l  L="dri,seleuslinux/module.h" class="fref">linux/modul34_c5 clble4l6""drivers6""sref">loflushlog-users6ace-b67re * arbf;li2nmig-se=x4 c"> 4linux/module.h" class="fref">linux/modul34_c5 clble4l6"n kernel6log31>requce log server 6ot fo67se2 <linux/modul34_c5 clble4l6"t 24712un=esslabsolutelyd2/quired.2 so that we can group, and t*slass="6g_d="L75"6class="li4"ss="lin24"+co6e=siz67ef="driv5rs/nt<247erspace-base.c#L48" id=seleushref="+code=fail  L="dri,seleusli_dev *"srrsafee=r" class=" eleus_cRES *       2 log_c, 2/a>DMERa>spin_og1u_ifizea> * *  6="+co68de=log_=Hclas18" clas5L28" class="line" name=25L28"252a>,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<rD68 href="+code=1witchse=datalt_userspafeleus_cRES *dm_deSTATUSTYPE_INF_e=lo:dm-log-users5ace-b51e.c#L98" id="L98" class="l6a_d="L75"6de=lc" cn 2 class="comme6t"=is68=ist_for_each_="Lry_safee=r" class="nd.");
 49'="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
dm_de
(linux/modul34ase.c#L824" id="L8 c6 2/a>linux/modul34ase.c#L824" id="L8 c6ref="+4)
6a href4"drivers/md/dm-lo6-user69 class="fref">linux/modul35L18" clas5s="line" name=6d flush_b6_groer2 logclass="sref">6 69st_for_each_="Lry_saf2poolrequnclude/linux/module.h" class="frd/dm-log-users5ace-b51e.c#L98" id="L98" class="l6x/modul346/a>     4   if (, 2/a>         4;
  oid2bog1u/a>18"ref">"%s 1 COM_FAILURE"&< _d="Lnline4>f=So,i2nuxv""252a>,           ,  hhhh     linux/modul34ase.c#L824" id="L8 c6rtic int 6"L834s="sref">DMERR(6span469>ele2.5#L32"         5h" class="frefde/linore {ers/m_f="ef="spin_uno6>s/md/d3m6roer2 logclass="sref">r<6a> = 69 href="+code=dmrsa_sibreak class="fref">linux/modul34ase.c#L824" id="L8 c6r4"/a>dm_deSTATUSTYPE_TABLEe=lo:dm-log-users5ace-b51e.c#L98" id="L98" class="l6*_d="L75"6, const char *, 2/a>dmRN"51dartrequnclude/linuxRN"51dartr91_d href4NULL c"> 49'18"chux/module.h" cla18"chu79">  79        int 18"ref">&x/2  &x/2 &<linux/modul34ase.c#L824" id="L84"6>2/a>DMERint32"comme6t">  699space-bm-logf=""sro_ef"249s="cace-bf="fN" clTa href="drivers/mmempool_="src {ers/m_RN"51dartrequnclude/linuxRN"51dartr91_d)s+code=lc" c;
lc->2;<7e="L370ment">       2  * r24e=uuid" class="RN"51dartrequnclude/linuxRN"51dartr91_d++ class="fref">linux/modul34ase.c#L824" id="L84"712#in7lude <3;         4;
  oid2bog1u/a>18"ref">"%s %u %s %s "&< _d="Lnline4>f=So,i2nuxv""252a>,           ,  hhhh      4hedule_timeout" class="24ref"249s="cace-ba rdartuhref="+code=fail rdartuchult href="include/li3uux/2 so that we c5=iverlog_75class="l7ne" name="L91"25WARN"50=7+code700"5class53="++++++++++++++++ss="s34 ULL c"> 4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;RN"51dartrequnclude/linuxRN"51dartr91_d)s href="include/li3uux/2 so that we c5=iverlog_754lass="l7nL834s="sref">DMERR(7ve tg70>ele2.5#L32"         break class="fref">linux/modul34ase.c#L824" id="L8 c7350'0etse7 <DMERR5h" class="frefde/linore {ers/m_f="ef="spin_uno7360'0etse7        4     linux/modul34ase.c#L824" id="L8 c7370'0etse7  const char *7ule.h" cl7ss="fref">linux/modul3517" cla70 href="include/li3u.h" clase/linux/module.h" class="fref">linux/modul34_c5 clble4l72/a> 45l  L="dri,is_remote_t*sohatreflinux/module.h" class="fref">linux/modul34_c5 clble4l722#in7each_="Lry_safe {ers/m_f7"ef="71at This#="sref">=x4 c"> 4linux/module.h" class="fref">linux/modul34_c5 clble4l72c#L74" i7v *ce-base.c#L71" id7"L71"71cesr_eac/li2nux/d"Ls=x4 c"> 453uux/ sg-1m_powea hret*sohatref, 0mhtherwiscd5" ser52nclude2 <linux/modul35N7LL c"71shr2efosr2f="iitothem.  Thibsolutelyd2/quired.2 so that we can group, and t*slass="72/a> *D3571=ist_for_each2 log_c  79        iu..43  9'0etss="sref">gup_lass="srrsafee=r" class="se.c#Lmd/d24-log2ace-base.c#L6>ele2.userog_rs/ef">r,  *ce-basen group, 5nd t*slass="lineis_d="Ln5ine4 55"lineis_d="Lnline4>f=So,i2nuxv""252a>,  *ce-basen group, 5nd t*slas  Iendsuoworat This#="sref">=x4 c"> 45&<  12limig_rs/ef">r m-logplmigIendsuoworat This#="sref">=x4 c"> 45&<#in7s51="+code=lc" c"sr27_Lcla721g_=Hclass=5m18" cla/dm-log-users5ace-b51e.c#L98" id="L98" class="l7clas3575"7  75static int <5 hr7f51e.72            4;..43  9'0etss="sref">gp_lass="srrsafee=r" class=".s_t*sohatrefhref="+code=fai.s_t*sohatrefIendsuoworat This#="sref">=x4 c"> 45&<r = 7a 5re720"5class53="+++++++++79        iu..43  9'0etss="sref">gup_lass="srrsafee=r" class="ned i3u_hi =x4 c"> 45&<DMERR(fe {ers/m_f="efizea> *f=So,pkdref=" class="fref">linux/modul34ase.c#L824" id="L8 c7e-base.c#724" id=3"L24"* This#func7m-los72e.h" class="fref">linux/modul34ase.c#L824" id="L8 c7e70'0etse7nline5l&quo5">  80
linux/modul34_c5 clble4l7=""smark_7/dm-llog-userspace-bm-lo7f=""s72+cod5=dmr_eachult_usec#L35" ssssssss*aOncef="fl5#L74" hasnttsnlinux/modul34_c5 clble4l7de=DMWARN7 class="sr3Lot;
7a hre72 href="include/li3u.h" classssssssss*2 s5f="innf="f agaudeaskrefflt*sohat  we k.  So.linux/module.h" class="fref">linux/modul34_c5 clble4l7ogrequ, c7nst char * ssssssss*2we c/acsafelycsayxthereincl     187class="li5me="L92">5 92<7a>
at This#="sref">=x4 c"> ssssssss*2t*sohatrefm_po="fldeviceinclude/li3u  (i d i3u_hi  ssssssss*2dul35tthat etatthat umeemimce)mo" ser52nclude2 <ele2.5#L32" 2poolrequnclude/linu/dm-log5userspace-base.c#L91"3  79        int , 2/a>  17r m-logplmigIend##5nclud52/aNULe-base.void2linux/modul35ode=dm_c75sult73=ist_for_each_="Lry_sist_emp1ye=r" a_size, 2/a>,=use5ace l53e.c7L98" 73 =ist_empty {ers/m_f="ef="=ist_emptye=r" a_size7lude/linu7/module.h" class="fref">7inux/73strequnce log server not fousimig_rs/ef">r m-logplmigIend="Ln5ine4 55"lineijiffierequnclude/linuxjiffier91"3<+oolrequnclude/linHZequnclude/linuxHZ91"3linux/modul34ase.c#L824" id="L8 c7"1l3d1MAR7_REGION" clev *ct  49'="sref">gfp_goto   79        int  4hedule_timeout" class="24ref"249s="cace-baslass="sref">DMERint32"comment">         4;
dm_de
ele2erusec#L35" d="L3 ser4erse.c#Lmd/d24-log2ace-base.c#L6>ele2"t href="include/li3uux/2 so that we c5=iverlog_7class="li7e"24name248eRR" class="s7ef">D74   linux/modul34ase.c#L824" id="L8 c7g1u_irq"s7toree=r"   5lush_oue_5y_7ue {e74de=log_=Hclas2poolrequnclude/linux/module.h" class="fref">linux/modul35N3name="L5;
ele2.5#L32"         ist_emp1ye=r" a_size, 2/a>  187s51="+coriverlog_5s/7d4pac74-users5ace-b50rspace-base.c#s 54tmp_fe79">  79        int f=So,pkdref=.             5m.ed i3u_hi =x4 c"> 45&<
  s5_ouedei <)href49  9'0etsspkd="Lnline4>f=So,pkdref=.             5m.s_t*sohatrefhref="+code=fai.s_t*sohatrefIendsuoworat This#="sref">=x4 c"> 45&<&g3575 class="fref">linux/modul35L18" clas5s="line" name=7So,i2nuxv7/a>" na">suceslEgass  Ie7dsuow75ele24ev *75   18"ref">" id="L98""&<dm_deTHIS_MODULEchult href="include/li3uux/2 so that we c5=iverlog_7lt;li2nux7d"LLrys ogatre-#L10">suc7arbit75RR" =ist_spli.             5mc8"href="+code=faict);
 49'="sref">gfc8"href="+code=fai="sref">gfc8"chult href="include/li3uux/2 so that we c5=iverlog_7lusec#L357lass="lineis_d="Lnline5.7<-3/<75ef">DMERR.             5md8"href="+code=faidt);
 49'="sref">gfd8"href="+code=fai="sref">gfd8"chult href="include/li3uux/2 so that we c5=iverlog_7l18">  187>{
749'0e7547s="sr2 ase..             5mpat uspenass="sref">DMERipat uspena;
 49'="sref">gfpat uspenass="sref">DMERi="sref">gfpat uspenachult href="include/li3uux/2 so that we c5=iverlog_7llass="fr7/dm-llog-userspace-bm-lo7f=""s7577s="sr2 ase..             5mpost uspenass="sref">DMERipost uspena;
 49'="sref">gfpost uspenass="sref">DMERi="sref">gfpost uspenachult href="include/li3uux/2 so that we c5=iverlog_7l+5ode=l57 class="sr3 so that 5e c7n gro75L19"32L79">  .             5mdt ume/d24-log2ace-base ume;
 49'="sref">gfdt ume/d24-log2ace-ba="sref">gfdt umechult href="include/li3uux/2 so that we c5=iverlog_7l"4id="L87nst char * 49'="sref">gfget_at      ize            gfget_at      izechult href="include/li3uux/2 so that we c5=iverlog_7="i6s#="s74sref"45rspac       .             5m.s_clealog5userspace-ba.s_cleal;
 49'="sref">gf.s_clealog5userspace-ba="sref">gf.s_clealchult href="include/li3uux/2 so that we c5=iverlog_7=o,i2nuxv7* arbitra3ace-b3nTg-uflu7h hap76st_for_each_=.             5m.ed i3ua href="+code=Dned i3u;
 49'="sref">gf.   i3uhref="+code=fail  L="dri,ned i3u;
 49'="sref">gfflushhref="+code=fai="sref">gfflush;
 49'="sref">gfmark_u/dm-log5userspace-ba="sref">gfmark_u/dm-l;
 49'="sref">gfclear_u/dm-log5userspace-ba="sref">gfclear_u/dm-l;
DMERR.             5mget_at i3u_workL69" id="L69" cget_at i3u_workli_d href4NULL c"> 49'="sref">gfget_at i3u_workL69" id="L69" c="sref">gfget_at i3u_work;
  187>;
 49'="sref">gfset_at      i3uhref="+code=fail  L="dri,set_at      i3uli_dt href="include/li3uux/2 so that we c5=iverlog_7=lass="fr7&quo3class="commenAdditm7l="sy7677s="sr2 ase..             5mget_ i3u_talt_href="+code=faiget_ i3u_talt_91_d href4NULL c"> 49'="sref">gfget_ i3u_talt_href="+code=fail  L="dri,get_ i3u_talt_91_dt href="include/li3uux/2 so that we c5=iverlog_7=+5ode=l57t"> * arbitra3ace-b3nsen7suog-76L19"32L79">  .             5mseleushref="+code=faiseleusli_d href4NULL c"> 49'="sref">gfseleushref="+code=fail  L="dri,seleusli_dt href="include/li3uux/2 so that we c5=iverlog_7="4id="L87="include/li3uux/dloa="o7uflus76strequnce log.             5mis_remote_t*sohatrefhref="+code=faiis_remote_t*sohatrefli_d href4NULL c"> 49'="sref">gf.s_remote_t*sohatrefhref="+code=fail  L="dri,is_remote_t*sohatrefli_dt href="include/li3uux/2 so that we c5=iverlog_7nline4NUL7 c"> 49'0etss="NULL_con970,a>,77ment"5suoworat This#="sref">=x4 c"> 45&<f="+cod249'0et7s="NU77ref="drs/md/s_L88" i4="L8845e.c#L98" id="L98" class7"lineis_d7"Lnline4"+code=e24ement"7class77cesr_riv5rs/nt<247erspace-base._,neig_rs/ef">r m-log_,neig                  5m="sref">gfds="linei_neig_rs/ef">r m-log="sref">gfds="linei_neig79"> moduref">linux/modul35N3name="L5;
77m53 9/dm-log-users5ace-b51e.c#L98" id="L98" class="l7""drivers7""sref">loflushlog-users7ace-b77>ele2.5#L32" 2 log_c, 2/a>requce log server 7ot fo77fffffffffbrea5clude5linux/5L18" clas5s="line" name=7"t 2471 49'mempool_creath      100ment">         4;flush_entryfallouhref="+code=faiflush_entryfallouli_dt href="include/li3uux/2 so that we c5=iverlog_7nlass="fr7class="li4"ss="lin24"+co7e=siz77=ist_for_each_="Lry_sssssssssssssssssssssssssssnt">         4;flush_entryffreh              4; linux/modul34ase.c#L824" id="L8 c7#L91"3#L17" id=3"L19" class="line"7name=77 =ist_empty {ers/m_f="ef="=ist_emptye=r" a_size7#t;r       2  * r24e=uuid" class="DMWAR" clTa href="driDMWAR"79">  oid2bog1u/a>18"ref">"Un 2  aaincreath flush_entryfpool:  No memory."&<linux/modul34ase.c#L824" id="L8 c7247+code=7sean>);
at This#="sref">=x4 c"> 45&<DM5h" class="frefde/linore {ers/m_f="ef="spin_uno7b+code=  7DMWA4N" cl48/aNULL c">  7="+co78de=loh" class="frefde/linore {ers/m_f="ef="spin_uno7b"drivers74 href48erint );
 49'dm_unei_cfr_neig_rs/ef">r m-logdm_unei_cfr_neig79"> " class="fref">linux/modul34ase.c#L824" id="L8 c72n kernel7e"24name248eRR" class="s7ef">D78 href="+code=2poolrequnclude/linux/module.h" class="frd/dm-log-users5ace-b51e.c#L98" id="L98" class="l7a4"/a>linux/modul35Nse.cDMWAR" clTa href="driDMWAR"79">  oid2bog1u/a>18"ref">"Un 2  aainneigialize5l  L="dri L98 hem.unicaux/ms"&<linux/modul34ase.c#L824" id="L8 c72lass="fr7de=lc" cn 2 class="comme7t"=is78=ist_for_each_="Lry_safee=r" class="mempool_de18"oy       79        flush_entryfpoolhref="+code=faiflush_entryfpoolli_dr class="fref">linux/modul34ase.c#L824" id="L8 c72L91"3#L17trequnta_siza_sizf="+cod7=useR78rspace-bm-logf=""sro_s5_ouedlrequnclude/linux/module.h" class="f class="fref">linux/modul34ase.c#L824" id="L8 c72t;linux/modul35L18" clas5s="line" name=7d flush_b7_groer2 logclass="sref">7 79st_for_each_=/md eit {ers/m_nd.");
 49'dm_ss="linei_cRES_at  ste"href="+code=faidm_ss="linei_cRES_at  ste"79"> s/md/dm-logrequTa hr_l  L="dri,cRES *linux/modul34ase.c#L824" id="L8 c7x/modul347/a>     4   if (  oid2bog1u/a>18"ref">"Cf="in&x/2 t at  ste"5l  L="dri ss="l L98 cRES"&<linux/modul34ase.c#L824" id="L8 c7rtic int 7"L834s="sref">DMERR(7span479>ele2.5#L32"         ef4NULL c"> 49'dm_unei_cfr_exig_rs/ef">r m-logdm_unei_cfr_exig79"> " class="fref">linux/modul34ase.c#L824" id="L8 c7>s/md/d3m7roer2 logclass="sref">r<7a> = 79 href="+code=dmrsa_siafee=r" class="mempool_de18"oy       79        flush_entryfpoolhref="+code=faiflush_entryfpoolli_dr class="fref">linux/modul34ase.c#L824" id="L8 c7r4"/a>lins5_ouedlrequnclude/linux/module.h" class="f class="fref">linux/modul34ase.c#L824" id="L8 c7*_d="L75"7, const char *7>2/a>DMERint32"comme7t">  79strequnce log server not fouDMINF_ "+cob322>dm_de
18"ref">"_f=" hre"&<         4;
18"ref">" L9aded"&<linux/modul34ase.c#L824" id="L8 c8ode=lc" c8ass="sref">lc->2;<8e="L380ment">       s5_oueUtye=r" a_size, 2/a>r m-log__exig79">              5m="sref">gfds="linei_exig_rs/ef">r m-log="sref">gfds="linei_exig79"> moduref">linux/modul35N3name="L5;
DMERR(8ve tg80>ele2/dm-log-users5ace-b51e.c#L98" id="L98" class="l8350'0etse8 <DMERR(fe {ers/m_f="edm_ss="linei_cRES_unat  ste"href="+code=faidm_ss="linei_cRES_unat  ste"79"> s/md/dm-logrequTa hr_l  L="dri,cRES *linux/modul34ase.c#L824" id="L8 c8360'0etse8        4     r m-logdm_unei_cfr_exig79"> " class="fref">linux/modul34ase.c#L824" id="L8 c8370'0etse8  const char *  79        flush_entryfpoolhref="+code=faiflush_entryfpoolli_dr class="fref">linux/modul34ase.c#L824" id="L8 c8380'0etse8 ode=m-logf=""sro_requem8"L71"80 =ist_empty {ers/m_f="ef="=ist_emptye=r" a_size8ule.h" cl8ss="fref">linux/modul3518" cla80strequnce log server not fouDMINF_ "+cob322>dm_de
18"ref">"_f=" hre"&<         4;
18"ref">" unL9aded"&<linux/modul34ase.c#L824" id="L8 c82/a>       s5_oue_54c;
 *ce-base.c#L71" id8"L71"81RR(spin_unog1u_irq"sstore {ers/m_f="ef="spin_un8ule.h" cl8ss="fref">linux/modul35N8LL c"81shr2efrspace-base.c#modulh_neig_rs/ef">r m-logmodulh_neig79">  79        ="sref">gfds="linei_neig_rs/ef">r m-log="sref">gfds="linei_neig79">" class="fref">linux/modul34ase.c#L824" id="L8 c824lass="l8mpool_free {ers/m_f="ef=8mempo81re * frspace-base.c#modulh_exig_rs/ef">r m-logmodulh_exig79">  79        ="sref">gfds="linei_exig_rs/ef">r m-log="sref">gfds="linei_exig79">" class="fref">linux/modul34ase.c#L824" id="L8 c8250'0etse8hreflush_="Lry_pool {ers8m_f="81fffffffffbrea5clude5linux/5L18" clas5s="line" name=8d/d35-log851erint         MODULE_DESCRIPTIN" clTa href="driMODULE_DESCRIPTIN"79">  79        DMaNAME "+cob322>dm_deDMaNAME      oid2bog1u/a>18"ref">" u  L="dri ss="l L98 hrek"&<linux/modul34ase.c#L824" id="L8 c8270'0etse8    5ACE_VSN" class="sre8">D3581=ist_ 79        MODULE_AUTHOR clTa href="driMODULE_AUTHORchul  oid2bog1u/a>18"ref">"Jonathd2bBr1u/owlinux/modul34ase.c#L824" id="L8 c8280'0etse8_f="ef="   table_eupnte=8" cla81L19"3 79        MODULE_LICENSE "+cob322>dm_deMODULE_LICENSEchul  oid2bog1u/a>18"ref">"GPL"&<linux/modul34ase.c#L824" id="L8 c82le.h" cl8="tablerequnclude/linux/8odule81og_=H


The original LXR software byxtheent"> http://sourceforge.net/projects/lx"h>LXR hem.unity"commethis experi. Tal _f=" hrebyxnt"> mailto:lx"@nclux.no">lx"@nclux.no"com.
lx".nclux.no kindly host"l"byxnt"> http://www.redpill-nclpro.no">Redpill Lclpro AS"commeprovideridf Lclux *slsultrefmand operaux/ms .c#vices .incef1995.