linux/fs/ceph/snap.c
<<
>>
Prefs
   1#include <linux/ceph/ceph_debug.h>
   2
   3#include <linux/sort.h>
   4#include <linux/slab.h>
   5
   6#include "super.h"
   7#include "mds_client.h"
   8
   9#include <linux/ceph/decode.h>
  10
  11/*
  12 * Snapshots in ceph are driven in large part by cooperation from the
  13 * client.  In contrast to local file systems or file servers that
  14 * implement snapshots at a single point in the system, ceph's
  15 * distributed access to storage requires clients to help decide
  16 * whether a write logically occurs before or after a recently created
  17 * snapshot.
  18 *
  19 * This provides a perfect instantanous client-wide snapshot.  Between
  20 * clients, however, snapshots may appear to be applied at slightly
  21 * different points in time, depending on delays in delivering the
  22 * snapshot notification.
  23 *
  24 * Snapshots are _not_ file system-wide.  Instead, each snapshot
  25 * applies to the subdirectory nested beneath some directory.  This
  26 * effectively divides the hierarchy into multiple "realms," where all
  27 * of the files contained by each realm share the same set of
  28 * snapshots.  An individual realm's snap set contains snapshots
  29 * explicitly created on that realm, as well as any snaps in its
  30 * parent's snap set _after_ the point at which the parent became it's
  31 * parent (due to, say, a rename).  Similarly, snaps from prior parents
  32 * during the time intervals during which they were the parent are included.
  33 *
  34 * The client is spared most of this detail, fortunately... it must only
  35 * maintains a hierarchy of realms reflecting the current parent/child
  36 * realm relationship, and for each realm has an explicit list of snaps
  37 * inherited from prior parents.
  38 *
  39 * A snap_realm struct is maintained for realms containing every inode
  40 * with an open cap in the system.  (The needed snap realm information is
  41 * provided by the MDS whenever a cap is issued, i.e., on open.)  A 'seq'
  42 * version number is used to ensure that as realm parameters change (new
  43 * snapshot, new parent, etc.) the client's realm hierarchy is updated.
  44 *
  45 * The realm hierarchy drives the generation of a 'snap context' for each
  46 * realm, which simply lists the resulting set of snaps for the realm.  This
  47 * is attached to any writes sent to OSDs.
  48 */
  49/*
  50 * Unfortunately error handling is a bit mixed here.  If we get a snap
  51 * update, but don't have enough memory to update our realm hierarchy,
  52 * it's not clear what we can do about it (besides complaining to the
  53 * console).
  54 */
  55
  56
  57/*
  58 * increase ref count for the realm
  59 *
  60 * caller must hold snap_rwsem for write.
  61 */
  62void ceph_get_snap_realm(struct ceph_mds_client *mdsc,
  63                         struct ceph_snap_realm *realm)
  64{
  65        dout("get_realm %p %d -> %d\n", realm,
  66             atomic_read(&realm->nref), atomic_read(&realm->nref)+1);
  67        /*
  68         * since we _only_ increment realm refs or empty the empty
  69         * list with snap_rwsem held, adjusting the empty list here is
  70         * safe.  we do need to protect against concurrent empty list
  71         * additions, however.
  72         */
  73        if (atomic_read(&realm->nref) == 0) {
  74                spin_lock(&mdsc->snap_empty_lock);
  75                list_del_init(&realm->empty_item);
  76                spin_unlock(&mdsc->snap_empty_lock);
  77        }
  78
  79        atomic_inc(&realm->nref);
  80}
  81
  82static void __insert_snap_realm(struct rb_root *root,
  83                                struct ceph_snap_realm *new)
  84{
  85        struct rb_node **p = &root->rb_node;
  86        struct rb_node *parent = NULL;
  87        struct ceph_snap_realm *r = NULL;
  88
  89        while (*p) {
  90                parent = *p;
  91                r = rb_entry(parent, struct ceph_snap_realm, node);
  92                if (new->ino < r->ino)
  93                        p = &(*p)->rb_left;
  94                else if (new->ino > r->ino)
  95                        p = &(*p)->rb_right;
  96                else
  97                        BUG();
  98        }
  99
 100        rb_link_node(&new->node, parent, p);
 101        rb_insert_color(&new->node, root);
 102}
 103
 104/*
 105 * create and get the realm rooted at @ino and bump its ref count.
 106 *
 107 * caller must hold snap_rwsem for write.
 108 */
 109static struct ceph_snap_realm *ceph_create_snap_realm(
 110        struct ceph_mds_client *mdsc,
 111        u64 ino)
 112{
 113        struct ceph_snap_realm *realm;
 114
 115        realm = kzalloc(sizeof(*realm), GFP_NOFS);
 116        if (!realm)
 117                return ERR_PTR(-ENOMEM);
 118
 119        atomic_set(&realm->nref, 0);    /* tree does not take a ref */
 120        realm->ino = ino;
 121        INIT_LIST_HEAD(&realm->children);
 122        INIT_LIST_HEAD(&realm->child_item);
 123        INIT_LIST_HEAD(&realm->empty_item);
 124        INIT_LIST_HEAD(&realm->dirty_item);
 125        INIT_LIST_HEAD(&realm->inodes_with_caps);
 126        spin_lock_init(&realm->inodes_with_caps_lock);
 127        __insert_snap_realm(&mdsc->snap_realms, realm);
 128        dout("create_snap_realm %llx %p\n", realm->ino, realm);
 129        return realm;
 130}
 131
 132/*
 133 * lookup the realm rooted at @ino.
 134 *
 135 * caller must hold snap_rwsem for write.
 136 */
 137struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc,
 138                                               u64 ino)
 139{
 140        struct rb_node *n = mdsc->snap_realms.rb_node;
 141        struct ceph_snap_realm *r;
 142
 143        while (n) {
 144                r = rb_entry(n, struct ceph_snap_realm, node);
 145                if (ino < r->ino)
 146                        n = n->rb_left;
 147                else if (ino > r->ino)
 148                        n = n->rb_right;
 149                else {
 150                        dout("lookup_snap_realm %llx %p\n", r->ino, r);
 151                        return r;
 152                }
 153        }
 154        return NULL;
 155}
 156
 157static void __put_snap_realm(struct ceph_mds_client *mdsc,
 158                             struct ceph_snap_realm *realm);
 159
 160/*
 161 * called with snap_rwsem (write)
 162 */
 163static void __destroy_snap_realm(struct ceph_mds_client *mdsc,
 164                                 struct ceph_snap_realm *realm)
 165{
 166        dout("__destroy_snap_realm %p %llx\n", realm, realm->ino);
 167
 168        rb_erase(&realm->node, &mdsc->snap_realms);
 169
 170        if (realm->parent) {
 171                list_del_init(&realm->child_item);
 172                __put_snap_realm(mdsc, realm->parent);
 173        }
 174
 175        kfree(realm->prior_parent_snaps);
 176        kfree(realm->snaps);
 177        ceph_put_snap_context(realm->cached_context);
 178        kfree(realm);
 179}
 180
 181/*
 182 * caller holds snap_rwsem (write)
 183 */
 184static void __put_snap_realm(struct ceph_mds_client *mdsc,
 185                             struct ceph_snap_realm *realm)
 186{
 187        dout("__put_snap_realm %llx %p %d -> %d\n", realm->ino, realm,
 188             atomic_read(&realm->nref), atomic_read(&realm->nref)-1);
 189        if (atomic_dec_and_test(&realm->nref))
 190                __destroy_snap_realm(mdsc, realm);
 191}
 192
 193/*
 194 * caller needn't hold any locks
 195 */
 196void ceph_put_snap_realm(struct ceph_mds_client *mdsc,
 197                         struct ceph_snap_realm *realm)
 198{
 199        dout("put_snap_realm %llx %p %d -> %d\n", realm->ino, realm,
 200             atomic_read(&realm->nref), atomic_read(&realm->nref)-1);
 201        if (!atomic_dec_and_test(&realm->nref))
 202                return;
 203
 204        if (down_write_trylock(&mdsc->snap_rwsem)) {
 205                __destroy_snap_realm(mdsc, realm);
 206                up_write(&mdsc->snap_rwsem);
 207        } else {
 208                spin_lock(&mdsc->snap_empty_lock);
 209                list_add(&realm->empty_item, &mdsc->snap_empty);
 210                spin_unlock(&mdsc->snap_empty_lock);
 211        }
 212}
 213
 214/*
 215 * Clean up any realms whose ref counts have dropped to zero.  Note
 216 * that this does not include realms who were created but not yet
 217 * used.
 218 *
 219 * Called under snap_rwsem (write)
 220 */
 221static void __cleanup_empty_realms(struct ceph_mds_client *mdsc)
 222{
 223        struct ceph_snap_realm *realm;
 224
 225        spin_lock(&mdsc->snap_empty_lock);
 226        while (!list_empty(&mdsc->snap_empty)) {
 227                realm = list_first_entry(&mdsc->snap_empty,
 228                                   struct ceph_snap_realm, empty_item);
 229                list_del(&realm->empty_item);
 230                spin_unlock(&mdsc->snap_empty_lock);
 231                __destroy_snap_realm(mdsc, realm);
 232                spin_lock(&mdsc->snap_empty_lock);
 233        }
 234        spin_unlock(&mdsc->snap_empty_lock);
 235}
 236
 237void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc)
 238{
 239        down_write(&mdsc->snap_rwsem);
 240        __cleanup_empty_realms(mdsc);
 241        up_write(&mdsc->snap_rwsem);
 242}
 243
 244/*
 245 * adjust the parent realm of a given @realm.  adjust child list, and parent
 246 * pointers, and ref counts appropriately.
 247 *
 248 * return true if parent was changed, 0 if unchanged, <0 on error.
 249 *
 250 * caller must hold snap_rwsem for write.
 251 */
 252static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
 253                                    struct ceph_snap_realm *realm,
 254                                    u64 parentino)
 255{
 256        struct ceph_snap_realm *parent;
 257
 258        if (realm->parent_ino == parentino)
 259                return 0;
 260
 261        parent = ceph_lookup_snap_realm(mdsc, parentino);
 262        if (!parent) {
 263                parent = ceph_create_snap_realm(mdsc, parentino);
 264                if (IS_ERR(parent))
 265                        return PTR_ERR(parent);
 266        }
 267        dout("adjust_snap_realm_parent %llx %p: %llx %p -> %llx %p\n",
 268             realm->ino, realm, realm->parent_ino, realm->parent,
 269             parentino, parent);
 270        if (realm->parent) {
 271                list_del_init(&realm->child_item);
 272                ceph_put_snap_realm(mdsc, realm->parent);
 273        }
 274        realm->parent_ino = parentino;
 275        realm->parent = parent;
 276        ceph_get_snap_realm(mdsc, parent);
 277        list_add(&realm->child_item, &parent->children);
 278        return 1;
 279}
 280
 281
 282static int cmpu64_rev(const void *a, const void *b)
 283{
 284        if (*(u64 *)a < *(u64 *)b)
 285                return 1;
 286        if (*(u64 *)a > *(u64 *)b)
 287                return -1;
 288        return 0;
 289}
 290
 291/*
 292 * bu225"the 6'"f)-1);
realmparentstatic int parentino, ywnamed, & */2/span>
 256        struct ceph_snap_realm * 275        realm-> 288 "sref">md2c,
 256<77        ceph_get_snap_rnt; 288 "     retum)
 288 "L198"> 128{
);
a 275nu=* 275        realm->real* 275        realm->real* 2883sref">rea3m,
nref)-1);
 291nre3))
)-1);
real m;)-1);
)-1);
realmreal3);
realm-> 262        if (!realm->parentmdsc, , ywnamed);
 2883empty_loc3);
  3     }
 275nu=*parent = realm->realm->real* 2883"L212"> 232}
3="L213"> 313
/*3/span>
 up aupdate? realm
 246my< =s94 216worcomment"> * caller needn't hold3t not yet3/span>
parentworco _    * caller needn't hold3t8ap_rwse3/span>
realm *3/span>
list_add(&realm->
list_add(&realm->+code=parent_ino" class="sref">list_add(&+coe=chie=chi
 262        if (!  3c)
list_add(&realm->+coparent = realm->+code=snap_empty" class="sref">s3"L222"> 232{
 267        "adjup seqass="strd (ss="sua>real);p: %llx snap_empty" class="sref">s3""L213"> 3m;
 324
list_add(&realm->ino, realm, realm->list_add(&realm->+c%p -> %llx %3= not yet3a>)) {
 uint)eass="line" namess="sref">list_add(&realm->realm->real* 2883empty_ite3);
3empty_ite3);
);
 292realmreal3);
 2883empty_loc3);
 275nu=* *lass="line" nameSIZE_MAX"L275"> 275SIZE_MAX*ceph_get_snap_rnt;a >href="+code=parent" class="s3233  3     }
 2883empty_loc3);
ceph_get_snap_rnt;ceph_get_snap_rnt; 275nu=*a >ha href="+code=reaGFP_NOFSlass="sref">a 235}
ceph_get_snap_rnt;
 2883esnap_emp3c)
realm->, a href="+code=nref" class="sr3"L238"> 238{
);
realmmds3);
 275nu=* 2883snap_rwse3);
ceph_get_snap_rnt;+cod=parent_ino" class="sref">list_add(&+c"line" name="L288"> 2883smpty_loc32}
realm-> 343
);
arealm">+c"line" name="L288"> 2883smpty_loc3/span>
 2883sL235"> 23/span>
 21o8real occurdout _after_ my">realm
 =nnf">realm
realm">+c   ="i" class="line" iass="sref">realm">+c *f="+code=parent" class="sref">parent = realm->realm->real*realm">+c++oef="+code=parent" class="s3on error.3/span>
parent = realm->->real*realm">+c]o *3/span>
list_add(&spaes="sref">parent =">spae;ceph_get_snap_rnt;->real* 275nu=*parent = realm->->real*realm">+c]"line" name="L288"> 2883"sref">md3c,
parent = realm->+coceph_get_snap_rnt;+coef="+code=parent" class="s3o"L243"> 3m,
ceph_get_snap_rnt;+cod=parent_ino" cla" class="sref">parent = realm->+c"line" name="L288"> 2883"mpty_loc3o)
3"L255"> 235{
mdsc-&memcps     ceph_get_snap_rnt;->real* 275nu=*realm, ->real*pare3t;
a >h" class="sre=parentino" class="sref">parentin; 357
 275nu=* 275        realm->real* 2883">parenti3o)
mdsc-&memcps     ceph_get_snap_rnt;->real* 275nu=*realm, realm->real*a >h" class="sre=parentino" class="sref">parentin;realm->real* 360
 275nu=* 275        realm->real*parent3/a>) {
realm-><"or>     ceph_get_snap_rnt;->real* 275nu=*a >ha href="+code=reae="L282"> 282static int static iNULL* 3);
realm->real* 275nu=* 267        "adjup seqass="strd (ss="sua>real)37;p: %llx %p -> %llx %3ef">paren3);
 275        realm->ino, ceph_get_snap_rnt;+c%p -> %llx %3266  3     }
 uint)eass="line" namentceph_get_snap_rnt;realm->real* 3span>,
list_add(&realm->paren3);
        list_add(&realm->parent3/a>) {
list_add(&realm->ceph_get_snap_rnt; 2883ef">paren3);
  3     }
           fai9*;
realmpare3t;
realmparen3);
 *better luckLme="Lout it later">realm 3);
realmlist_add(&realm-> 239}
        list_add(&realm-> 380
list_add(&realm->static iNULL*3ss="sref"3b)
&qu fai9ng">&qd37;p: %llx &af="+code=parentoame="L275"> 275        realm-&g class="line" name="L273">3s73  33{
ino,  265   er                er *pare3urn 1;
3sf">paren3b)
realmpar> 292="comment">> 246all2o cits ->)-1);
 239}
 220 390
parentino">parentstatic int parentino, ywnamed/*3/span>
 223        struct , &a39225" id="L225" class="line" name="L267"> 267        parent 275        realm->ino,  */3/span>
parentino, paren3c,
)
realm = =parea href="+code=m->      struct list_add(&parent->realm->{
parentino">parentrea4m,
4f">nref)-1);
nre4))
realmrealm * pointers, and ref counts appr4ref">real4);
 220 267up_arra2     a href="+code=m" class="sref">a > *ap_realm" class=dse="L267"> 267sthrefa href="+code=rea__le class="sref">aceph_get_snap_rnr>;a 275nu=*)
);
);
arealm">+c"line" name="L288"> 2884snap_empt4);
);
realkfree     ap_realm" class=dse="L267"> 267sthreforef="+code=parent" class="s4211  4     }
 275nu=* 242}
 267sthref   ceph/s="+code=rkcallocceph_get_snap_rkcalloc=parehref="+code=reanu="L275"> 275nu=*a >ha href="+code=reaGFP_NOFSlass="sref">a 413
 267sthrefoef="+code=parent" class="s4=5       4/span>
 2884ro.  Note4/span>
realm">+c   ="i" class="line" iass="sref">realm">+c *f="+code=parentnu="L275"> 275nu=*realm">+c++oef="+code=parent" class="s4t not yet4/span>
 267sthrefo[" class="line" iass="sref">realm">+c]o  ceph/s="+code=rode=unalign> _le class="sref">a _le c=parehref="+code=reasr>ceph_get_snap_rnr>;realm">+chref="+code=parent" class="s4=8ap_rwse4/span>

 267sthref   ceph/s="+code=rNULL282static iNULL*4mmpty_loc4/span>
 2884m11  4c)
4mL212"> 242{
 4m;
 424
realm);
realha> ize/mtime="fde=ametadatarealm)) {
realha>) untilcommenback">realm,
metadataMDS"> * pointers, and ref counts appr4empty_ite4);
 * pointers, and ref counts appr4empty_ite4);
realm);
 292lha>, we t"> *p await untilc92">ommen * caller needn't hold4ref">real4);
 ize/mtime="s known).  In 216">caseamee* bu225"the 6'"f)-1);
);
 2466">sai up abe=;p: &#penLout.class=  Whe2 92">ommen* bu225"the 6'"f)-1);
 4     }
 * pointers, and ref counts appr4empty_loc4);
 * pointers, and ref counts appr4eo.  Note45}
 292_rwsem= clarea/a(i.e. t92">ent">>topology wo194> * pointers, and ref counts appr4e not yet436
 * pointers, and ref counts appr4e8ap_rwse4c)
 220 248{
realap.c#"fde=#"fflph_snap_realm" class=-iass="sref">realcihrefoef="+code=parent" class="s4snap_rwse4);
mds4);
realmrealmrealcihrefa href="+code=realm"vfs_"fde=ass="sref">realvfs_"fde=* 267irt2* 443

a 24/span>
realm 24/span>
4mment"> *4/span>

realcihrefa href="+code=realm"i_ hreflockceph_get_snap_ri_ hreflockph_shref="+code=parent" class="s4mnap_rwse4/span>
realcihreforef="+code=parent" class="s4mmpty_loc4c,
 267irt2* 267realcihreforef="+code=parent" class="s4m"L213"> 4m,
)
realm 245{
realm;
time=we finish">realm
ca2lokucit willabe"> * pointers, and ref counts appr4">parenti4o)
 220 460
 267irt2*parent4/a>) {
 _penLout#ca_looku      struct  _penLout#ca_looku     a href="+code=m-iass="sref">realcihrefohref="+code=parent" class="sr4="L243"> 4);
realm))
ommens are=allow> up astart whe2 penLout, socant">realm 24);
o"re=startld beforeamee previouomment"> * caller needn't hold4266  4     }
u      ommens sn progress now>o"re=startldame="L2-"ua href="2"> 2883empty_loc3ef 92l_ut, socant">realm 267        &qu falea/aypenLout,7;p: %llx &af="+code=parent"fde=ass="sref">realmrealkfree     as="line" name=-92loku      struct paren34/a>);
 267irt2*static iNEPH_CAP_FAUTH_EXC2static iNEPH_CAP_FXATTR_EXC2 46a>) {
static iNEPH_CAP_FILE_WEXC2 256<77        ceph_get_snap_rnt;realcihrefa href="+code=realm"i_ ha/a_tceph_get_snap_rn_ ha/a_tcrefref="+code=parent" class="s4=f">paren34/a>);
  34    }
 2883empty_lompty_loc34;
 up augop a92">M3emp>(&2-"ua href="2"> 2883empty_lom255"> 24<;
MurdlinlM3empc> * pointers, and ref counts appr4"f">paren34/a>);
 2883empty_lo"L257"> 34/a>);
ceph_get_snap_rnt;ceph_get_snap_rnt;realcihrefa href="+code=realm"i_ trealm-> 234}
 340
 267        &qu fa_looku g">&qu fueuout munderg">&qu f">&qus7;p: %llx %p -> %llx %34nap_rwse341
realmceph_get_snap_rnt; 267irt2*)
ss="sref">realm    as="line" name=-fde=ass="sref">realm)
realm->, a href="+code=nref" class="sr34ef">pare34rn 1;
realcihrefa  ceph/s="+code=r_iass="sref">realcihrefaref="+code=nref" class="sr34e">paren34)
realcINIT_LIST_HEAD=list_del_init" class="snc2loku      struct realm->ihref="+coiref="+code=nref" class="sr34eL257"> 34n -1;
realcINIT_LIST_HEAD=list_del_init" class="snc2loku      struct realm-&glushlut#c"sre"+coiref="+code=nref" class="sr34e     re34rn 0;
 234}
 class="sref">inlolow> refa  ceph/s="+code=r_tceph_get_snap_rnt;+c"line" name="L288"> 28834"L290"> 340
realcihrefo href="+code=reaNULL282static iNULL*/*34span>
 267irt2* 267irt2*realmmdeph_sn=des="line" name=-fde=ass="sref">realmrealm_ me=arealmpare34span>
realmparen34,
)
 267irt2*static iNEPH_CAP_FXATTR_EXC2realcihreforef="+code=parent" class="s45ref">rea45,
rea45<
pffer_g     if (!pffer_g      a href="+code=m-iass="sref">realcihrefo href="+code=realm"i_ xattrs     struct rea45
parent-xattr_erseiorrealcihrefa href="+code=realm"i_ xattrs     struct parent-erseiorrea45parent-xattr_erseior 28845ef">real45/a>);
45nap_rwse45/a>);
)
ca2looku ;"L2-"ua href="2"> 2883empty_l5mpty_loc45/a>);
"L2-"ua href="2"> 2883empty_l5nap_empt45/a>);
 2883empty_l5mpty_loc45/a>);
realcihrefa href="+code=realm"i_ wr>pffer_ode ha/a     struct pffer_ode ha/arealcihrefa href="+code=realm"i_ wr>pffer_ode ha/a     struct pffer_ode ha/a 28845L212"> 245}
realm->ceph_get_snap_rnt; 453
realcihrefa href="+code=realm"i_ ha/a_tceph_get_snap_rn_ ha/a_tcrefr  f="+code=parent" class="s455       45span>
        realcihrefo href="+code=realm"i_ trealm-> 267        oealci"s nllx &af="+code=parent"fde=ass="sref">riass="sref">realcihrefa href="+code=realm"i_ ha/a_tceph_get_snap_rn_ ha/a_tcrefr  f="+code=parent" class="s45o.  Note45/a>);
realm->ihref="+coiref="+c_item" class=ss="sref"ef">realcihrefa href="+code=realm"i_ hreflockc">realmrealm<"+code=parent" class="s45o.  Note45)
 267        &qu fa_looku g">&qu fueuout mnllx &euout arent"fde=assparent" class="sr454       45/a>);
oealctrd (ss="suu e=ch WR,=star;p: %llx &af="+code=parent"fde=ass="sref">realm)
<5 href="fs/ceph/4nap.c42252" " 52L272" class=" class=ass===========ass="snc2loku      struct ceph_get_snap_rnt;+c%p -&de=parent" class="s45o.  Note42{
<5 href="fs/ceph/4nap.c42253" id52L253" class=ainit" cl========ass="snc2loku      struct  24uct  24rent_in1e=parent" class="s45o.  Note453
 2883empty_l5mpty_loc4);
<5 href="fs/ceph/4nap.c42256" id52L206" class= line" na========ass="snc2loku  nishfca_looku()"> * pouct parenxa_looku()"> * poef="+code=m-iass="sref">realcihrefo href="+code=reaNULL282pare54a>)) {
<5 href="fs/ceph/4nap.c42257" id52L227" class=1" cllll line" name="L273">45nap_rwse4y,
<5 href="fs/ceph/4nap.c42258" id52L178} elseref="+code=parent" class="sr4"mpty_lo54);
<5 href="fs/ceph/4nap.c42259" id52L229" class="line" name="L2sfreeass=7"> 267        &qu fa_looku note"+cage co| 1"> 247;llx &af="+code=parent"fde=ass="sref">realmrealkfree     as="line" name=-92loku      struct pare54);
<5 href="fs/ceph/4nap.c43251" id53L271" class=aline" name="L273">45nap_rwse4);
<5 href="fs/ceph/4nap.c43252" id53L192" class="line" nam4f">paren54);
<5 href="fs/ceph/4nap.c43h5ef="+53L263f="+code=realm""or>realm<    unget_snap_rnpin_lock     unget_l_init" class="snc2loku   f">realcihrefa href="+code=realm"i_ hreflockceph_get_snap_ri_ hreflockph_shref="+code=parent" class="s4mnap_rws54     }
<5 href="fs/ceph/4nap.c43154" id5"L194"line" name="L273">45nap_rwse424
<5 href="fs/ceph/4nap.c43255" id5"L245"ine" name="L273">45nap_rwse4);
<5 href="fs/ceph/4nap.c43256" id5"L246" class="line" n Callera href="2"> 2883empty_lompty_lo5436
<5 href="fs/ceph/4nap.c43257" id5"L247" class="line" nL retur)">F/mtiref mtime="f, knowna(i.eao"re=start.acdirtisa hettle#37;e/mtimvalue href="2"> 2883empty_l5nap_empt4c)
<5 href="fs/ceph/4nap.c43258" id5"L218" class="line" name="L220: &#pene=ch "commentame="L2-,: &#penackup a92">MDS"> * pmdsters, and ref counts appr4"f">pare548{
<5 href="fs/ceph/4nap.c43159" 1"53L219" class="line" n> * pointers, and ref counts appr4empty_it54);
<5 href="fs/ceph/4nap.c4L250" ef54L220" class="line" n However,6Ifit willabushlstarpenackup a, add whe2_refackup e hrsai upline" n1ters, and ref counts appr4"f">pare54);
<5 href="fs/ceph/4nap.c4L251" id54L291" class="line" n 92"> 292ers, and ref counts appr4"f">pare54);
<5 href="fs/ceph/4nap.c44252" id54L292" class="line" na( 246a fist hoar> 292_rwseckph_shref=ters, and ref counts appr4"f">pare54);
<5 href="fs/ceph/4nap.c44253" id54de=realm" class="sre ca_looku href="2"> 2883empty_l5mpty_loc443
<5 href="fs/ceph/4nap.c44254" id5"L224"s="+code=ruse;     nishfca_looku()"> * pouct parenxa_looku()"> * poef="+f="fs/ceph/snap.c#"fde=#"fflass="sref">realap.c#"fde=#"fflph_snap_realm" class=-iass="sref">realcihrefoef="+codgt; %llx %34nap_rws54/span>
<5 href="fs/ceph/4nap.c44255" id54L265" class="line" naarent_innnnnf="fs/ceph/snap.c#ca_looku      struct 
<5 href="fs/ceph/4nap.c44257" id5"L227" class=sf="fs/ceph/sn"fde=ass="sref">realmrealmrealcihrefa href="+code=realm"vfs_"fde=ass="sref">realvfs_"fde=*realm; 54/span>
<5 href="fs/ceph/4nap.c45250" id55L230" class="realm" me=ass="BUG_ONsnap_rnt; 24uct  24rentde=parent" class="s4mnap_rws54/span>
<5 href="fs/ceph/4nap.c45251" id5"L261" class="line" spin_lock    struct realm;realm;;realm;;realm;+c&#nown_war nat_ph/s="+code=r_iass="sref">realcihrefa href="+code=realm"i_ wr>pffernown_war nat_snap_rneq">+c&#ernown_war nat_ph/se=parent" class="s4snap_rws54/span>
<5 href="fs/ceph/4nap.c45256" id55L286" class="lineme="L2s=2loku      struct  267         * poa_looku g">&qu fueuout mnllx &euout  (ss="suu p:  s=(ss="suu prent"fde=assparent" class="sr454       457
<5 href="fs/ceph/4nap.c45258" id55L228" class="l="L291"llll rcode=dout" class=nueuefca_st* pohaf="+coddage count m37;llx %p -&g=parent"fde=ass="sref">realmrealm->realm->+c%p -&cparent" class="sr454       4urn 0;
<5 href="fs/ceph/4nap.c46250" id56L210" class==========dnit"eph/snap.c#ca_looku        struct  267irt2*reges     struct  2884m11 54/a>) {
<5 href="fs/ceph/4nap.c4L253" id5"L263" class="line" name="L273">45nap_rwse4);
<5 href="fs/ceph/4nap.c46254" id564263f="+code=realm"dirt2="L27"> 267         * poa_looku g">&qu fueuout mnllx &euout  (ss="suu p:  s=(ss="suu7;llx %p -> %llx %34nap_rws54))
<5 href="fs/ceph/4nap.c46255" id56L265" class="line"parent"fde=ass="sref">realmrealm->
<5 href="fs/ceph/4nap.c46256" id56L206" class= line"de=reaec2loku      struct realm->+c%p -&c"eph/snap.c#ca_looku        struct  267irt2*;
<5 href="fs/ceph/4nap.c4"l5ne"  56L227" class=1" cllde=reaGFP_NOFSl    struct realmrealm<    get_snap_rnpin_lock     e=child_item" class=-iass="srsds_snap_rnt;realcihrefo href="+code=realm"i_ t->ihref="pty_ephackup ealmp -&c"tem" class=-iass="srsds_snap_rnt; 267sthref  e_refackup gi> ph/see=parent" class="s4snap_rws53/span>
<5 href="fs/ceph/34ap.c34751" id57L261" class="line" spin_lockceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku  sds_snap_rnt;ay want wherenxa_ckup ame="ku href="2"> 2883empty_l5mpty_loc34/a>);
<5 href="fs/ceph/34ap.c34253" id5"L243"line" name="L273">45nap_rwse34    }
<5 href="fs/ceph/34ap.c34754" id57L224" class="line" nam4"mpty_lo534;
<5 href="fs/ceph/34ap.c34755" id5"L245" class="line"         a href="2"> 2883empty_lompty_lo54<;
<5 href="fs/ceph/34ap.c34256" id5"L216" class="line"         ** Qookus,">realm< "comqu fu">realmpare534/a>);
<5 href="fs/ceph/34ap.c34257" id5"L247" class="line"         *fist hod>&qu f" _refarea/>realology wo194> * point> * poiters, and ref counts appr4"f">pare5357
<5 href="fs/ceph/34ap.c34758" id57L218" class="line" name="L220"> 220 534rn 1;
<5 href="fs/ceph/34ap.c34759" id5"L229"s/ceph/"line" name hrefqueulooku ologykc">realmrealmmd5340
<5 href="fs/ceph/34ap.c34251" id58L241nt"realap.c#"fde=#"fflph_snap_realm" class=-iass="sref">realcihrefoef="+code=parent" class="s4snap_rws5341
<5 href="fs/ceph/34ap.c34852" id58L232nt"realmrealmstatic iNULL*)
<5 href="fs/ceph/34ap.c34855" id58L201id="L291" ealm"dirt2="L27"> 267        realm<&euout  (ss="suxtadata37;llx %p -&g=parent"fde=ass=aget_snap_rn_ trealap.c#"fdepnfph/see=parent" class="s4snap_rws534rn 1;
<5 href="fs/ceph/34ap.c34856" id5"L206"=parent" class="s4snap_rws534/a>);
<5 href="fs/ceph/34ap.c34857" id5"L227" class=srealm""or>realm<    get_snap_rnpin_lock     e=child_item" class=-iass="sraget_snap_rn_ t_e="r 267irt2*_e="r line" name=-irt2="L2 f">realcihrefo href="+cotem" class=-iass="sraget_snap_rn_ t->ihref="pty_ephaget_ ealmph/see=parent" class="sr454       34}
<5 href="fs/ceph/34ap.c34950" id5"L230" class="line" naf="fs/ceph/sn"fde=ass="sref">realmrealmrealcihrefo href="+code=realm"i_ trealvfs_"fde=*ceph"sref">realmrealm 267        "p> line" name=-irt2="L2ealt"sref">realmrealmrealmrealcihrefo href="+de=parent" class="s4snap_rws5357
<5 href="fs/ceph/34ap.c34958" id5"L228" class=" class="realm""or>realm<    get_snap_rnpin_lock     e=child_item" class=-iass="sraget_snap_rn_ t45nap_rws645,
<6 href="fs/ceph/45ap.c45060" id60L230" class="realm" me=ass="ceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku  aget_snap_rn_ trealm 267        "p> line" name=-irt2="L2ealt"sref">realm_e="r 267irt2*_e="r line" name=-irt2="L2 hildsnap_rn_ t->ihref="+hildrealmph/see=parent" class="sr454      645ine" " 6" class=_item 267        realm<&euout  (ss="suxtqookus,hild&euout  (ss="sux7;llx %p -> %llx %34nap_rws645/a>);
<6 href="fs/ceph/45ap.c45066" id6"L206" class=" class="e" na ealm"dirt2="L2aget_snap_rn_ trealap.c#"fdepnfph/sc"eph/snap.c#ca_lohildsnap_rn_ trealap.c#"fdepnfph/see=parent" class="s4snap_rws645/a>);
<6 href="fs/ceph/45ap.c45067" id60L227" class=1" cllll realm"i_ ha/a_te hrsdel rei 267        e hrsdel rei l_init" class="snc2loku   hildsnap_rn_ t->ihref="ges->ihref="ges->ihref="ges45nap_rws645/a>);
<6 href="fs/ceph/45ap.c45160" id61L290" class="line" nam4o"L280">645/a>);
<6 href="fs/ceph/45ap.c45161" id61L261" class="line" spin_locke hrsdel rei 267        e hrsdel rei l_init" class="snc2loku  aget_snap_rn_ t->ihref="ges 267        realm<&euout  (ss="suxtdone7;llx %p -&g=parent"fde=ass=aget_snap_rn_ trealap.c#"fdepnfph/see=parent" class="s4snap_rws645}
<6 href="fs/ceph/45ap.c45263" id61L243"line" name="L273">45nap_rws6453
<6 href="fs/ceph/45ap.c45264" id61L224" class="line" nam4"mpty_lo645span>
<6 href="fs/ceph/45ap.c45265" id61L245" class="line"         a href="2"> 2883empty_lompty_lo645span>
<6 href="fs/ceph/45ap.c45266" id61L216" class="line"         ** Parse i upapplymmenmpt  ce prent"qu futracew>oealc/ap a * pMDS.  Teispspecifie href="2"> 2883empty_l5nap_emp645/a>);
<6 href="fs/ceph/4nap.c41267" id61L247" class="line"         *fimentame=lology parp.ctersc/ap aa gihcitology i upq"uiofp ts ancestor)
<6 href="fs/ceph/4nap.c41168" id61L218" class="line" name="L220:a2lo"> * prootters, and ref counts appr4"f">pare64/span>
<6 href="fs/ceph/4nap.c41269" id61L219" class="line" n> * pointers, and ref counts appr4empty_it64/span>
<6 href="fs/ceph/4nap.c42260" id62L220" class="line" n However,6st hoar> 292_rwse _refarea/ "com">reaters, and ref counts appr4"f">pare645/a>);
<6 href="fs/ceph/4nap.c42261" id62L291" class="line" n 92"> 292"> 220 64c)
<6 href="fs/ceph/4nap.c42262" " 62L272"s="+code=ruse;     efca_updatety_ephtraceuct -xattr_er7eletareph/sd=parent" class="s4snap_rws6453
<6 href="fs/ceph/4nap.c42264" id62L264"=parent" class="sr454      6424
<6 href="fs/ceph/4nap.c42265" id62L265" class="f="fs/ceph/snap.c#"fde=#"ffmds_ _refaget_snap_rn_ trealcihrefo hr"+codess="lclass="line" nL9irt2 Fpaen=assd92"> 220 645span>
<6 href="fs/ceph/4nap.c42266" id62L206" class= class="fde=ass=__le href="fs/crefo h__le healm" class="fde=ass=ealm 220 645/a>);
<6 href="fs/ceph/4nap.c42267" id62L227" class=srealm""or>realm__le href="fs/crefo h__le healm" class="fde=ass=prior_parirtrealm 220 645)
<6 href="fs/ceph/4nap.c42268" id62L228" class="f="fs/ceph/snap.c#ca_looku  _refaget_snap_rn_ trealap.c#"fdepnvalidateph/s="+ame="L288"> 2884m11 64);
<6 href="fs/ceph/4nap.c43260" id63L230" class="s="+code=ruse;     erruct realcINIT_LISD=list_del_inirealm"i_ tparen64);
<6 href="fs/ceph/4nap.c43h6ef="+63L263f="+code=realm""or>realm7"> 267        -xattr_er7eletareph/sde=parent" class="s4snap_rws6453
<6 href="fs/ceph/4nap.c43164" id6"L194"class="fde=ass=mornsnap_rnt;realcihrefo hr"+cod+code=reaGFP_NOFSlbtruct pffbc"linede=parent" class="s4snap_rws645span>
<6 href="fs/ceph/4nap.c43266" id63L206" class= class="fde=ass=af">realcihrefo hr"+cod="+code=r_iass="srruct realmruct realcihrefo hr"+cod+e=parent" class="s4snap_rws645)
<6 href="fs/ceph/4nap.c43268" id63L228" class="realm" me=ass=" #"ffde2="L_gop snap_rn_ t        ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrealm        ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrprior_parirtrealmpffbc"linede=parent" class="s4snap_rws64);
<6 href="fs/ceph/4nap.c4L260" ef64L230" class="realm" me=ass="calm        ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrealmrealmruct         ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrprior_parirtrealm
<6 href="fs/ceph/4nap.c44265" id64L201id="L291" ealm"dirt2="L2aget_snap_rn_ t;        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="spnf">realap.c#"fdepnfph/seee=parent" class="s4snap_rws645span>
<6 href="fs/ceph/4nap.c44266" id64L286" class="line" name=ntcephaget_snap_rn_ t;        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="spnf">realap.c#"fdepnfph/seee=parent" class="s4snap_rws645)
<6 href="fs/ceph/4nap.c44268" id64L228" class=" class="line" name_irt2="L2IS_ERruct f         fai9*45nap_rws64/span>
<6 href="fs/ceph/4nap.c45262" id6"L232" class="line" name="L273">45nap_rws64);
<6 href="fs/ceph/4nap.c45263" id65L243" class="line" nam34d="L2896443
<6 href="fs/ceph/4nap.c45264" id654263f="+code=rclass="line" nL9irt2 Fpaensurf mtimparirt&af=correct92"> 220 64/span>
<6 href="fs/ceph/4nap.c45561" id6"L201id="L291" ealm"dirt2="L2erruct adjustty_ephaget_ parirtuct ;        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="sparirtuct realap.c#"fdepnvalidateph/s=+"+ass="sn_ href >erruct  64urn 0;
<6 href="fs/ceph/4nap.c46260" id66L210" class==lineme="L2s=2loku  ee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="set_snap_rneq">+c%p -&d ode==parent"fde=ass=aget_snap_rn_ t+c%p -&d =parent" class="sr454      64/span>
<6 href="fs/ceph/4nap.c46261" id6"L271" class="line" narealm""or>realm7"> 267        );
<6 href="fs/ceph/4nap.c46162" id66L272" class=" class=ae" narealm""or>realmaget_snap_rn_ trealap.c#"fdepnfph/sc"eph/snap.c#ca_laget_snap_rn_ t+c%p -&c"eph/snap.c#ca_lee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="set_snap_rneq">+c%p -&dee=parent" class="s4snap_rws64/a>) {
<6 href="fs/ceph/4nap.c4L263" id66L253" class=ainit" claclass="line" nL9irt2 Fpaupdatelology parp.cters,tame=le hr"ku href="2"> 2883empty_l5mpty_lo64);
<6 href="fs/ceph/4nap.c46264" id664263f="+code=s=ae" narealm""or>realmaget_snap_rn_ t+c%p -&="+ass="sn_ href >ee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="set_snap_rneq">+c%p -&de=parent" class="s4snap_rws64/span>
<6 href="fs/ceph/4nap.c46265" id66L265" class="line" narealm""or>realmaget_snap_rn_ tee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="scagete snap_rn_ trealmaget_snap_rn_ tee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="sparirtreinceuct realmee32_to_cpu267        ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrealmcephaget_snap_rn_ tf         fai9*paren634/a>);
<6 href="fs/ceph/34ap.c34263" id67L253" class=ainit" class="snc2loku  aget_snap_rn_ tparen63);
<6 href="fs/ceph/34ap.c34764" id674263f="+code=s=ae" nainit" class="snc2loku  ee32_to_cpu267        ee32_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="srumrprior_parirtrealmrealmerruct dup_arra 267irt2*f         fai9* 634}
<6 href="fs/ceph/34ap.c34860" id68L230" class="line" namclass="line" nL9irt2 Fpaqookusology "comg">&qu fu=agetionku href="2"> 2883empty_l5mpty_lo6340
<6 href="fs/ceph/34ap.c34261" id68L271" class="line" narealm""or>realme hrsadd      fai9*->ihref="gesparen634)
<6 href="fs/ceph/34ap.c34863" id68L253" class=ainit" class="snc2loku  invalidate">realap.c#"fdepnvalidateph/s="+1e=parent" class="s45o.  Not634    }
<6 href="fs/ceph/34ap.c34864" id684263f="+code=="+codeline" name=ntcephaget_snap_rn_ t 267        realap.c#"fdepnfph/sc"eph/snap.c#ca_laget_snap_rn_ t+c%p -&ee=parent" class="s4snap_rws63t;
<6 href="fs/ceph/34ap.c34867" id68L227" class=1" cllll realm"i_ ha/a_tinvalidate">realap.c#"fdepnvalidateph/s="+1e=parent" class="s45o.  Not635)
<6 href="fs/ceph/34ap.c34868" id6"L228" class="="+code=parent" class="sr454      634,
<6 href="fs/ceph/34ap.c34869" id68L229" class=" class=" ealm"dirt2="L27"> 267        }
<6 href="fs/ceph/34ap.c34960" id6"L230" class="line" nae" na ealm"dirt2="L2aget_snap_rn_ trealap.c#"fdepnfph/sc"eph/snap.c#ca_laget_snap_rn_ t+c%p -&ee=parent" class="s4snap_rw96040
<6 href="fs/ceph/34ap.c34961" id6"L271" class="line" name="L273">45nap_rws6341
<6 href="fs/ceph/34ap.c34962" id69L192" class="line" nam4f">paren634)
<6a href="+code=b34"mp<34963" id69L263f="+code=realm""or>realm7"> 267        realap.c#"fdepnfph/sc class="line" nam4f">paren634    }
<6/ceph/s="+code=34alm"34964" id6"L254" class=" claseph/snap.c#ca_laget_snap_rn_ trealap.c#"fdepnvalidateph/scode=reantcephpsnap_rn_ ha/a_tpph/scode=reantcepheuct  2883empty_l5mpty_lo745,
<7 href="fs/ceph/45ap.c45070" id70L210" class==lineme="L2s=2loku  invalidate">realap.c#"fdepnvalidateph/se=parent" class="s4snap_rw9745<
<7 href="fs/ceph/35ap.c45071" id70L271" class="line" narealm""or>realmrebuildry_ephaget_ruct paren745 2883empty_l5mpty_lo744 2999999999paqookusca mnllxs _after_ wu poinve builtpmtimnewtame=lalm *at i_headry_epcscan be setpappropriatelyters, and ref counts appr4"f">pare745/a>);
<7 href="fs/ceph/45ap.c45076" id70L216" class="line"         *99999999p href="2"> 2883empty_l5mpty_lo747/a>);
<7 href="fs/ceph/34ap.c34277" id70L227" class=1whilene" name=ntcephe hrsemp> 267irt2* l_init" class="snc2loku  gesparen749/a>);
<7 href="fs/ceph/34ap.c34279" id70L229" class=" class="dnit" cline"ass="l="L291" ealm" me=ass="ges->ihref="gesrealmrealm45nap_rws745    }
<7 href="fs/ceph/45ap.c45172" id71L192" class="line" nam4f">paren745}
<7 href="fs/ceph/45ap.c45273" id71L263f="+code=realm""or>realm__cleanupsemp>  aget_ruct   aget_ref="+realm"i_ t; 2884m11 745span>
<7 href="fs/ceph/45ap.c45275" id71L265"=parent" class="s4snap_rw9745span>
<7 href="fs/ceph/45ap.c45276" id71L216" ealm"i_ tpffbc"line:=parent" class="s4snap_rws745/a>);
<7 href="fs/ceph/4nap.c41277" id71L227" class=srealm""or>realmerruct realmpr_erruct 45nap_rws74c)
<7 href="fs/ceph/4nap.c42272" " 72L192" class="line" nam4f">paren742{
<7 href="fs/ceph/4nap.c42273" id72L243" class="line" nam34d="L2897453
<7 href="fs/ceph/4nap.c42274" id724263f class="line" n 92"> 2Fphref="2"> 2883empty_l5mpty_lo7424
<7 href="fs/ceph/4nap.c42275" id72L245" class="line"         9* Se upqnys,">realm<  *at areaqookud "com_ckup.  Try wherarr l_ef="2"> 2883empty_l5mpty_lo745span>
<7 href="fs/ceph/4nap.c42276" id72L216" class="line"         ** s_mupare745/a>);
<7 href="fs/ceph/4nap.c42277" id72L247" class="line"         *fers, and ref counts appr4"f">pare745)
<7 href="fs/ceph/4nap.c42278" id72L218" class="line" name="L220:st hoar_rwss noeget_sters, and ref counts appr4"f">pare749/a>);
<7 href="fs/ceph/4nap.c42279" id72L219" class="line" n> * point href="2"> 2883empty_l5mpty_lo74);
<7 href="fs/ceph/4nap.c43270" id73L230"s/ceph/"line" name hrefqueu_ckup ame="      fai9*realap.c#"fde=#"fflph_snap_realm" class=-iass="sref">realcihrefoef="+code=parent" class="s4snap_rws74);
<7 href="fs/ceph/4nap.c43h7ef="+73L263f="+code=f="fs/ceph/sn"fde=ass="sref">realmrealmstatic iNULL* 267        realm<    get_snap_rnpin_lock     e=child_item" class=-iass="srsds_snap_rnt;cephe hrsemp> 267irt2* l_init" class="snc2loku  sds_snap_rnt; 267sthref  e_refackup gi> ph/sed =parent" class="sr454      74);
<7 href="fs/ceph/4nap.c43179" 1"73L229" class=" class="class=-iass="sref">realcihrefoef="+cod="+code=r_iass="sre hrs"irhrse="r 267irt2* 267sthref  e_refackup gi> ph/sc class="line" nam4f">paren74);
<7 href="fs/ceph/4nap.c4L270" ef74L210" class==========dnit""""t"realap.c#"fde=#"fflph_snap_realmg=parent"fde=ass=i_e_refackup ealm->ihref="pty_ephackup ealmph/see=parent" class="s4snap_rws74);
<7 href="fs/ceph/4nap.c4L271" id74L271" class="line" narealm""or>realm"sref">realmrealcihrefo href="+code=realm"i_ trealvfs_"fde=*realmrealmrealm<    get_snap_rnpin_lock     e=child_item" class=-iass="sr f">realcihrefo href="+code=realm"i_ trealcihrefo href="+cotem" class=-iass="sr essarent-xattr_er essareealm, 0ee=parent" class="s4snap_rws745span>
<7 href="fs/ceph/4nap.c44276" id74L206" class= line" narealm""or>realmceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku   f">realcihrefo href="+code=realm"i_ t 267        "p> line" name=-irt2="L2"sref">realmrealm<    get_snap_rnpin_lock     e=child_item" class=-iass="srsds_snap_rnt;45nap_rws74/span>
<7 href="fs/ceph/4nap.c45270" id75L230" class="realm" me=ass="ceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku  sds_snap_rnt;-xattr_er essareealmd =parent" class="sr454      74);
<7 href="fs/ceph/4nap.c45273" id75L253" class=ainit" class="snc2loku  mu-xattr_er _murealm=#"ffp>  mds_ essarent-xattr_erooku p>  mds_ essareline" name=-irt2="L2 essarent-xattr_er essareealmde=parent" class="s4snap_rws7424
<7 href="fs/ceph/4nap.c45571" id7"L201id="L291"line" name="L273">45nap_rws745span>
<7 href="fs/ceph/4nap.c45276" id75L206" class= class="fde=ass=7"> 267        45nap_rws745)
<7 href="fs/ceph/4nap.c45278" id75+code=parent" class="s3=>parent74);
<7 href="fs/ceph/4nap.c45279" id75L169" class="line" nam34L289"> 74urn 0;
<7 href="fs/ceph/4nap.c46270" id76L220" class="line" n HoweveFphref="2"> 2883empty_l5mpty_lo74/span>
<7 href="fs/ceph/4nap.c46271" id76L291" class="line" n 92"> 292 Handlemmenmpt notificetionkfap a * pMDS.href="2"> 2883empty_l5mpty_lo74);
<7 href="fs/ceph/4nap.c46172" id76L272" class="line"         *fers, and ref counts appr4"f">pare74/a>) {
<7 href="fs/ceph/4nap.c4L273" id76L253" class="line" n 92"> 292 Teispcan take two basic "coms:imentaimplest&af=justmmenmpt =agetioners, and ref counts appr4"f">pare7453
<7 href="fs/ceph/4nap.c46274" id764263f class="line" n 92"> 29* or 7eletare notificetionkonkassexist"+caaget_.  Teispshouud updatelmeners, and ref counts appr4"f">pare7424
<7 href="fs/ceph/4nap.c46275" id76L245" class="line"         9* ology i up ts =hildren.href="2"> 2883empty_l5mpty_lo745span>
<7 href="fs/ceph/4nap.c46276" id76L216" class="line"         **href="2"> 2883empty_l5mpty_lo745/a>);
<7 href="fs/ceph/4nap.c4"l7ne"  76L247" class="line"         *fiTentmorn difficultpcaodels ology =agetion, due whequ fu=agetionkat ahref="2"> 2883empty_l5mpty_lo745)
<7ocant">realm 2883empty_l5mpty_lo74);
<7 href="fs/ceph/34ap.c34679" id76L219" class="line" n> * point directory"s="heanotheraaget_.href="2"> 2883empty_l5mpty_lo734/a>);
<7 href="fs/ceph/34ap.c34270" id77L220" class="line" n However, href="2"> 2883empty_l5mpty_lo73/span>
<7 href="fs/ceph/34ap.c34771" id77L271""line" name hrefqueuooku handle ame=nt-xattr_erooku handle ame=ref="f="fs/ceph/snap.c#"fde=#"ffmds_clia_loct paren73);
<7 href="fs/ceph/34ap.c34772" id77L272" class=" class=ae" naef="fs/ceph/snap.c#ca_looku mds_ essarent-xattr_erooku mds_ essareealm" class="fde=ass= essarent-xattr_er essareealmc class="line" nam4f">paren73/a>) {
<7 href="fs/ceph/34ap.c34273" id77L253" class=ainit" cle" naef="fs/ceph/snap.c#ca_looku msgnt-xattr_erooku msgealm" class="fde=ass=msgnt-xattr_ermsgealme=parent" class="s4snap_rw973);
<7 href="fs/ceph/34ap.c34774" id77L264"=parent" class="sr454      734;
<7 href="fs/ceph/34ap.c34775" id77L265" class="f="fs/ceph/snap.c#ca_lsuper_bget_snap_rnpin_lock uper_bget_ealm" class="fde=ass= bsnap_rnpin_lock b+cod="+code=r_iass="srsds_snap_rnt;;;-xattr_er essareealm"+code=mdsc"eqceph_ge_mdssnap_rnt;realmu href="fs/crefo hu healm"realm" me=ass="celi 267        celi +code=parent" class="s4snap_rws735)
<7 href="fs/ceph/34ap.c34778" id77L228" class="s="+code=ruse;     o=nt-xattr_eroef="+e=parent" class="s4snap_rws734,
<7 href="fs/ceph/34ap.c34779" id77L229" class="s="+code=ruse;     trace_leent-xattr_ertrace_leef="+e=parent" class="s4snap_rws734}
<7 href="fs/ceph/34ap.c34870" id78L230" class="f="fs/ceph/snap.c#ca_looku  _refaget_snap_rn_ tstatic iNULL*-xattr_ermsgealm"+code=mdsc"eqceph_gfro_loct realm-xattr_ermsgealm"+code=mdsc"eqceph_gfro_loct -xattr_er"ov_lee+code=parent" class="s455      73/a>) {
<7 href="fs/ceph/34ap.c34873" id78L263f="+code=f="fs/ceph/sn"fde=ass=ooku mds_ _refheadnt-xattr_erooku mds_ _refheadealm" class="fde=ass=hnt-xattr_erh+code=parent" class="s455      73);
<7 href="fs/ceph/34ap.c34874" id784263f="+code=s="+code=ruse;     rumreeli  refstatic iNULL*static iNULL*realcihrefo h"+code=parent" class="s4snap_rws73t;
<7 href="fs/ceph/34ap.c34877" id78L227" class=1s="+code=ruse;     get_edfarea/267irt2* 2884m11 735)
<7 href="fs/ceph/34ap.c34878" id78+code=parent" class="s3=>parent734,
<7 href="fs/ceph/34ap.c34879" id78L229" class="mclass="line" nL9irt2 Fpade2="Lr, href="2"> 2883empty_l5mpty_lo734}
<7 href="fs/ceph/34ap.c34970" id79L210" class==lineme="L2s=2loku  ssgnt-xattr_ermsgealm"+code=mdsc"eqceph_gfro_loct -xattr_er"ov_lee+cod <  ="fof( class="fde=ass=hnt-xattr_erh+cod)e=parent" class="s4snap_rw97040
<7 href="fs/ceph/34ap.c34971" id79L271" class="line" nagoto+ass="sn_ href >btruct pffbc"lineme="L288"> 2884m11 7341
<7 href="fs/ceph/34ap.c34972" id79L232" class="line" use;     hnt-xattr_erh+cod="+code=r_iass="srruct realmo=nt-xattr_eroef="+="+ass="sn_ href >ee32_to_cpu267        ee32_to_cpul_inirealm"i_ t-xattr_erh+cod"+code=mdsc"eqceph_go=nt-xattr_eroef="+de=parent" class="s4snap_rws734    }
<7/ceph/s="+code=34alm"34974" id7"L254" class="realm" me=ass="celi 267        celi +cod="+ass="sn_ href >ee64_to_cpu267        ee64_to_cpul_inirealm"i_ t-xattr_erh+cod"+code=mdsc"eqceph_gceli 267        celi +cod);s="mclass="line" nL9irt2 Fpanon-zero=linwe areaceli t"+caaners, and ref counts appr4"f">pare704)
<7" class=_item 2883empty_l5mpty_lo73/span>
<7 href="fs/ceph/34ap.c34976" id79L206" class= class="fde=ass=rumreeli  refee32_to_cpu267        ee32_to_cpul_inirealm"i_ t-xattr_erh+cod"+code=mdsc"eqceph_grumreeli  refrealmrumreeli  aget_ruct ee32_to_cpu267        ee32_to_cpul_inirealm"i_ t-xattr_erh+cod"+code=mdsc"eqceph_grumreeli  aget_ruct -xattr_ertrace_leef="+="+ass="sn_ href >ee32_to_cpu267        ee32_to_cpul_inirealm"i_ t-xattr_erh+cod"+code=mdsc"eqceph_gtrace_leent-xattr_ertrace_leef="+de=parent" class="s4snap_rws734,
<7 href="fs/ceph/34ap.c34279" id79L229" class="realm""or>realmpuct  267        ;paren845
<8 href="fs/ceph/35ap.c45082" id80L272" class=" claseph/snap.c#ca_looku  _refop_ap.csnap_rn_ t-xattr_eroef="+dcode=reantceph_eli 267        celi +codcode=reantcephtrace_leent-xattr_ertrace_leef="+de=parent" class="s4snap_rws845-xattr_er _mu+c_37;p -&++e=parent" class="s4snap_rws846ine" " 8"href="fs/ceph/34ap.c34986" id80L206" class= class="fde=ass=mu-xattr_er _murealap.c#"fdedown_writel_init" class="snc2loku  sds_snap_rnt;irt2*realmget_edfarea/267irt2*-xattr_eroef="+=""+ass="sn_ href >CEPH_SNAP_OP_SPLITnt-xattr_erCEPH_SNAP_OP_SPLITph/se =parent" class="sr454      845    }
<8 href="fs/ceph/45ap.c45182" id81L272" class=" class=af="fs/ceph/sn"fde=ass=ooku mds_ _refaget_snap_rn_ trealcihrefo hr"+code=parent" class="s45o.  Not845 2883empty_l5mpty_lo845span>
<8 href="fs/ceph/45ap.c45285" id81L245" class="line"         99999999999999999* A llx &#celi llx &# bageks partiofpassexist"+caaget_ioff"s="hhref="2"> 2883empty_l5mpty_lo846ine" " 8 href="fs/ceph/45ap.c45286" id81L216" class="line"         *9999999999999999* a:newtaget_.  Te pMDS providesea gi> iofphref=shref="2"> 2883empty_l5mpty_lo847/a>);
<8 href="fs/ceph/4nap.c41287" id81L247" class="line"         *9999999999999999* (wits caps) i up=hildtaget_<  *at belo+catopmtimnewhref="2"> 2883empty_l5mpty_lo848/a>);
<8 href="fs/ceph/4nap.c41188" id81L218" class="line" name="L229999999999999999* =hild.href="2"> 2883empty_l5mpty_lo849/a>);
<8 href="fs/ceph/4nap.c41289" id81L219" class="line" n> * poin9999999999999999* href="2"> 2883empty_l5mpty_lo84/span>
<8 href="fs/ceph/4nap.c42280" id82L230" class="line" namealm" me=ass="eeli  refrealmpuct realmu href="fs/crefo hu healm)9* e=mdsc"eqceph_grumreeli  refrealmu href="fs/crefo hu healm)9* e=mdsc"eqceph_grumreeli  aget_ruct realm=#"ffde2="L_nee snap_rn_ trealcihrefo hr"+coddcode=reantcephbtruct pffbc"lineee=parent" class="s4snap_rws8424
<8 href="fs/ceph/4nap.c42285" id82L265" class="line" na class="line" nL9irt2 Fpawe will peekkat aget_iap_r here, but will _not_href="2"> 2883empty_l5mpty_lo846ine" " 8 href="fs/ceph/4nap.c42286" id82L216" class="line"         *9999999999999999* advance p, aspmtimaget_iupdatelwill occur belowiaphref="2"> 2883empty_l5mpty_lo847/a>);
<8 href="fs/ceph/4nap.c42287" id82L247" class="line"         *9999999999999999* =#"ffupdatety_ephtrace.9* href="2"> 2883empty_l5mpty_lo848/a>);
<8 href="fs/ceph/4nap.c42288" id82L228" class="l="L291" ealm" me=ass="af">realcihrefo hr"+cod""+code=r_iass="srruct  84);
<8 href="fs/ceph/4nap.c43280" id83L230" class="line" namealm" me=ass="aget_snap_rn_ t;        celi +cod); class="line" nam34L289"> 845/a>);
<8 href="fs/ceph/4nap.c43281" id83L271" class="line" naline" name=ntcephaget_snap_rn_ t;        celi +cod); class="line" nam34L289"> 845        IS_ERRl_inirealm"i_ t 267        a href=; class="line" nam34L289"> 8424
<8 href="fs/ceph/4nap.c43285" id83L265" class="line" naline" name="L273">45nap_rws845span>
<8 href="fs/ceph/4nap.c43286" id83L206" class= line" narealm""or>realm=#"ffget_ _refaget_snap_rn_ t; 267        realap.c#"fdepnfph/sc"parent"fde=ass=aget_snap_rn_ trealap.c#"fdepealm""+0; de=reantceph"">realap.c#"fdepealm"< de=reantcephrumreeli  refceph"">realap.c#"fdepealm++e =parent" class="sr454      84);
<8 href="fs/ceph/4nap.c4L280" ef84L210" class==========dnit""""f="fs/ceph/sn"fde=ass=ooku vpnf">realap.c#"fdeooku vpnf210" eph/sn"fde=ass=vpnf">realap.c#"fdevpnf210" = =parent" class="sr454      845/a>);
<8 href="fs/ceph/4nap.c4L281" id84L271" class="line" naaaaaaaaaaaaaaaaa. name=-irt2="L2"nf">realap.c#"fdepnfph/s="+ass="sn_ href >ee64_to_cpu267        ee64_to_cpul_inirealm"i_ tceph"">realap.c#"fdepealm])c class="line" nam4f">paren84);
<8 href="fs/ceph/4nap.c44282" id84L272" class=" class=aaaaaaaaaaaaaaaaa. name=-irt2="L2ame=nt-xattr_erame=ref=="+ass="sn_ href >CEPH_NOSNAPnt-xattr_erCEPH_NOSNAP+codc class="line" nam4f">paren84);
<8 href="fs/ceph/4nap.c44283" id84L253" class=ainit" clllllllll}e=parent" class="s4snap_rws8453
<8 href="fs/ceph/4nap.c44284" id844263f="+code=s=ae" nadnit""""f="fs/ceph/sn"fde=ass="sref">realmrealmrealvfs_"fde==#"fffind="srefl_inirealm"i_ trealap.c#"fdevpnf210"ee=parent" class="s4snap_rws8424
<8 href="fs/ceph/4nap.c44285" id84L265" class="line" nadnit""""f="fs/ceph/sn"fde=ass=ooku lass="sref">realap.c#"fde=#"fflph_snap_realm" class=-iass="sref">realcihrefoef="+code=parent" class="s4snap_rws845span>
<8 href="fs/ceph/4nap.c44286" id84L206" class= line" nadnit""""f="fs/ceph/sn"fde=ass=ooku  _refaget_snap_rn_ tceph"sref">realmrealcihrefoef="+cod""+code=r_iass="sr=#"ff"sref">realvfs_"fde==#"ff"srefl_inirealm"i_ trealmrealcihrefo href="+code=realm"i_ tceph f">realcihrefo href="+code=realm"i_ trealvfs_"fde=skipf"sref+code=parent" class="s4snap_rws8424
<8 href="fs/ceph/4nap.c45581" id85L265" class="line" nadnit""""rclass="line" n HoweveFphref="2"> 2883empty_l5mpty_lo845span>
<8 href="fs/ceph/4nap.c45286" id85L216" class="line"         *999999999999999999999999* Ifpmtisphref= belo+cs whea olet_  *at washref="2"> 2883empty_l5mpty_lo845/a>);
<8 href="fs/ceph/4nap.c45287" id85L247" class="line"         *999999999999999999999999* =ageted after our:newtaget_,awe experience l_ef="2"> 2883empty_l5mpty_lo845)
<8 href="fs/ceph/4nap.c45288" id85L218" class="line" name="L22999999999999999999999999* a oace (7ue wheanotheraceli  notificetionshref="2"> 2883empty_l5mpty_lo849/a>);
<8 href="fs/ceph/4nap.c45289" id85L219" class="line" n> * poin999999999999999999999999* arriv"+cafap aa differ* ppMDS).  So skiphref="2"> 2883empty_l5mpty_lo84urn 0;
<8 href="fs/ceph/4nap.c46280" id86L220" class="line" n Howeven999999999999999999999999* mtisphref=.href="2"> 2883empty_l5mpty_lo84/span>
<8 href="fs/ceph/4nap.c46281" id86L291" class="line" n 92"> 29999999999999999999999999* href="2"> 2883empty_l5mpty_lo84);
<8 href="fs/ceph/4nap.c46182" id86L272" class=" class=ae" naenalineme="L2s=2loku   f">realcihrefo href="+code=realm"i_ trealcihrefo hragetedealm"&de="> 2883empty_l5mpty_lo84);
<8 href="fs/ceph/4nap.c4L283" id86L253" class=ainit" cl""""""""""""ass="sn_ href >ee64_to_cpu267        ee64_to_cpul_inirealm"i_ trealcihrefo hr"+codcode=realm" class="scageted">realcihrefo hragetedealmed =parent" class="sr454      8453
<8 href="fs/ceph/4nap.c46284" id864263f="+code=s=ae" naaaaaaaaaaaaaaaaa ealm" me=ass="7"> 267        realmrealcihrefo href="+code=realm"i_ trealap.c#"fdepnfph/sc class="line" nam4f">paren845span>
<8 href="fs/ceph/4nap.c46286" id86L206" class= line" nadnit""""aaaaaaaaaaaaa ealm" me=ass=" f">realcihrefo href="+code=realm"i_ trealvfs_"fde=skipf"sref+code=parent" class="s4snap_rws845)
<8ocant">realm45nap_rws84);
<8 href="fs/ceph/34ap.c34689" id86L229" class=" class="dnit" cl ealm" me=ass="7"> 267        realmrealap.c#"fdepnfph/sc"parent"fde=ass=aget_snap_rn_ t 2883empty_l5mpty_lo83);
<8 href="fs/ceph/34ap.c34782" id87L272" class="line"         ************************** Moveamtimhref= topmtimnew aget_eaef="2"> 2883empty_l5mpty_lo83);
<8 href="fs/ceph/34ap.c34283" id87L253" class="line" n 92"> 29************************* href="2"> 2883empty_l5mpty_lo83);
<8 href="fs/ceph/34ap.c34784" id874263f="+code=s=ae" naaaaaaaaamealm" me=ass="<    get_snap_rnpin_lock     e=child_item" class=-iass="sraget_snap_rn_ tsflot_snap_ri_ hreflocnfdes_witskc">sflot_ealmee=parent" class="s4snap_rws8324
<8 href="fs/ceph/34ap.c34785" id87L265" class="line" nadnit""""rss="sn_ href >e hrsdelf"si 267        e hrsdelf"si ild_item" class=-iass="sr f">realcihrefo href="+code=realm"i_ t->ihref="pty_ephaget_ ealmealmee=parent" class="s4snap_rws835span>
<8 href="fs/ceph/34ap.c34286" id87L206" class= line" nadnit""""rss="sn_ href >e hrsadd">realcihrefo he hrsaddild_item" class=-iass="sr f">realcihrefo href="+code=realm"i_ t->ihref="pty_ephaget_ ealmealmgparent" class="sr454      835/a>);
<8 href="fs/ceph/34ap.c34287" id87L227" class=1" cllll                 otem" class=-iass="sraget_snap_rn_ tssnap_ri_ hreflocnfdes_witskc">sealmee=parent" class="s4snap_rws835)
<8 href="fs/ceph/34ap.c34788" id87L228" class=" class="""""""""class="fde=ass=oldreet_snap_rn_ trealcihrefo href="+code=realm"i_ trealcihrefo href="+code=realm"i_ tsflot_snap_ri_ hreflocnfdes_witskc">sflot_ealmee=parent" class="s4snap_rws8340
<8 href="fs/ceph/34ap.c34281" id88L271" class="line" naaaaaaaaarlass=-iass="srceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku   f">realcihrefo href="+code=realm"i_ tparen83/a>) {
<8 href="fs/ceph/34ap.c34883" id88L253" class=ainit" cl""""""""realm""or>realm=#"ffget_ _refaget_snap_rn_ t;   _refaget_snap_rn_ t   _refaget_l_inirealm"i_ t; 267        "p> line" name=-irt2="L2"sref">realmrealvfs_"fde=skipf"sref+cod:=parent" class="s4snap_rws834}
<8 href="fs/ceph/34ap.c34980" id89L210" class==========dnit""""class=-iass="srceph_unget_snap_rnpin_lock     unget_l_init" class="snc2loku   f">realcihrefo href="+code=realm"i_ t 267        "p> line" name=-irt2="L2"sref">realm45nap_rws834)
<8a href="+code=b34"mp<34983" id89L243" class="line" nam34d="L289834    }
<8/ceph/s="+code=34alm"34984" id894263f="+code=s=ae" narclass="line" n HoweveFpawe may haveamaken someiofpmtimoldtaget_'s =hildren.** href="2"> 2883empty_l5mpty_lo804)
<8" class=_itemrealap.c#"fdepealm""+0; de=reantceph"">realap.c#"fdepealm"< de=reantcephrumreeli  aget_ruct ceph"">realap.c#"fdepealm++e =parent" class="sr454      83/span>
<8 href="fs/ceph/34ap.c34986" id89L206" class= line" nadnit""""f="fs/ceph/sn"fde=ass=ooku  _refaget_snap_rn_ t;        ee64_to_cpul_inirealm"i_ tceph"">realap.c#"fdepealm])de=parent" class="s4snap_rws834,
<8 href="fs/ceph/34ap.c34289" id89L229" class=" class="dnit" clline" name=ntceph hildsnap_rn_ t;realap.c#"fdepnfph/sde=parent" class="s4snap_rws945
<9 href="fs/ceph/35ap.c45092" id90L272" class=" clas =aline" name="L273">45nap_rws94545nap_rws94445nap_rws945 2883empty_l5mpty_lo946ine" " 9"href="fs/ceph/34ap.c34996" id90L216" class="line"         *99999999*iupdatelus"+camtimprovidedequ futrace.9linwe area7eleta+caahref="2"> 2883empty_l5mpty_lo947ine" " 9"href="fs/ceph/34ap.c34297" id90L247" class="line"         *99999999*equ f,awe can a"linequeuea+cacap_ _res.href="2"> 2883empty_l5mpty_lo948/a>);
<9 href="fs/ceph/34ap.c34998" id90L218" class="line" name="L2299999999* href="2"> 2883empty_l5mpty_lo949/a>);
<9 href="fs/ceph/34ap.c34299" id90L229" class="realm""or>realm=#"ffupdatety_ephtracesnap_rn_ t;cepheuct  2883empty_l5mpty_lo945/a>);
<9 href="fs/ceph/45ap.c45190" id91L210" class==========dnit""""t"-xattr_eroef="+=""+ass="sn_ href >CEPH_SNAP_OP_DESTROYnt-xattr_erCEPH_SNAP_OP_DESTROYph/sde=parent" class="s4snap_rws945/a>);
<9 href="fs/ceph/45ap.c45191" id91L271"=parent" class="s4snap_rws945    }
<9 href="fs/ceph/45ap.c45192" id91L232" class="lineme="L2s=2loku  o=nt-xattr_eroef="+=""+ass="sn_ href >CEPH_SNAP_OP_SPLITnt-xattr_erCEPH_SNAP_OP_SPLITph/se=parent" class="s4snap_rws945 2883empty_l5mpty_lo944   _refaget_snap_rn_ t   _refaget_l_inirealm"i_ t;;realap.c#"fdeup_writel_init" class="snc2loku  sds_snap_rnt;irt2* 94/span>
<9 href="fs/ceph/4nap.c42290" id92L230" class="e=mdsc"eqceph_g_ckup ame="      fai9*;paren945pffbc"line:=parent" class="s4snap_rws9453
<9 href="fs/ceph/4nap.c42294" id924263f="+code=parent"fde=ass=pr_errsnap_rn_ ha/a_tpr_erref="+rcode=dout" class=nueuefca_corruptequ fumessagekfap amds(ss="d7;llx %p -&g=parent"fde=ass=mdssnap_rnt;-xattr_erooku msg_dum=ef="+realm"i_ t-xattr_ermsgealmee=parent" class="s4snap_rws946ine" " 9 href="fs/ceph/4nap.c42296" id92L216" e="L2s=2loku  o> 267        a href=:=parent" class="s4snap_rws947ine" " 9 href="fs/ceph/4nap.c42297" id92L227" class=1sineme="L2s=2loku  get_edfarea/267irt2*realap.c#"fdeup_writel_init" class="snc2loku  sds_snap_rnt;irt2*45nap_rws945/a>);
<9 href="fs/ceph/4nap.c43291" id93L271"=parent" class="s4snap_rws94);
<9 href="fs/ceph/4nap.c43292" id93L192" class="line" nam4f">paren945


Te poriginal LXR softwareaby mtimclass="lihttp://sourceforge.net/projects/lxr">LXR n Hunityph/sg"mtispexperiHoweal versareaby class="limailto:lxr@ephux.noa exr@ephux.noph/s.
exr.ephux.no kindly hosted by class="lihttp://www.redpill-ephpro.noa Redpill Lphpro ASph/sg"provideriofpLphuxealmsult"+caand o eretions services si ce 1995.