linux/fs/gfs2/glock.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   3 * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
   4 *
   5 * This copyrighted material is made available to anyone wishing to use,
   6 * modify, copy, or redistribute it subject to the terms and conditions
   7 * of the GNU General Public License version 2.
   8 */
   9
  10#include <linux/sched.h>
  11#include <linux/slab.h>
  12#include <linux/spinlock.h>
  13#include <linux/buffer_head.h>
  14#include <linux/delay.h>
  15#include <linux/sort.h>
  16#include <linux/jhash.h>
  17#include <linux/kallsyms.h>
  18#include <linux/gfs2_ondisk.h>
  19#include <linux/list.h>
  20#include <linux/wait.h>
  21#include <linux/module.h>
  22#include <asm/uaccess.h>
  23#include <linux/seq_file.h>
  24#include <linux/debugfs.h>
  25#include <linux/kthread.h>
  26#include <linux/freezer.h>
  27#include <linux/workqueue.h>
  28#include <linux/jiffies.h>
  29#include <linux/rcupdate.h>
  30#include <linux/rculist_bl.h>
  31#include <linux/bit_spinlock.h>
  32#include <linux/percpu.h>
  33
  34#include "gfs2.h"
  35#include "incore.h"
  36#include "glock.h"
  37#include "glops.h"
  38#include "inode.h"
  39#include "lops.h"
  40#include "meta_io.h"
  41#include "quota.h"
  42#include "super.h"
  43#include "util.h"
  44#include "bmap.h"
  45#define CREATE_TRACE_POINTS
  46#include "trace_gfs2.h"
  47
  48struct gfs2_glock_iter {
  49        int hash;                       /* hash bucket index           */
  50        unsigned nhash;                 /* Index within current bucket */
  51        struct gfs2_sbd *sdp;           /* incore superblock           */
  52        struct gfs2_glock *gl;          /* current glock struct        */
  53        loff_t last_pos;                /* last position               */
  54};
  55
  56typedef void (*glock_examiner) (struct gfs2_glock * gl);
  57
  58static int __dump_glock(struct seq_file *seq, const struct gfs2_glock *gl);
  59#define GLOCK_BUG_ON(gl,x) do { if (unlikely(x)) { __dump_glock(NULL, gl); BUG(); } } while(0)
  60static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int target);
  61
  62static struct dentry *gfs2_root;
  63static struct workqueue_struct *glock_workqueue;
  64struct workqueue_struct *gfs2_delete_workqueue;
  65static LIST_HEAD(lru_list);
  66static atomic_t lru_count = ATOMIC_INIT(0);
  67static DEFINE_SPINLOCK(lru_lock);
  68
  69#define GFS2_GL_HASH_SHIFT      15
  70#define GFS2_GL_HASH_SIZE       (1 << GFS2_GL_HASH_SHIFT)
  71#define GFS2_GL_HASH_MASK       (GFS2_GL_HASH_SIZE - 1)
  72
  73static struct hlist_bl_head gl_hash_table[GFS2_GL_HASH_SIZE];
  74static struct dentry *gfs2_root;
  75
  76/**
  77 * gl_hash() - Turn glock number into hash bucket number
  78 * @lock: The glock number
  79 *
  80 * Returns: The number of the corresponding hash bucket
  81 */
  82
  83static unsigned int gl_hash(const struct gfs2_sbd *sdp,
  84                            const struct lm_lockname *name)
  85{
  86        unsigned int h;
  87
  88        h = jhash(&name->ln_number, sizeof(u64), 0);
  89        h = jhash(&name->ln_type, sizeof(unsigned int), h);
  90        h = jhash(&sdp, sizeof(struct gfs2_sbd *), h);
  91        h &= GFS2_GL_HASH_MASK;
  92
  93        return h;
  94}
  95
  96static inline void spin_lock_bucket(unsigned int hash)
  97{
  98        hlist_bl_lock(&gl_hash_table[hash]);
  99}
 100
 101static inline void spin_unlock_bucket(unsigned int hash)
 102{
 103        hlist_bl_unlock(&gl_hash_table[hash]);
 104}
 105
 106static void gfs2_glock_dealloc(struct rcu_head *rcu)
 107{
 108        struct gfs2_glock *gl = container_of(rcu, struct gfs2_glock, gl_rcu);
 109
 110        if (gl->gl_ops->go_flags & GLOF_ASPACE)
 111                kmem_cache_free(gfs2_glock_aspace_cachep, gl);
 112        else
 113                kmem_cache_free(gfs2_glock_cachep, gl);
 114}
 115
 116void gfs2_glock_free(struct gfs2_glock *gl)
 117{
 118        struct gfs2_sbd *sdp = gl->gl_sbd;
 119
 120        call_rcu(&gl->gl_rcu, gfs2_glock_dealloc);
 121        if (atomic_dec_and_test(&sdp->sd_glock_disposal))
 122                wake_up(&sdp->sd_glock_wait);
 123}
 124
 125/**
 126 * gfs2_glock_hold() - increment reference count on glock
 127 * @gl: The glock to hold
 128 *
 129 */
 130
 131void gfs2_glock_hold(struct gfs2_glock *gl)
 132{
 133        GLOCK_BUG_ON(gl, atomic_read(&gl->gl_ref) == 0);
 134        atomic_inc(&gl->gl_ref);
 135}
 136
 137/**
 138 * demote_ok - Check to see if it's ok to unlock a glock
 139 * @gl: the glock
 140 *
 141 * Returns: 1 if it's ok
 142 */
 143
 144static int demote_ok(const struct gfs2_glock *gl)
 145{
 146        const struct gfs2_glock_operations *glops = gl->gl_ops;
 147
 148        if (gl->gl_state == LM_ST_UNLOCKED)
 149                return 0;
 150        if (!list_empty(&gl->gl_holders))
 151                return 0;
 152        if (glops->go_demote_ok)
 153                return glops->go_demote_ok(gl);
 154        return 1;
 155}
 156
 157
 158void gfs2_glock_add_to_lru(struct gfs2_glock *gl)
 159{
 160        spin_lock(&lru_lock);
 161
 162        if (!list_empty(&gl->gl_lru))
 163                list_del_init(&gl->gl_lru);
 164        else
 165                atomic_inc(&lru_count);
 166
 167        list_add_tail(&gl->gl_lru, &lru_list);
 168        set_bit(GLF_LRU, &gl->gl_flags);
 169        spin_unlock(&lru_lock);
 170}
 171
 172static void __gfs2_glock_remove_from_lru(struct gfs2_glock *gl)
 173{
 174        if (!list_empty(&gl->gl_lru)) {
 175                list_del_init(&gl->gl_lru);
 176                atomic_dec(&lru_count);
 177                clear_bit(GLF_LRU, &gl->gl_flags);
 178        }
 179}
 180
 181static void gfs2_glock_remove_from_lru(struct gfs2_glock *gl)
 182{
 183        spin_lock(&lru_lock);
 184        __gfs2_glock_remove_from_lru(gl);
 185        spin_unlock(&lru_lock);
 186}
 187
 188/**
 189 * gfs2_glock_put_nolock() - Decrement reference count on glock
 190 * @gl: The glock to put
 191 *
 192 * This function should only be used if the caller has its own reference
 193 * to the glock, in addition to the one it is dropping.
 194 */
 195
 196void gfs2_glock_put_nolock(struct gfs2_glock *gl)
 197{
 198        if (atomic_dec_and_test(&gl->gl_ref))
 199                GLOCK_BUG_ON(gl, 1);
 200}
 201
 202/**
 203 * gfs2_glock_put() - Decrement reference count on glock
 204 * @gl: The glock to put
 205 *
 206 */
 207
 208void gfs2_glock_put(struct gfs2_glock *gl)
 209{
 210        struct gfs2_sbd *sdp = gl->gl_sbd;
 211        struct address_space *mapping = gfs2_glock2aspace(gl);
 212
 213        if (atomic_dec_and_lock(&gl->gl_ref, &lru_lock)) {
__gfs2_glock_remove_from_lru(gl);
2115
li_unlock(&lru_lock);
2116void atomi>spin_lock_bucket(unsigned int gl->gl_ref, (const struct  117{
clear_ef="+codede=ggl->gl_lru);
);
 118        struct li_unlockock_bucket(unsigned int gl->gl_ref, (const struct  119
GLOCK_BUG_ON(gl, 1);
list_empty(&gl->gl_holders))
2120        GLOCK_BUG_ON(gl, 1);
mapping = GLOF/a> = gl_honrpage))
2121        if (="fs/gfs2/glock_put(struct gl);
2122                <2 href2"+code=wake_up" class="sref">wake_up<sd_glline_struct *list_es
sdlm="+co>);
);
"sref">gl);
 123}
2124
2125/22#L196" id="L196" class="line" na2e="L126">2126 2 gfs2_glock_hold() - incremeock.c#L203" id="L203" class="line" name="L127">2127 2 @gl: The glock to hold
searchef="+co on gFind_space" fs2/glock_ by ock_ /glock.c#L79" id="L79" class="line" name2e="L128">2128 2
 129 2/
2130
2131void 
2132{
2133        2134        dentry *gl)
hash)
2135}
gfs2_sbd *sdp,
2136
gfs2_sbockname *name)
2137/23c#L198" id="L198" class="line" na2e="L138">2138 23code=gfs2_glock" class="sref">gfs2_glock *gl = 2139 239ode=gfs2_glock" class="sref">gfs2_ef="+codenfs2href="+code=gfsef="+codenfs2="sref">gl = 2140 24#L181" id="L181" class="line" na2e="L141">2141 24 class="sref">h &= gl, 1);
mapping<="fs/gfs2/glock.c#L94s="sref">gl->[hash]);
gl_rcu);
);
2142 24+code=wake_up" class=" class="sref">list_em_s="c_equosal))
gl->gl_holdea href="fs/gfs2/gloldea hrck.c#L"sref">mapping2143
2144static int gl->gl_state2145{
2146        const str2ct atoincenft_zerolock(&gl->gl_ref))
2147
glops-&gf="+code=container_of5" id="L185" class="line" na2e="L148">2148        if (2149                r2turn 24#L120" id="L120" class="line" na2e="L150">2150        if (!glops-a href="+code=gl" class="sr5" id="L185" class="line" na2e="L151">2151                r2turn 2;
2152        if (2153                r2turn 25gfs2_glock_put() - Decremenock.c#L203" id="L203" class="line" name="L154">2154        return 1;2
2155}
2156

shref=gra"s.c#L204" id="L204" class="line" name="L147">2157
2158void 
2159{
2160        2161
inline void hash)
gfs2_glock *gl)
gfs2_sbd/glock*gl)
2162        if (!2163                <2 href2"+code=list_des2_sbd" class="sref">gfs2_sbd/glock*gl)
 *gl->gl_ref, (s))
list_nexsa href="+code=gnexs#L14, s2_sbd" class="sref">gfs2_sbd/glock*gl_rcuh;
);
2164        else
gl->gl_refh/a> == LM_ST_UEXCLUSIVE 2165                <2 href2"+code=atomic_inc" ">gl)
 *gl_refh/a> == LM_ST_UEXCLUSIVE GLOF nst struct  *2166
2167        gl->gl_state == L nst struct gl_refh/a> == 2168        2169        gl->gl_refh/a>);
GLOF_AUEXACT>(2170}
2171
gl_state == LM_ST_UEXCLUSIVE 2172static void gl->gl_refh/a> == LM_ST_USHARD)
GLOFena> *gl_refh/a> == LM_ST_USHARD)
2173{
2174        if (!gl->gl_refh/a> == LM_ST_UDEFERRD)
GLOFena> *gl_refh/a> == LM_ST_UDEFERRD)
2175                <2 href2"+code=list_del_init"         ck.c#L155" id="L155" class="line" na2e="L136">2176                <2 href2"+code=atomic_9" id="L179" class="line" na2e="L177">2177                <2 href27st_add_tail" sref">gl->gl_state == gl->gl_refh/a>);
GLOFs/gFLAG_ANY/a>)
2178        }
2179}
2180
2181static void 2182{
gfs2_sbd/glock*gl)
2183        2184        (GLF_LRU(gl->gl_refh/ia>);
2185        spin_mp_mb__aftck_bit(2186}
spine=sdp" a>((gl->gl_refh/ia>);
gl_rcu(2187
2188/2*2189 2 gfs2_glock_put_nolock() - Dock.c#L203" id="L203" class="line" name="L190">2190 2 @gl: The glock to put
2191 2
2192 2 This function should only be k.c#L130" id="L130" class="line" na2e="L193">2193 29#L144" id="L144" class="line" na2e="L194">2194 29ode=dentry" sref">inline void gfs2_sbd *gl)
hash)
 *2195
2196void gfs2_sbd/glock*gl)
gl)
2197{
2198        if (set_bit *gl->gl)
gl->gl_flags))
gl_rcuh;
);
2199                <2 href2"+code=GLOCK_BUG_ON" csref">gl->((GLF_LRU(gl->gl_refh/ia>);
3200}
3201
gl-> *GLOFs/gOUT_ERROR>(3202/30+code=wake_up" class=" class="sref">set_bit< nst struct gl_refh/error gl_ref3203 30+code=list_del_init" L165lsref">gl->gl_refh/a>);
gl->)
GLOFs/gFLAG_TRY_1CB/a>)
3294 30   const struct set_bit< nst struct gl_refh/error GLOF_AR_TRYFAILD)
3295
 30+code=list_del_init" L165" id="L165" class="line" na3e="L206">3206 30+code=atomic_dec" cla        s2_tinue" id="L94" class="line" name3e7"L206">3297{
clear_st_del_init(&gl->gl_refh/
);
3208void li="fs/gfs2/glock_pqueu> *de=ha">gl->3209{
GLO=gl" /glock_e=sd*gl)
3210        struct 3211        struct 3212
3213        if (3115
3116void 3117{
3118        struct 
3119
3120        3121        if (demote_o_pro cla gfs2_sbd *gl)
3122                <3 href3"+code">gl)
gl->gl_state3123}
gl)
gl->gl_state3125/32+code=list_des2_glock_operations" class="sref">gfs2_glock_operations *glops = gl->gl_ops;
3126 326n_unlock" cl" class="sref">gfs2_sbd/glock*gl)
gl)
3127 32st_add_tail" s"sref">hash)
 *3128 323129 3/hash)
 *3130
spin_lcode=for_eache_rootgsaf> *gl->gl)
gl->gl_flags))
gl_rcuh;
);
3131void gl->((GLF_LRU(gl->gl_refh/ia>);
3132{
3133        gl->gl)
gl->gl_refh/
);
list_prevgl->gl_flags))
3135}
glops = go_dem/a> *3136
go__unlock(&lru_loc href="+code=gl_state" class="sref">gl_state3137/33+code=clear_bit" classsssssss        llock_put() - Decremenoc FIXME: eliminatences/gevremuallyock.c#L130" id="L130" class="line" na3e="L138">3138 33code=gfs2_sbdl_init"                 lass="sref">go_rcot *gl->go_dem/a> *gl)
3139 33+code=GLOCK_BUG_ON" c                lass="sref">go__unlo(&lru_loc href="+code=gl_state" class="sref">gl_state3140 34ll_rcu" classUG_ON" cccccccccccccccccsref">gl-> *3141 34+code=kmem_cache_freeUG_ON" cccccccccccccccccsref">gl-> *3142 34+code=wake_up" class=================================ck.c#L12c" id="L183" class="line" na3e="L133">3143
set_bit< nst struct gl_refh/error GLOFrcot *3144static int set_bit(&gl->gl_refh/
);
3145{
set_bit<="fs/gfs2/glock_pqueu> *de=ha">gl->3146        const str3ct set_bit< gl" /glock_e=sd*gl)
3147
GLOFrcclarot *3148        if (3149                r3turn 34+code=GLOCK_BUG_ON" c                lass="sref">go__a>(GLF_LRU(gl->gl_refh/ia>);
3150        if (!set_bit<="fs/gfs2/gpro cla gl->3151                r3turn 35+code=kmem_cache_freeUG_ON" ccccccccc"sref">set_bit< gl" /glock_e=sd*gl)
3152        if (GLOFrcclarot *3153                r3turn 35+code=list_del_init"         9" id="L179" class="line" na3e="L154">3154        return 1;3set_bit<_a>(GLF_LRU(gl->gl_refh/ia>);
3155}
set_bit<="fs/gfs2/gpro cla gl->3156
set_bit< gl" /glock_e=sd*gl)
3157
3158void 3159{
gl->gl_refh/
);
list_prevgl->gl_flags))
3160        3161
do_error gl)
3162        if (!3163                <3 href3"+code=list_de9" id="L179" class="line" na3e="L164">3164        else
3165                <3 href3"+code9" id="L179" class="line" na3e="L136">3166
3167        3168        3169        3170}
3171
3172static void gl)
 void gfs2_sbd/glock*gl)
gfs2_glock *gl)
3173{
3174        if (!gfs2_sbd/glock*gl)
3175                <3 href37#L196" id="L196" class="line" na3e="L136">3176                <3 href376n_unlock" class="sref">spineode=for_eache_root *gl->gl->gl_flags))
gl_rcuh;
);
3177                <3 href37+code=clear_bit" clas" class="sref">list_l" ca>((GLF_LRU(gl->gl_refh/ia>);
3178        }
gl)
3179}
3180
glops-a href="+code=gl" class="sr5" id="L185" class="line" na3e="L181">3181static void 3182{
3183        3184        3185        3186}
3187
3188/38/span>
3189 38#L120" id="L120" class="line" na3e="L190">3190 3 @gl: fs2_glock_remove_from_lru" _ST_U_changahref="+code=GLF_ST_U_changalass=" class="sref">gfs2_sbd *gl)
hash)
3191 33192 39+code=wake_up="sref">hash)
gl_rcu3193 39#L144" id="L144" class="line" na3e="L194">3194 39gfs2_glock_remove_from_lru" aeld1="fs/gfs2/glockaeld1c#L1 =ef">gl->gl_state == 3195
spinaeld2="fs/gfs2/glockaeld2="sr =ef">gl->3196void 3197{
gl->3198        if (gl->3199                <3 href3"+code=GLOCK_BUG_ON" clock" class="sref">spinfs2/glock_p/glo*gl)
4200}
4201
spinfs2/glock_p"+cono/a> * de=ha">gl)
4292/40+code=wake_up9" id="L179" class="line" na4e="L203">4203 40+code=list_desref">gl->GLOFaeld2="fs/gfs2/glockaeld2="sr "srefCE" class="sref">GLOFempty(&gl->gl_holders))
4294 40   const struct gl_hobit(GLF_LRU)
gl->gl_flags);
4295
 40#L196" id="L196" class="line" na4e="L206">4206 40+code=atomic_sref">gl->gl_flags *4297{
4208void li href="+code=gl_holders" class="sref">gl_holdersgl_homax)
gl)
gl_holdersGLOF_AUGlock_HOLD_DECR>(4299                <4/gloc40+code=GLOCK_BUG_ON" ckmem_cache_freelock" class="sref">spin_AUGlock_MIN_HOLD>(4210        struct spin_l href="+code=gl_state" class="sref">gl_state == hash)
4211        struct h &= < href="+code=gl_flags" class="sref">gl_flagshash)
4212
4213        if (gfs2_sbd *gl)
4115
4116void spin href="+code=gl_flags" class="sref">gl_flags == hash)
4117{
spinbit(GLF_LRUgl->gl_flags);
4118        struct set_bit<_mp_mb__aftck_bit(4119
set_bit((gl->gl_flags);
gl_rcu4120        4121        if (4122                <4 href42This function should only bock.c#L203" id="L203" class="line" na4e="L213">4123}

4125/42/span>
 =us fromefs2/DLM.c#L204" id="L204" class="line" na4e="L116">4126 42gfs2_glock_hold() - increment.c#L204" id="L204" class="line" na4e7"L206">4127 42@gl: The glock to holdk.c#L130" id="L130" class="line" na4e="L208">4128 424129 4/gfs2_sbd *gl)
hash)
 *4130
4131void gfs2_glock_operations *glops = gl->gl_ops;
4132{
gfs2_sbd/glock*gl)
4133        gl-> *GLOFs/gOUT_T_UMASK hash)
4135}
4136
spin_unlo(&lru_loc href="+code=gl_state" class="sref">gl_state4137/437n_unlock" class="sref">spin="fs/gfs2/glock_p_ST_U_changahref="+code=GLF="fs/gfs2/glock_p_ST_U_changade=ha">gl)
gl_rcu4138 43t_bit" class="sref">set_bit<_ST_U_changahref="+code=GLF_ST_U_changalass=">gl)
gl_rcu4139 439_bit" class="sref">set_bit< nst struct gl->gl)
4140 44#L181" id="L181" class="line" na4e="L141">4141 44+code=kmem_caslock_put() - Decremenoc De claref=UNfrequest arrivassduring de claref=SH orgDFn>k.c#L130" id="L130" class="line" na4e="L142">4142 44+code=wake_upsref">gl->((GLF_LRUgl->gl_flags);
4143
spin href="+code=gl_flags" class="sref">gl_flags == gl_flags *hash)
)
4145{
4146        const str4ct 4147
gl->GLF_LRU<_ST_Uhref="+code=GLF_ST_Us="sr!pace" class="sref href="+code=gl_flags" class="sref">gl_flags *4148        if (gl->list_l" ca>((GLF_LRUgl->gl_flags);
4149                r4turn 44+code=GLOCK_BUG_ON" c        slock_put() - Decremenoc movaref=back ofnqueu> andncry next _roote>k.c#L130" id="L130" class="line" na4e="L150">4150        if (!gl-> *GLOFs/gOUT_CANCELD)
4151                r4turn 45+code=kmem_cache_freeUG_ON" cccccccccsreff">gl->gl_refh/a>);
GLOFs/gFLAG_PRIORITY/a>)
4152        if (GLOFcode=mova/taihref="+code=gl_fcode=mova/taihock" class="sref">lru_loc nst struct gl_refh/
);
gl->gl_flags))
4153                r4turn 45+code=list_del_init"                 sss="sref">GLOF nst struct gl->gl)
4154        return 1;4GLOF href="+code=gl_flags" class="sref">gl_flags *hash)
< nst struct gl_refh/a> == 4155}
GLOFrcoot *4156
4157
k.c#L130" id="L130" class="line" na4e="L138">4158void gl-> *GLOFs/gOUT_ERROR>(4159{
gl->gl_refh/a>);
gl->)
GLOFs/gFLAG_TRY_1CB/a>)
4160        GLOF href="+code=gl_flags" class="sref">gl_flags *hash)
< href="+code=gl_state" class="sref">gl_state == 4161
GLOFdo_error gl)
hash)
 *4162        if (!GLOFouot *4163                <4 href46+code=list_del_init"         9" id="L179" class="line" na4e="L164">4164        else
4165                <4 href46+code=list_del_init" switch="sref">GLF_LRU<_ST_Uhref="+code=GLF_ST_Us="s7s3" id="L183" class="line" na4e="L136">4166
k.c#L130" id="L130" class="line" na4e="L147">4167        hash)
)
4168        GLOFrcoot *4169        spindo_x cla gl)
hash)
< nst struct gl)
gl_flags *4170}
4171
k.c#L130" id="L130" class="line" na4e="L172">4172static void hash)
)
4173{
hash)
)
4174        if (!spindo_x cla gl)
hash)
< nst struct gl)
)
4175                <4 href47+code=list_del_init"         break4" id="L134" class="line" na4e="L136">4176                <4 href47+code=atomic_dec" cladefault:e"lock_put() - Decremenoc Evckything L165l>k.c#L130" id="L130" class="line" na4e="L147">4177                <4 href47+code=clear_bit" clas" class=ass="sref">spinprint>(&gl)
"GFS2: wantass%u=gots%u\n".c#L130,e">gl)
gl_flags *gl_rcu4178        }
GLF_LRUgl)
4179}
4180
gl_rcu(&lru_loc href="+code=gl_state" class="sref">gl_state4181static void 4182{
4183        4184        4185        gl->((GLF_LRUgl->gl_flags);
4186}
gl_flagsgl" de cla_e=sd*gl)
4187
gl->4188/48code=gfs2_sbdl_init" sref">gl->go_demx cla_bnst struct 4189 48+code=GLOCK_BUG_ON" clock" class="sref">spin_unlock(&lru_loc href="+code=gl_state" class="sref">gl_state4190 49ll_rcu" classUG_ON" ccccccccc>ss="sref">GLOFrvgl->go_demx cla_bnst struct gl)
4191 49+code=kmem_cache_freelock" class="sref">spin_unlo(&lru_loc href="+code=gl_state" class="sref">gl_state4192 49+code=wake_up" class=========sref">gl->4193 49+code=list_del_init"                 sss="sref">GLOFdo_error gl)
hash)
4194 49   const struct GLOFouot *4195
4196void 4197{
GLOFrvgl->gl)
4198        if (gl->4199                <4 href4"+code=GLOCK_BUG_ON" clock" clgotoaass="sref">GLOFouo_ru_last *5200}
5201
GLOFouot *5292/50+code=wake_upass="sref">GLOFbit(GLF_LRUgl->gl_flags);
5293 50+codeass="sref">GLOFouo_ru_last *5294 50   const struass="sref">spin_unlock(&lru_loc href="+code=gl_state" class="sref">gl_state5295
 50+code9" id="L179" class="line" na5e="L206">5206 50+code" id="L179" class="line" na5e7"L206">5297{
5208void 5299                <5/gloc50
5210        struct 
 @ href="f/glock (onlysforgpro clas)NL#L203" id="L203" class="line" na5e="L201">5211        struct 
 @targcoref="ftargcof/gfsf_ST_UNL#L203" id="L203" class="line" na5e2"L201">5212
5213        if (5115
gfs2_sbd *gl)
gfs2_sbd/glock*gl)
hash)
 *5116void hash)
<__reF_Lse))
lru_loc href="+code=gl_state" class="sref">gl_state5117{
hash)
<__acquire))
lru_loc href="+code=gl_state" class="sref">gl_state5118        struct 5119
gfs2_glock_operations *glops = gl->gl_ops;
5120        glops sdp(&gl->gl_ops;
sbo*5121        if (hash)
);
gl->hash)
< nst struct gl_refh/a>);
5122                <5 href52+code=wake_up="sref">hash)
 *5123}
spinlodea>);
gl->)
GLOFs/gFLAG_TRY_1CB/a>)
GLOFs/gFLAG_NOEXP/a>)
5125/52+code=list_del_init"       ass="sref">GLOFs/gFLAG_PRIORITY/a>)
5126 526n_unlock" class="sref">spinGLock_BUG_ON gl)
gl->gl_ops;
s> == gl-> *5127 527n_unlock" class="sref">spinGLock_BUG_ON gl)
gl->gl_ops;
s> == gl->gl_flags *5128 52code=gfs2_sbdsreff">gl-> *GLOFtargcot *5129 52+code=GLOCK_BUG_O">gl->go_deminvahref="+code=gl_fleminvah#L107s3" id="L183" class="line" na5e="L130">5130
gl_rcu(GLF_LRUgl->gl_flags);
5131void do_error gl)
5132{
5133        gl->gl_flagsgl-> *spin_a>(GLF_LRUgl->gl_flags);
5135}
gl)
gl_holdereq5136
gl->gl_state == 5137/53+code=clear_bit" f">gl->);
gl->)
GLOFs/gFLAG_TRY_1CB/a>)
5138 53code=gfs2_sbdl_init" class="sref">libit(GLF_LRUgl->gl_flags);
5139 539_bit" class="sref">set_bit<_unlock(&lru_loc href="+code=gl_state" class="sref">gl_state5140 540code=list_desref">gl->go_demx cla_tnst struct 5141 54+code=kmem_cache_free" class="sref"> hgo_demx cla_tnst struct 5142 54+code=wake_upsref">gl->((GLF_LRUgl->gl_flags);
5143
 hgo_deminvahref="+code=gl_fleminvah#L10a">gl)
gl-> *spinbit(GLF_LRUgl->gl_flags);
5145{
5146        const str5ct spin f2/glock_p/glo*gl)
5147
gl->gl_flagsd_ru_lck_ope(&gl->gl_flaglmo(&5148        if (5149                r5turn 54+code=GLOCK_BUG_ON" cef">hash)
 *gl->gl_flagsd_ru_lck_ope(&gl->gl_flaglmo(&gl)
gl-> *gl->);
5150        if (!spinGLock_BUG_ON gl)
gl-> *5151                r5turn 55+code=kmem_ca} L165l{ mlock_put() - Decremenoc lasspno/a> ckk.c#L130" id="L130" class="line" na5e="L152">5152        if (gl-> *5153                r5turn 55+code=list_del_init" sref">gl->_delayed_wor>(&gl)
queu>href="+code=gl" clsspwor>queu>#L10,e"sref">gl->gl_flags(&5154        return 1;5spin f2/glock_ppuot *gl)
5155}
5156
5157
spin_unlo(&lru_loc href="+code=gl_state" class="sref">gl_state5158void 5159{
5160        5161
5162        if (!5163                <5 href56gfs2_glock_put() - Decremenckk.c#L130" id="L130" class="line" na5e="L164">5164        else
5165                <5 href56c#L14entry" ="sref">gl_statin      a href="+codein    n_unl" class="sref">gfs2_sbd/glock*gl)
gfs2t *gl)
5166
5167        gfs2_sbd/glock*gl)
5168        5169        list_code=emptt *lru_loc href="+code=gl_state" class="sref">gl_state))
5170}
gl)
gl->gl)
gl_state))
gl->gfs2_sbd/glock*gl)
5171
gl->((GLF_LRUgl->gl_refh/ia>);
5172static void gl)
5173{
5174        if (!gl)
5175                <5 href57+code9" id="L179" class="line" na5e="L136">5176                <5 href57+code" id="L179" class="line" na5e="L147">5177                <5 href57@gl: The glock to hold5178        }

5179}
5180
5181static void 5182{
5183        5184        t *.c=ha" class="sref">gfs2_sbd *gl)
hash)
5185        hash)
<__reF_Lse))
lru_loc href="+code=gl_state" class="sref">gl_state5186}
hash)
<__acquire))
lru_loc href="+code=gl_state" class="sref">gl_state5187
5188/58code=gfs2_sbd" class="sref">gfs2_sbd/glock*gl)
gl->5189 58+code=GLOCK_B="sref">hash)
 *5190 59#L181" id="L181" class="line" na5e="L181">5191 59+code=kmem_casref">gl->((GLF_LRUgl->gl_flags);
5192 59+code=wake_up" class=lass="c" id="L183" class="line" na5e="L193">5193 59#L144" id="L144" class="line" na5e="L184">5194 59   const struass="sref">spinGLock_BUG_ON gl)
gl->((GLF_LRUgl->gl_flags);
5195
5196void gl->((GLF_LRUgl->gl_flags);
5197{
gl->gl_flags == gl_flags == 5198        if (gl->gl)
5199                <5 href5"+code=GLOCK_BUG_ON" clock" clgotoaass="sref">GLOFouo_ck(&6200}
gl->6201
GLOFouo_schast *6292/60+code=wake_up" class=">gl->(GLF_LRUgl->gl_flags);
6293 60+code=list_del_infree" class="sref">GLock_BUG_ON gl)
gl->gl_ops;
de cla_a> == 6294 60   const struct gl->gl_ops;
targcot *hash)
< href="+code=gl_state" class="sref">gl_state == 6295
 60+code=list_de9 L165l{" id="L185" class="line" na6e6"L201">6296void  60+code=atomic_dec" clasref">gl->((GLF_LRUgl->gl_flags);
6297{
spin=gl" de cla_e=sd*gl)
6208void lircot *gl->gl)
6299                <6/gloc60+code=GLOCK_BUG_ON" csref">gl-> *6210        struct GLOFouo_ck(&6211        struct gl-> *6212
GLOFouot *6213        if ( nst struct gl->gl)
gl->gl_ops;
targcot *hash)
< nst struct gl_refh/a> == 6115
gl->gl_refh/a>);
gl->)
GLOFs/gFLAG_TRY_1CB/a>)
6116void gl->gl)
6117{
6118        struct gl->gl)
hash)
< nst struct gl)
gl_flags *6119
GLOFouot *6120        6121        if (6122                <6 href62+codeass="sref">GLOFouo_schast *6123}
gl->(GLF_LRUgl->gl_flags);
spinsmp_mb__after_bit(6125/62+code=list_de="sref">gfs2_sbd p/glo*gl)
6126 62+code=atomic_sref">gl->_delayed_wor>(&gl)
queu>href="+code=gl" clsspwor>queu>#L10,e"sref">gl->gl_flags(&6127 62+code=clear_bit" classss="sref">GLOF f2/glock_ppuopno/a> * de=ha">gl)
6128 62code=gfs2_sbdlass="c" id="L183" class="line" na6e="L209">6129 62+code" id="L179" class="line" na6e="L130">6130
GLOFouo_ck(&6131void gl->(GLF_LRUgl->gl_flags);
6132{
GLOFsmp_mb__after_bit(6133        6135}
6136
_func gfs2_sbeor>_ck_ope(&gl)
(&6137/63st_ad3" id="L183" class="line" na6e="L208">6138 63code=gfs2_sbd" class="sref">gfs2_sbd *gl)
hash)
GLF_LRU(&gfs2_sbd *gl)
6139 639_bit" class=ck_operations" class="sref"sbo*glops sdp(&gl->gl_ops;
sbo*6140 64ll_rcu" classck_operations" class="sref"inss=*glops ip(&6141 64+code=kmem_cack_operations" class="inss=*glops inss=*6142 64+code=wake_upass="sref">GLOFu164    "+codeu6ode=dref">hash)
gl->gl_ops;
s="c*gl->6143
spinip(&gl->gl_ops;
6145{
6146        const str6ct 6147
gl->6148        if (gl->GLF_LRUgl_flagsd_vf
gl)
6149                r6turn 64+code=GLOCK_BL165" id="L134" class="line" na6e="L150">6150        if (!spininss=*gl->GLF_LRUgl)
gl)
gl)
)
6151                r6turn 65+code=kmem_casref">gl->list_IS_ERR(&GLF_LRU6152        if (GLF_LRU6153                r6turn 65+code=list_del_init" ">gl-> *gl)
6155}
gfs2_sbd ppuot *gl)
6156
6157
6158void _func gfs2_sbeor>_ck_ope(&gl)
(&6159{
6160        6161
gl)
hash)
GLF_LRU(&gfs2_sbd *gl)
_flags(&gl->(&6162        if (!hash)
6163                <6 href66#L144" id="L144" class="line" na6e="L164">6164        else
gl->((GLF_LRUgl->gl_flags);
6165                <6 href66+code=list_del_init" ="sref">gl_flagfinish_x cla gl)
gl->gl_holdereplt *6166
hash)
6167        6168        gl->(&lru_loc href="+code=gl_state" class="sref">gl_state6169        gl->((GLF_LRUgl->gl_flags);
6170}
lru_loc href="+code=gl_state" class="sref">gl_state == 6171
lru_loc href="+code=gl_state" class="sref">gl_state == 6172static void gl)
hash)
6173{
6174        if (!gl->gl->gl_ops;
tchang= gl->gl_ops;
/glo_ti"c*6175                <6 href67+code=list_del_init" sref">gl->GLF_LRUgl)
6176                <6 href67+code=atomic_dec" cla        ">gl->gl->gl)
6177                <6 href677n_un" id="L179" class="line" na6e="L178">6178        }
list_delat *6179}
hash)
(GLF_LRUgl->gl_flags);
6180
gl->(GLF_LRUgl->gl_flags);
6181static void 6182{
6183        gl->t *.c=ha">gl)
6184        spinsunlock(&lru_loc href="+code=gl_state" class="sref">gl_state6185        list_delat *6186}
hash)
 ppuot *gl)
6187
6188/68code=gfs2_sbdl_init" sref">gl->gl_ops;
s="c*gl->6189 68+code=GLOCK_BUG_ON" clock" clef">hash)
6190 69ll_rcu" classUG_ON" csref">gl->_delayed_wor>(&gl)
queu>href="+code=gl" clsspwor>queu>#L10,e"sref">gl->gl_flags(&list_delat *6191 69+code=kmem_cache_freelock" clef">hash)
 ppuot *gl)
6192 69+code=wake_up9" id="L179" class="line" na6e="L193">6193 693code=list_desrefef">hash)
6194 69   const struct gl-> ppuot *gl)
6195
6196void 6197{
6198        if ( sreon> doesn'tfex);
de#L203" id="L203" class="line" na6e="L209">6199                <6 href69
7200}
7291.c#L204" id="L204" class="line" na7e2"L201">7292/70This function should only bnt @create: If 0, don'tfcreate t="f"line if it doesn'tfex);
de#L203" id="L203" class="line" na7e3"L201">7293 70gfs2_glock_put() - Decremenck @gcp: t="f"line iselass="ed her>.c#L204" id="L204" class="line" na7e4"L201">7294 70   coThe glock to put
.c#L204" id="L204" class="line" na7e5"L201">7295
 70+codeglock_put() - Decremenck Thisedoesonot line afs/gfs, juglofinds/creates " clasures for on>..c#L204" id="L204" class="line" na7e6"L201">7296void  70+codeThe glock to put
.c#L204" id="L204" class="line" na7e7"L201">7297{
7298        if (
7299                <7/gloc70+code" id="L179" class="line" na7e="L210">7210        struct hash)
< f2/glock_pgett *gfs2_sbdsbo*glops sdp(&list_u164    "+codeu6ode=dref">hash)
7211        struct gfs2_operationst *glops ghhash)
7212
glops ghp(&7213        if (glops s)
gl->gl_flagsd_vf
7115
hash)
gl->gl->gl->gl->go_demtypc*7116void gfs2_sbd *gl)
gl)
7117{
hash)
gl->gl)
gl->7118        struct gfs2_sbaddress_#L1cc*gl)
7119
gl)
7120        7121        if (gl->(&7122                <7 href72+code=wake_upass="sref">GLOFef="fs/gfs2/glock.c#L14KEref">hash)
 *gl)
list_sdp(&gl->7123}
gl->(&7125/72+code=list_desref">glops ghp(&gl->7126 72+code=atomic_sref">gl->7127 72+code=clear_bit" claslass="c52" id="L152" class="line" na7e="L208">7128 72code=gfs2_sbdsrefass="sref">list_createa href="+code=GLreateass=8" id="L183" class="line" na7e9"L208">7129 72+code=GLOCK_BUG_ON" class="c-ss="sref">list_ENOENTa href="+code=GENOENT" cl4" id="L134" class="line" na7e="L130">7130
7131void gl->go_dema>);
GLF_LRU7132{
gl->7133        gl->gl->7135}
gfs2_sbdf="fs/gfs2/glock.c#L14KEref">hash)
gl)
gl)
7136
list_ef="fs/gfs2/glock.c#L148" id="L183" class="line" na7e7"L206">7137/73+code=clear_bit" claslass="c-ss="sref">list_ENOMEMa href="+code=GENOMEM" cl4" id="L134" class="line" na7e="L208">7138 737139 739_bit" class=="sref">gfs2_sbatomic_inc gl->gl_flagsd_lock_pdisposaf="fs/gfs2/glocksd_lock_pdisposafde=d34" id="L134" class="line" na7e="L140">7140 74ll_rcu" class">gl->gl_flagsgl->7141 74+code=kmem_ca">gl->gl_flags);
7142 74+code=wake_upass="sref">GLOF href="+code=gl_ops" class="sref">gl_ops;
s="c*gl->7143
gl-> *gl->gl_holderef=*spin href="+code=gl_state" class="sref">gl_state == 7145{
gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
targcot *hash)
)
7146        const str7ct gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
de cla_a> == 7147
gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
hasnst struct gl->7148        if (gl->gl_ops;
gl->7149                r7turn 749_bit" class=="sref">gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
da> mp(&hash)
 *7150        if (!gl->7151                r7turn 75+code=kmem_ca=lock_put() - Decremenoc We=us> t="f"libal a> =sref=estimate t="finitial per-"line a> =srkk.c#L130" id="L130" class="line" na7e="L152">7152        if (GLOF href="+code=gl_ops" class="sref">gl_ops;
a> =s gl->gl)
gl_flagsd_lka> =s gl_flaglka> =s gl->go_demtypc*7153                r7turn 75+code=list_de">gl->spin href="+code=gl_state" class="sref">gl_state =s gl-> =s gl->7155}
gfs2_sbdhref="+code=gl_state" class="sref">gl_state =s gl-> =s gl->7156
gfs2_sbmemsett *gl->gl_holdelkab gfs2_sbdlmo7157
gfs2_sbmemsett *gl->gl_holdelvb 7158void gl->gl_ops;
lkab gl->gl->gl_holdelvb 7159{
gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
tchang= hash)
7160        gl->gl_flags;
hash)
7161
gl->gl_flags;
/glo_ti"cass=rEref">hash)
)
7162        if (!GLOFINIT_DELAYED_WORk gl->gl_holdewor>(&list_ clsspwor>_func 7163                <7 href76+code=list_de">gl->gl->gl_holdedelela list_delela_eor>_func 7165                <7 href76+code=list_de="sref">gfs2_sbmapping*gl->gl->7166
gl->7167        GLOFmapping*gl_hoa
gl->7168        gl_hohose(&gl->gl_flags_bdev*gl_flagbd"inss=*7169        gl_hoa>);
7170}
de=ha">gl->gl)
7171
GLOFmapping*gl_hoassoc_mapping*hash)
7172static void GLOFmapping*gl_hobacking_dev"info*gl->gl_flags_bdi*7173{
gl->gl_howriteback"index*7175                <7 href77#L196" id="L196" class="line" na7e="L136">7176                <7 href776code=list_de="sref">gfs2_sb+coderu_l_buckett *gl->7177                <7 href77st_add_tail" ="sref">gfs2_sbtmp(&hash)
 *gl)
list_sdp(&gl->7178        }
gfs2_sbtmp(&7179}
gfs2_sb+codeck_buckett *_bucketde=ha">gl->7180
hash)
gl->gl)
7181static void gl_hoatomic_dec gl->gl_flagsd_lock_pdisposaf="fs/gfs2/glocksd_lock_pdisposafde=d34" id="L134" class="line" na7e="L172">7182{
GLOFdf="fs/gfs2/glock.c#L14KEref">hash)
7183        7184        gl->l_add_headorcust struct l_add_headorcude=ha"sref">gl->gl_holdelise(&gl->gl->7185        gfs2_sb+codeck_buckett *_bucketde=ha">gl->7186}
7187
7188/78code=gfs2_sbdsref">glops ghp(&gl->7189 78+code" id="L179" class="line" na7e="L190">7190 79ll_rcu" classlass="c52" id="L152" class="line" na7e="L181">7191 79+code9" id="L179" class="line" na7e="L192">7192 79+code" id="L179" class="line" na7e="L183">7193 79gfs2_glock_put() - Decremenock.c#L203" id="L203" class="line" na7e="L164">7194 79   coThe glock to put
  f2/g/gloer_init -finitialize a=ck_oper f2/g/gloerfin t="fdefault watas#L203" id="L203" class="line" na7e="L135">7195
7196void  == we'reslaquesting="#L203" id="L203" class="line" na7e="L177">7197{
7198        if (7199                <7 href79
8200}
82918292/80This ck_remove_from_lru"  f2/g/gloer_inithref="+code=gl" gl" /gloer_initde=ha" class="sref">gfs2_sbd *gl)
hash)
 == gl_hoa>);
8293 80+code=list_del_init"       " class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
8294 80   co{" id="L185" class="line" na8e5"L201">8295
 80+code=list_de="sref">gfs2_sbINIT_LIST_HEA)
gl->gl_holhelise(&8296void  806code=list_de="sref">gfs2_sbdnst struct gl_holheef="fs/gfs2/glock.heefass=ref">gl->8297{
gfs2_sbdnst struct gl_holheip(&gl_ho__builtin_lass="_address(&8298        if (gl->gl_holheowclr_pio*gl->gl->gl->8299                <8/gloc809_bit" class=="sref">gfs2_sbdnst struct gl_holhea> ==  ==NLOC7" id="L147" class="line" na8e="L210">8210        struct gl->gl_holhea>);
gl_hoa>);
8211        struct gl->gl_holheerrorhref="+code=gl" heerrorc#L1"ef52" id="L152" class="line" na8e2"L201">8212
GLOF nst struct gl_holheia>);
8213        if (gl->gl->8115
8116void 8117{
8118        struct 
 == we'reslaquesting="#L203" id="L203" class="line" na8e9"L208">8119
8120        8121        if (8122                <8 href82This function should only bnt Don'tfmess with t="f"line..c#L204" id="L204" class="line" na8e="L213">8123}

k.c#L130" id="L130" class="line" na8e5"L203">8125/82#L196" id="L196" class="line" na8e6"L201">8126 82+codeck_remove_from_lru"  f2/g/gloer_reinithref="+code=gl" gl" /gloer_reinitde=hash" class="sref">hash)
 == gl_hoa>);
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
8127 82+code{" id="L185" class="line" na8e="L208">8128 82code=gfs2_sbd">gl->gl_holhea> ==  ==NLOC7" id="L147" class="line" na8e9"L208">8129 829_bit" class=="sref">gfs2_sbdnst struct gl_holhea>);
gl_hoa>);
8130
gl->gl_holheia>);
8131void gl->gl_holheip(&gl_ho__builtin_lass="_address(&8132{
gl->gl_holheowclr_pio*8133        gl->gl->gl_holheowclr_pio*gl->gl_holheowclr_pio*gl->gl->gl->8135}
8136
8137/83@gl: The glock to hold8138 83/span>
8139 83
8140 84@gl: The glock to put
c##L203" id="L203" class="line" na8e="L131">8141 84 clasThe glock to put
k.c#L130" id="L130" class="line" na8e="L132">8142 84+code" id="L179" class="line" na8e="L213">8143
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
8145{
gfs2_sbput_pio*gl->gl_holheowclr_pio*8146        const str8ct gfs2_sbdgl" classppuot *gl)
gl_holheef="fs/gfs2/glock.heefass=37" id="L147" class="line" na8e7"L206">8147
gfs2_sbdnst struct gl_holheef="fs/gfs2/glock.heefass=ref">gl->8148        if (gl->gl_holheip(&8149                r8turn 849_bit9" id="L179" class="line" na8e="L150">8150        if (!8151                r8turn 85 clasThe glock to put8152        if (8153                r8turn 85gfs2_glock_put() - Decremenck @word:funusedde#L203" id="L203" class="line" na8e="Lgfs2/8154        return 1;8
.c#L204" id="L204" class="line" na8e="L135">8155}
8156
8157
8158void 8159{
8160        hash)
<=gl" classp/glolr_wai
*gl)
8161
8162        if (!GLOFschedul= 8163                <8 href86+code=list_delass="c52" id="L152" class="line" na8e="Lgfs2/8164        else
8165                <8 href86#L196" id="L196" class="line" na8e="L126">8166
hash)
<=gl" classpde cla_wai
*gl)
8167        8168        gl->8169        8170}
8171
8172static void 8173{

 @gh: t="f"line /gloer="#L203" id="L203" class="line" na8e="L135">8175                <8 href87+codeglock_put() - Decremenck="#L203" id="L203" class="line" na8e="L126">8176                <8 href87+codeThe glock to put
 Rass="sre0 on successde#L203" id="L203" class="line" na8e7"L206">8177                <8 href87@gl: The glock to hold
k.c#L130" id="L130" class="line" na8e="L178">8178        }
8179}
hash)
<=gl" classpwai
*gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
8180
8181static void hash)
gl->8182{
8183        gl->8184        gl->gl->gl_holheia>);
gl)
gl)
gl)
8185        gfs2_sbti"c_afterhref="+code=gl"ti"c_afterde=ha">gl)
gl)
gl)

k.c#L130" id="L130" class="line" na8e="L136">8186}

k.c#L130" id="L130" class="line" na8e7"L206">8187
GLOFdnst struct gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flags;
/glo_ti"cass=rEref">hash)
gl)
gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flags;
/glo_ti"cass=r+" id="L130" class="line" na8e="L178">8188/88code=gfs2_sbddddddddddddddddddddddddddddddddddddddd="sref">gl_flagGL_GLock_HOL<_INCR*8189 88+code=GLOCK_BUG_ON" cdddddddddddddddddddddddddddddd="sref">gl_flagGL_GLock_MAX_HOL)
8190 89ll_rcu" classlass="c">gl)
gl_holheerrorhref="+code=gl" heerrorc#L17" id="L147" class="line" na8e="L161">8191 89+code9" id="L179" class="line" na8e="L192">8192 89+code" id="L179" class="line" na8e="L183">8193 89gfs2_glock_put() - Decremenock.c#L203" id="L203" class="line" na8e="L164">8194 89   coThe glock to put
 handlc_callback - process a=de claslaquest.c#L203" id="L203" class="line" na8e="L135">8195
8196void  == t="fcaller wants usref=chang=refas#L203" id="L203" class="line" na8e7"L206">8197{
8198        if (8199                <8 href89
9200}
92919292/90This a> =icsck_remove_from_lru" handlc_callbackhref="+code=gl"handlc_callbackde=ha" class="sref">gfs2_sbd *gl)
hash)
 == 9293 90+code=list_del_init"             sh" classlongref">hash)
9294 90   co{" id="L185" class="line" na9e5"L201">9295
 90+code=list_de="sref">hash)
hash)
gl_flagGLF_PENDING_DEMOTE*gl_flagGLF_DEMOTE*9296void  90+code" id="L179" class="line" na9e7"L201">9297{
gfs2_sbset_bi
*gl)
gl->gl_flags);
9298        if (gl->gl_ops;
de cla_a> == 9299                <9/gloc90+code=GLOCK_BUG_ON" c="sref">gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
de cla_a> ==  ==NLOC7" id="L147" class="line" na9e="L210">9210        struct hash)
gl_ops;
de cla_ti"c*gl->9211        struct gl->gl_ops;
de cla_a> == hash)
)
9212
gfs2_sbdf="fs/gfs2/glock.c#L14ass="sref">gl_ops;
de cla_a> == hash)
 == 9213        if (gl->gl_ops;
de cla_a> == 9115
gfs2_sb href="+code=gl_ops" class="sref">gl_ops;
go_demcallbackhref="+code=gl"demcallbackNLOC3" id="L179" class="line" na9e6"L201">9116void gfs2_sb href="+code=gl_ops" class="sref">gl_ops;
go_demcallbackhref="+code=gl"demcallbackNLOCa">gl->9117{
gfs2_sbtrace_=gl" de cla_rqst struct gl->9118        struct 9119
9120        gfs2_sbseq_fil= gl)
gl)
9121        if (9122                <9 href92+code=wake_up" class="sref">gfs2_sbva_format*gfs2_sbvaf=*9123}
gl->gfs2_sbar;
9125/92+code=list_de="sref">gfs2_sbva_a> re(&gl->gl)
9126 92+code" id="L179" class="line" na9e7"L206">9127 927code=list_desref="sref">gfs2_sbseq 9128 92code=gfs2_sbddddddddd="sref">gfs2_sbseq_vpr="sf=*gl->gl)
gl->9129 929_bit" class=}bL165l{" id="L185" class="line" na9e="L130">9130
hash)
gl->gl_hoam
*9131void gl_hovaf=*gl->gl->9132{
9133        gl->gl->" %pV".c#L130, "sref">gl->9135}
9136
gfs2_sbva_end*gl->9137/93@gl: 9" id="L179" class="line" na9e="L208">9138 939139 93
9140 94@gl: The glock to put
 add_to_queue - Add a=/gloerfto t="fwai
 queue (but look for recursion).c#L203" id="L203" class="line" na9e="L131">9141 94 clasThe glock to put
 @gh: t="f/gloerf" clasurefto add.c#L203" id="L203" class="line" na9e="L132">9142 94This function should only bnt.c#L203" id="L203" class="line" na9e="L213">9143

 debuggingroption orfsomethingrlikerehat. Thiseis t="ffast.c#L203" id="L203" class="line" na9e5"L203">9145{
9146        const str9ct 
 .c#L204" id="L204" class="line" na9e7"L206">9147
9148        if (9149                r9turn 949_bita> =ics">gl->gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
9150        if (!gl)
gl->gl_flags9151                r9turn 95 clasT>gl)
gl->gl_flags9152        if (9153                r9turn 95+code=list_de" class="sref">gfs2_sbd *gl)
gl->gl_holheef="fs/gfs2/glock.heefass=4" id="L134" class="line" na9e="Lgfs2/9154        return 1;9gfs2_sbdsbo*gl)
gl->gl_flags9155}
gfs2_sbli cahead*gl)
gl->9156
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
9157
hash)
9158void 9159{
gfs2_sbBUG_ON gl->gl_holheowclr_pio*gl->9160        gfs2_sbte caand_set_bi
*gl->gl->gl_holheia>);
9161
gl_hoBUG 9162        if (!9163                <9 href96+code=list_desref">gl->gl_holhea>);
gl->)
gfs2_sbte cabi
*gl->gl->gl_flags);
9165                <9 href96+code=list_deUG_ON" cche_freess="sref">gl_hotry_futil= gl_homay_graspa&gl->gl)
9166
gfs2_sbte cabi
*gl->gl->gl_flags);
9167        gl_hoaaih="fs/gfs2/glockaaih#L107" id="L147" class="line" na9e="L208">9168        9169        9170}
gl->gl->gl->gl_flagsgl)
9171
gfs2_sbunlikely*gl->gl_holheowclr_pio*gl->gl_holheowclr_pio*9172static void gl)
gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flagsgo_demtyp= hash)
9173{
gl_hoerap_recursiv= gfs2_sbtry_futil= 9175                <9 href97+code=list_deUG_ON" cche_!a">gl->gl_holhea>);
gl->)
9176                <9 href97+codeTs="sref">gl_hoaaih="fs/gfs2/glockaaih#L10:" id="L185" class="line" na9e7"L206">9177                <9 href97+code=clear_bit" classsssssss">gl)
gl_holheerrorhref="+code=gl" heerrorc#L1"ef">gl->)
9178        }
gfs2_sbd/gloer_wak= gl->9179}
9180
9181static void gfs2_sbte cabi
*gl->gl->gl_holheia>);
9182{
9183        gfs2_sbunlikely*gl->gl_holhea>);
gl_hoinsert_p
*gfs2_sbinsert_p
*gl->gl_holhelise(&9185        9186}
gfs2_sbset_bi
*gl)
)
gl->gl_flags);
9187
gfs2_sbtrace_=gl" classpqueuegl->9188/98code=gfs2_sbd">gl-> =s_inc* =s_incNLOCa">gl->gl)
9189 989_bit" class=="sref">gfs2_sbdgl" sba> =s_inc* =s_incNLOCa">gl->gl)
9190 99ll_rcu" classsref="sref">gfs2_sblikely*gl->gl->9191 99+code=kmem_cache_freess="sref">gl_holi caadd_taih="fs/gfs2/glockli caadd_taihNLOCa"sref">gl->gl_holhelise(&gl->gl_flags9192 99+code=wake_up" class=sref="sref">gfs2_sbunlikely*gl->gl_holhea>);
9193 99+code=list_del_init"         gotofss="sref">gl_hodemcanceh="fs/gfs2/glockdemcancehs="s4" id="L134" class="line" na9e="L164">9194 99   const struct 9195
9196void gfs2_sbli caadd_taih="fs/gfs2/glockli caadd_taihNLOCa"sref">gl->gl_holhelise(&gl_hoinsert_p
*9197{
gl_hodemcanceh="fs/gfs2/glockdemcancehs="s:" id="L185" class="line" na9e="L178">9198        if (gl->gl->gl->gl_flagsgl->gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sr, ">gl)
9199                <9 href999_bit" class=sref!a">gl->gl_holhea>);
10e="L/a>                <10e=">10e=code=kmem_cache_freess="sref">gl_hoscod_unla> *gl->gl_flags10e91gfs2_sbsdp(&gl_flagsd_line" clas(&gl->gl_flaglmmcanceh="fs/gfs2/glocklmmcancehNLOC3" id="L185" class="line" na10e2"L200">10e92gfs2_sbsdp(&gl_flagsd_line" clas(&gl->gl_flaglmmcanceh="fs/gfs2/glocklmmcancehNLOCa">gl->10e93gl-> *gl->gl_flags10e9410e95
10e96void 10e97{
gl_hoerap_recursiv= 10e98        if (10ecode=gfs2_sbd">gl->gl->"original: %s\n".c#L130, ">gl->gl_holheip(&10e99                <10e99>10e9_bit" class=="sref">gfs2_sbpr="skhref="+code=gl"pr="skNLOCa">gl->"pid: %d\n".c#L130, ">gl->gl->gl_holheowclr_pio*10210        struct 1021_bit" class=="sref">gfs2_sbpr="skhref="+code=gl"pr="skNLOCa">gl->"line typ=: %dslaq linefa> == : %d\n".c#L130," id="L147" class="line" na1011"L200">10211        struct 102+code=kmem_cache_fre">gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flagsgl->gl)
gl_holhea> == 10212
GLOFpr="s_symboh="fs/gfs2/glockpr="s_symbohNLOCa">gl->"new: %s\n".c#L130, ">gl->gl_holheip(&10213        if (102+code=list_de">gl->gl->"pid: %d\n".c#L130, ">gl->gl->gl_holheowclr_pio*10lock.c#L103" id="L103" c10loc>102   const stru">gl->gl->"line typ=: %dslaq linefa> == : %d\n".c#L130," id="L147" class="line" na1015"L200">10115
gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flagsgl->gl)
gl_holhea> == 10116void gfs2_sb__dump> *gl->gl)
10117{
gfs2_sbBUG 10118        struct 102/span9" id="L179" class="line" na1029"L200">10119
10120        10121        if (101 clasThe glock to put
 =gl" classpnq - enqueue a " class gl" /gloer onto af"line (acquire af"line).c#L203" id="L203" class="line" na1012"L200">10122                <10122>101This function should only bnt @gh: t="f/gloerf" clasure.c#L203" id="L203" class="line" na1013"L200">10123}
10124
1012510126101271012810129hash)
<=gl" classpnq gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
10130
10131void gfs2_sbd *gl)
gl->gl_holheef="fs/gfs2/glock.heefass=4" id="L134" class="line" na1012"L200">10132{
gfs2_sbdsbo*gl)
gl->gl_flags10133        hash)
10134        10135}
gfs2_sbunlikely*gl->gl->gl->gl_flagsd_a>);
10136
gl_flagEIO1013710138gl->gl->gl->gl_flags);
10139gfs2_sbdgl" classpremov=_from_lru gl->1014010141gl-> *gl->gl_flags10142GLOFadd_to_queuegl)
10143
gl->)
gl_holhea>);
10144static int 101   const struct <">gl->gl->gl->gl_flags);
10145{
gl->gl)
gl->gl_flags);
10146        const str10146>1016code=list_de="sref">gfs2_sbrun_queuegl->10147
gfs2_sbscod_unla> *gl->gl_flags10148        if (10110149                r10149>1019_bit" class=sref!a">gl->gl_holhea>);
10150        if (!1015code=list_deUG_ON" c">gl->gfs2_sbdgl" classpwai
 gl)
10151                r10151>101 clas" id="L130" class="line" na1012"L200">10152        if (101+code=wake_uplass="c">gl)
10153                r10153>1013span9" id="L179" class="line" na1054"L200">10154        return 1;10154>101ode=d" id="L130" class="line" na1055"L200">10155}
10156
10157
10158void 10159{
10160        10161
10162        if (!1012code="sref">hash)
<=gl" classppoll gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
10163                <10163>1013NLOC{" id="L185" class="line" na1064"L200">10164        else
1014code=wake_uplass="c">gl)
gl->gl->gl_holheia>);
10165                <10165>1015span9" id="L179" class="line" na1066"L200">10166
10167        10168        10169        10170}
10171
10172static void 101+code" id="L179" class="line" na1013"L200">10173{
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
10174        if (!101   co{" id="L185" class="line" na1015"L200">10175                <10175>1015code=list_de" class="sref">gfs2_sbd *gl)
gl->gl_holheef="fs/gfs2/glock.heefass=4" id="L134" class="line" na1076"L200">10176                <10176>1016code=list_deconst=" class="sref">gfs2_sbd _operations gl)
gl->gl_flags10177                <10177>101st_add_tail" unsigneremove_from_lru" delay*10178        }
101code=gfs2_sbds"sref">hash)
10179}
10180
gl-> *gl->gl_flags10181static void 101+code=kmem_casref">gl->gl_holhea>);
10182{
gl->gl->)
10183        10184        gl->gl->gl_holhelise(&10185        gfs2_sbfind_fir cahgloerhref="+code=gl"find_fir cahgloerNLOCa">gl->gl->10186}
gfs2_sbefgo_demunla> *10187
gl)
gl->gl->gl->gl->gl_flags);
10188gfs2_sbscod_unla> *gl->gl_flags10189gfs2_sbefgo_demunla> *gl)
10190gfs2_sbscod_la> *gl->gl_flags10191gfs2_sbclear_bi
*gl->gl->gl_flags);
1019210193gfs2_sbli caempty*gl->gl_flags10194gl_hote cabi
*gl->gl->gl_flags);
10195
gl_hote cabi
*gl->gl->gl_flags);
10196void gfs2_sbfast_path*10197{
10198        if (101code=gfs2_sbdsref!ss="sref">gl_hote cabi
*gl->gl->gl_flags);
gl->10199                <10199>101+code=GLOCK_BUG_ON" c="sref">gfs2_sbdgl" classpadd_to_lru gl->11e="L/a>                <11e=">1104de=d" id="L130" class="line" na11e1"L200">11e91gl->gl->11e92GLOFscod_unla> *gl->gl_flags11e93gfs2_sblikely*gl->11e9411e95
11e96void gfs2_sb=gl" classp/glo gl->11e97{
gfs2_sbte cabi
*gl->gl->gl_flags);
11e98        if (110code=gfs2_sbddddd!ss="sref">gl_hote cabi
*gl->gl->gl_flags);
11e99                <11e99>110+code=GLOCK_BUG_O">gl->gl_flagsgl->gl->11210        struct 1115code=list_deUG_ON" c">gl->gl->gl_flags11211        struct 111+code=kmem_casref">gl->gl->gl->gl_flagsgl->11212
gl->11213        if (1113span9" id="L179" class="line" na1114"L200">11lock.c#L103" id="L103" c11loc>111ode=d" id="L130" class="line" na1115"L200">11115
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
11116void 11117{
gfs2_sbd *gl)
gl->gl_holheef="fs/gfs2/glock.heefass=4" id="L134" class="line" na1128"L200">11118        struct 111code=gfs2_sbd">gl->gl)
11119
gfs2_sbmight_sleep(&11120        gl->gl->gl_flags);
gl)
gl->gl->11121        if (111 clas9" id="L179" class="line" na1112"L200">11122                <11122>112+code" id="L179" class="line" na1113"L200">11123}
11124
1112511126111271112811129gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
11130
11131void gl->gl)
11132{
GLOF gl" /gloerpunini
 gl)
11133        11134        11135}
11136
11137111381113911140 ==: t="fa> == to acquire t="f"line in.c#L203" id="L203" class="line" na1141"L200">111411114211143
11144static int 114   coThe glock to put
 Rass="sreerrno.c#L203" id="L203" class="line" na1115"L200">11145{
11146        const str11146>114+code" id="L179" class="line" na1117"L200">11147
hash)
<=gl" classpnq_num gfs2_sbdsbo*gl)
gl->    href="u14code=">gl->    href="number.ca0," id="L147" class="line" na1118"L200">11148        if (114code=gfs2_sbdddddddddddddddconst=" class="sref">gfs2_sbd _operations gl)
11149                r11149>114+code=GLOCK_BUG_ON" cddddddunsignere="sref">hash)
 == hash)
);
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
11150        if (!1153NLOC{" id="L185" class="line" na1151"L200">11151                r11151>115+code=kmem_ca" class="sref">gfs2_sbd *gl)
11152        if (111+code=wake_ups"sref">hash)
11153                r11153>1153code" id="L179" class="line" na1154"L200">11154        return 1;11154>115   const stru">gl->gfs2_sbdgl" classpge
 gl)
gl->    href="number.ca0,d="sref">gfs2_sbefgfs2_sbCREATE gl->11155}
gl_hoerrorhref="+code=gl"errorc#L13l{" id="L185" class="line" na1156"L200">11156
gl->gfs2_sbdgl" classpnq_ini
 gl->gfs2_sba> == hash)
);
gl)
11157
gl->11158void 11159{
11160        gl)
11161
11162        if (!116+code" id="L179" class="line" na1163"L200">11163                <11163>116gfs2_glock_put() - Decremenock.c#L203" id="L203" class="line" na1164"L200">11164        else
116   coThe glock to put
 =lasspoompare - Compare twof" class gl" "line " clasure."for sorting.c#L203" id="L203" class="line" na1165"L200">11165                <11165>116+codeglock_put() - Decremenck @arg_a: t="ffirst=" clasure.c#L203" id="L203" class="line" na1166"L200">11166
11167        11168        11169        11170}
hash)
<=lasspoomparegl)
gl)
11171
11172static void 117+code=wake_upconst=" class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref*)">gl)
11173{
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref*)">gl)
11174        if (!1174code=wake_upconst=" class="sref">gfs2_sblm_la> ructhref="+code=gl"lm_la> ruct="sref">gl)
gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flags11175                <11175>1115code=list_deconst=" class="sref">gfs2_sblm_la> ructhref="+code=gl"lm_la> ruct="sref">gl)
gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flags11176                <11176>117+code" id="L179" class="line" na1177"L200">11177                <11177>1177code=list_desref="sref">gfs2_sbagl_flagln_number4    href="ln_numbercode=lasss="sref">gfs2_sbbgl_flagln_number4    href="ln_numbercode3" id="L179" class="line" na1178"L200">11178        }
117code=gfs2_sbdddddddddlass="c14" id="L134" class="line" na1179"L200">11179}
gfs2_sbagl_flagln_number4    href="ln_numbercode=llsss="sref">gfs2_sbbgl_flagln_number4    href="ln_numbercode3" id="L179" class="line" na118="L200">11180
11181static void 118+code=kmem_ca">gl->gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flagsgo_demtyp= gl->gl_holheef="fs/gfs2/glock.heefass=class="sref">gl_flagsgo_demtyp= 11182{
11183        11184        11185        11186}
11187
11188111891119011191111921119311194hash)
    href="nq_m_syncNLOCaunsignere="sref">hash)
    href="num_ nNLOC, " class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
11195
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref*="sref">gfs2_sbp(&11196void 11197{
hash)
11198        if (119code=gfs2_sbds"sref">hash)
11199                <11199>119+code" id="L179" class="line" na12e="L200">12e="L/a>                <12e=">1205code=list_defor a">gl->hash)
gfs2_sbnum_gh4    href="num_ nNLOC2ref">hash)
12e91gfs2_sbp(&hash)
gl->hash)
12e9212e93gfs2_sbaor
*gl->gl->    href="num_ nNLOC, "izeofa" class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref),d="sref">gfs2_sbefgfs2_sbNULLst struct 12e9412e95
gl->hash)
gfs2_sbnum_gh4    href="num_ nNLOC2ref">hash)
12e96void gl->hash)
gl_holhea>);
gl->12e97{
12e98        if (120code=gfs2_sbdddddstru">gl->gfs2_sbdgl" classpnq gl)
hash)
12e99                <12e99>120+code=GLOCK_BUG_O_sbdsref="sref">gfs2_sberrorhref="+code=gl"errorc#L13l{" id="L185" class="line" na121="L200">12210        struct 1215code=list_deUG_ON" cccccccccwhile a">gl->12211        struct 121+code=kmem_cache_freeddddddddddddstru">gl->gl)
hash)
12212
12213        if (121+code=list_del_init" 9" id="L179" class="line" na1214"L200">12lock.c#L103" id="L103" c12loc>1214code=wake_up9" id="L179" class="line" na1215"L200">12115
12116void gl)
12117{
12118        struct 12112119
12120        12121        if (122 clasThe glock to put
 @num_gh: t="fnumber of " clasure..c#L203" id="L203" class="line" na1212"L200">12122                <12122>122This function should only bnt @ghs:  glarray of " class gl" /gloer " clasure..c#L203" id="L203" class="line" na1213"L200">12123}
12124
1212512126121271212812129hash)
<=gl" classpnq_m hash)
    href="num_ nNLOC, " class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
12130
12131void gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
12132{
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref*="sref">gfs2_sbpph4    href="pphc#L1"ef="sref">gfs2_sbtmp(&12133        hash)
12134        12135}
gl)
    href="num_ nNLOC3l{" id="L185" class="line" na1236"L200">12136
121371213812139gfs2_sbdn
gl_holhea>);
gl->12140gfs2_sbdgl" classpnq gl)
1214112142gfs2_sbnum_gh4    href="num_ nNLOC=llss= 43" id="L179" class="line" na1243"L200">12143
12144static int 124   const struct gfs2_sbpph4    href="pphc#L1"ef="sref">gfs2_sbkmalloc4    href="kmallocNLOCa">gl)
    href="num_ nNLOC=* "izeofa" class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref),d="sref">gfs2_sbGFP_NOFS 12145{
gl_hopph4    href="pphc#L13" id="L179" class="line" na1246"L200">12146        const str12146>124+code=atomic_nst struddddddddlass="c-ss="sref">gl_hoENOMEM4    href="ENOMEMcode2" id="L152" class="line" na1217"L200">12147
12148        if (12412149                r12149>1249_bit" class=="sref">gfs2_sberrorhref="+code=gl"errorc#L1"ef="sref">gfs2_sbnq_m_sync4    href="nq_m_syncNLOCaef">hash)
    href="num_ nNLOC, ">gl)
gfs2_sbpph4    href="pphc#L132" id="L152" class="line" na125="L200">12150        if (!1254de=d" id="L130" class="line" na1251"L200">12151                r12151>125+code=kmem_casref">gl->    href="pphc#L1"!ef="sref">gfs2_sbtmp(&12152        if (125+code=wake_up" class=="sref">gfs2_sbkfree4    href="kfreeNLOCa">gl)
    href="pphc#L132" id="L152" class="line" na1253"L200">12153                r12153>1253code" id="L179" class="line" na1254"L200">12154        return 1;12154>125   const strulass="c">gl)
12155}
12156
12157
12158void 12159{
12160        12161
12162        if (!126This function should only bntk.c#L130" id="L130" class="line" na1263"L200">12163                <12163>1263code" id="L179" class="line" na1264"L200">12164        else
126   cock_remove_from_lru"  f2/gclasspdqpm hash)
    href="num_ nNLOC, " class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
12165                <12165>126+code{" id="L185" class="line" na1266"L200">12166
gl->    href="num_ nNLOC--3" id="L179" class="line" na1267"L200">12167        gl->hash)
    href="num_ nNLOC]32" id="L152" class="line" na1268"L200">12168        12169        12170}
12171
12172static void 127This function should only bnt @num_gh: t="fnumber of " clasure..c#L203" id="L203" class="line" na1213"L200">12173{
12174        if (!127   coThe glock to put
.c#L203" id="L203" class="line" na1215"L200">12175                <12175>127+codeglock_put() - Decremenckk.c#L130" id="L130" class="line" na1216"L200">12176                <12176>127+code" id="L179" class="line" na1277"L200">12177                <12177>1277codeck_remove_from_lru"  f2/gclasspdqpunini
pm hash)
    href="num_ nNLOC, " class="sref">gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
12178        }
127code={" id="L185" class="line" na1279"L200">12179}
gl->    href="num_ nNLOC--3" id="L179" class="line" na128="L200">12180
gl->hash)
    href="num_ nNLOC]32" id="L152" class="line" na1281"L200">12181static void 128 clas9" id="L179" class="line" na1282"L200">12182{
12183        gfs2_sbd *gl)
hash)
 == 12184        12185        gl->12186}
gl->12187
gl->    href="nowc#L1"ef="sref">gfs2_sbjiffie
1218812189gfs2_sbef2/gclassp/glo gl->12190gl->gl->gl_flagsgl->gl_flags12191gl->gl->gl->gl_flags);
12192gl->gl_flagsgl->gl->12193gl->hash)
    href="nowc#L1,r="sref">gfs2_sb/gloticthref="+code=gl"/glotictc#L133" id="L179" class="line" na1294"L200">12194gl->gl->gl->    href="nowc#L1f" id="L147" class="line" na1295"L200">12195
gl->gl->gl->gl_flags);
12196void gl->gl->gl_flags12197{
12198        if (12912199                <12199>1299_bit" class=="sref">gfs2_sbscod_/a> *gl->gl_flags13e="L/a>                <13e=">1308code=kmem_ca">gl-> *gl->gfs2_sba> == hash)
13e91gl-> *gl->gl_flags13e92gl->gl->gl->gl_flagsgl->13e93gfs2_sbef2/gclassppu
 gl->13e9413e95
13e96void 13e97{
13e98        if (130/span>
13e99                <13e99>130
13210        struct 1317span>
13211        struct 131 clasThe glock to put
  glerror, (b) t="flineing operation was  glun/a>  operation or.c#L203" id="L203" class="line" na1312"L200">13212
13213        if (131gfs2_glock_put() - Decremenoc.c#L203" id="L203" class="line" na1314"L200">13lock.c#L103" id="L103" c13loc>131   coThe glock to put
 Rass="sre1psrefreezing shoulo occur, 0 ot="rwisec##L203" id="L203" class="line" na1315"L200">13115
13116void 13117{
hash)
<=gl" shoulo_freeze gfs2_sbd *gl)
13118        struct 131code={" id="L185" class="line" na1329"L200">13119
gfs2_sbd/gloerhref="+code=gl" gl" /gloer="sref">gl)
13120        13121        if (132+code=kmem_casref">gl->gl_flagsgl->13122                <13122>132+code=wake_up" class=lass="c52" id="L152" class="line" na1313"L200">13123}
gl->gl_flagsgl->13124
1312513126gl->gl->gl->gl_flagsgl->13127gl->gl->gl->gl_holheia>);
1312813129gfs2_sbLM_FLAG_NOEXP gl->gl_holhea>);
13130
13131void 13132{
13133        13134        13135}
13136
131371313813139131401314113142 == fielos..c#L203" id="L203" class="line" na1343"L200">13143
13144static int 134ode=d" id="L130" class="line" na1345"L200">13145{
gfs2_sbd *gl)
hash)
13146        const str13146>1346code{" id="L185" class="line" na1317"L200">13147
gfs2_sblm_la> " clas*gl)
gl->gl_flagsgl_flagsd_la> " clas*13148        if (13413149                r13149>1349_bit" class=="sref">gfs2_sbscod_/a> *gl->gl_flags13150        if (!1358code=kmem_ca">gl->gl_flagsgl->13151                r13151>135+code" id="L134" class="line" na1352"L200">13152        if (135+code=wake_upsref">gl->gl->gl->gl->gl_flagls/recoverea>);
13153                r13153>135+code=list_del_init" sref">gl->gl)
13154        return 1;13154>135   const struct gl->gl->gl->gl_flags);
13155}
gfs2_sbscod_un/a> *gl->gl_flags13156
13157
13158void 13159{
13160        gl-> *gl->gl_flags13161
gl->gl->gl->gl_flags);
13162        if (!1362code=kmem_ca">gl->13163                <13163>136+code=list_de="sref">gfs2_sbef2/gclassp/glo gl->13164        else
136   const strusref">gl->gl->gl->gl_flags13165                <13165>136+code=list_deUG_ON" c="sref">gfs2_sbef2/gclassppu
 gl->13166
13167        13168        13169        hash)
<=gl" shrink classpmemory*gfs2_sbshrinkerhref="+code=gl"shrinker="sref">gl)
13170}
gfs2_sbshrink_controf="fs/gfs2/glockshrink_controf="sref">gl)
    href="sc="sr3" id="L179" class="line" na1371"L200">13171
13172static void 137+code=wake_up" class="sref">gfs2_sbd *gl)
13173{
hash)
13174        if (!1374code=list_des"sref">hash)
13175                <13175>1375code=list_des"sref">hash)
gl->    href="sc="srclass="sref">gl_flagnr_to_scadhref="+code=gl"nr_to_scad#L144" id="L134" class="line" na1316"L200">13176                <13176>137+code=atomic_">gl->gl->gl->    href="sc="srclass="sref">gl_flaggfp_mas *13177                <13177>1377code=atomic_">gl->gl->13178        }
13713179}
gfs2_sbnr 13180
gl->13181static void 138+code" id="L134" class="line" na1382"L200">13182{
gl->gl->13183        13184        13185        gfs2_sbscod_/a> *gl-> *13186}
gfs2_sbnr gl_holist_empty*gl->13187
gl->gl->gl->gfs2_sbd *gfs2_sbef_lru*13188gl->gl->gl_flags13189gfs2_sbclearabi
*gl->gl->gl_flags);
13190    href="atomic_decNLOCa"sref">gl->131911319213193gl_hote caand_secabi
*gl->gl->gl_flags);
13194gl->gl->13195
gl-> *gl-> *13196void gl-> *gl->gl_flags13197{
gl->gl->gl->13198        if (139code=gfs2_sbddddddddddddddds=sref="sref">gfs2_sbmay_demote 13199                <13199>139+code=GLOCK_BUG_ON" cit" clasdddddddd">gl-> *gl->gfs2_sbM_SST_UNLOCKED 14e="L/a>                <14e=">1405code=list_deUG_ON" ccccccccccccccccc="sref">gfs2_sbnr 14e9114e92gfs2_sbclearabi
*gl->gl->gl_flags);
14e93gfs2_sbsmp_mb__after_clearabi
*14e94gl->gl->gl->gl_flags14e95
gfs2_sb=gl" classppu
_no/a> * NLOCa">gl->14e96void gl-> *gl->gl_flags14e97{
gl-> *gl-> *14e98        if (140code=gfs2_sbddddddddddddddds=continue2" id="L152" class="line" na14e9"L200">14e99                <14e99>140+code=GLOCK_BUG_ON" c9" id="L179" class="line" na141="L200">14210        struct 1415code=list_deUG_ON" cmove_from_lru" nr_skippeo 14211        struct 141+code=kmem_cache_free">gl->gl->gl_flagsgl->14212
gfs2_sbsecabi
*gl->gl->gl_flags);
14213        if (141+code=list_de9" id="L179" class="line" na1414"L200">14lock.c#L103" id="L103" c14loc>141   const stru">gl->gl->gl->14115
gfs2_sbatomic_ado gl->gl->14116void gl-> *gl-> *14117{
gl->14118        struct 141code=gfs2_sbdlass="ca">gl->gl->gl->14119
14120        14121        if (142+codea> =icp" class="sref">gfs2_sbshrinkerhref="+code=gl"shrinker="sre">gl->14122                <14122>142+code=wake_up.">gl->gl->14123}
gl->gl->14124
141251412614127141281412914130
14131void 14132{
14133        14134        gl->gl->gfs2_sbdsbo gl)
14135}
hash)
14136
14137gfs2_sbd *gl)
14138gfs2_sbhlist_bl_heao gl)
gl->hash)
14139gfs2_sbhlist_bl_n2_s gl)
1414014141gl-> *14142gl->gl->gfs2_sbpo
gfs2_sb/eao gfs2_sbef_list14143
gl->gl_flagsgl->gfs2_sbatomic_reao gl->gl_flags14144static int 144   const struct gl->gl->14145{
14146        const str14146>144+code=atomic_">gl-> *14147
gl->14148        if (144/span9" id="L179" class="line" na1419"L200">14149                r14149>144+code" id="L179" class="line" na145="L200">14150        if (!1458codea> =icpck_remove_from_lru" classp/ash_wal *gl->gl->gfs2_sbdsbo gl)
14151                r14151>145 clas{" id="L185" class="line" na1452"L200">14152        if (145+code=wake_upunsignere">gl)
14153                r14153>1453code" id="L179" class="line" na1454"L200">14154        return 1;14154>145   const strufor a">gl->gl)
gl)
gl)
14155}
gl->gl)
gl)
14156
14157
14158void 14159{
14160        14161
14162        if (!146This function should only bnt.c#L203" id="L203" class="line" na1463"L200">14163                <14163>146gfs2_glock_put() - Decremenck N.B. When we freeze a "line, we leave a "L2 to t="f"line outa> nding,.c#L203" id="L203" class="line" na1464"L200">14164        else
146   coThe glock to put
 so t=is has to result in t="f"L2 count being droppeofbyfone..c#L203" id="L203" class="line" na1465"L200">14165                <14165>146+codeglock_put() - Decremenckk.c#L130" id="L130" class="line" na1466"L200">14166
14167        gfs2_sbd *gl)
14168        14169        gl_hote caand_clearabi
*gl->gl->gl_flags);
14170}
14171
gl->gl->gl->gl_flags);
14172static void 1472code=kmem_ca">gl->gl->14173{
gl->gl->gl->gl_flags14174        if (!147   const struct gl->gl->14175                <14175>1475code9" id="L179" class="line" na1416"L200">14176                <14176>147+code" id="L179" class="line" na1417"L200">14177                <14177>147@gl: The glock to hold14178        }
147/span>
14179}
14180
14181static void 148 clasThe glock to put
k.c#L130" id="L130" class="line" na1482"L200">14182{
14183        gfs2_sbd *gl)
14184        14185        gfs2_sb=gl" classpremove_from/lru*gl->14186}
14187
gl-> *gl->gl_flags14188gl->gl_flags == gl->14189gfs2_sb/andle_callba> *gl->gfs2_sbM_SST_UNLOCKED 14190gl-> *gl->gl_flags14191gl->gl->14192gl->gl->gl->gl_flags14193gl->gl->1419414195
14196void 14197{
14198        if (149/span>
 NL#L203" id="L203" class="line" na1499"L200">14199                <14199>149
15e="L/a>                <15e=">1507span>
15e9115e92gfs2_sbdsbo gl)
15e9315e94gl->gl)
15e95
15e96void 15e97{
hash)
gfs2_sbseq_file*gl)
gfs2_sbd *gl)
15e98        if (150code={" id="L185" class="line" na15e9"L200">15e99                <15e99>150+code=GLOCK_Bs"sref">hash)
15210        struct 1518code=kmem_ca">gl-> *gl->gl_flags15211        struct 151+code=kmem_ca">gl->gl->gl->gl->15212
gl-> *gl->gl_flags15213        if (151+code=list_delass="cef">hash)
15lock.c#L103" id="L103" c15loc>151ode=d9" id="L179" class="line" na1515"L200">15115
15116void gfs2_sbd *gl)
15117{
15118        struct 151code=gfs2_sbdef">hash)
hash)
gl->15119
15120        15121        if (152 clasThe glock to put15122                <15122>152This function should only bnt =gl" clp/ash_clear - Empty outpt="f"line hash table="#L203" id="L203" class="line" na1513"L200">15123}
15124
1512515126151271512815129gfs2_sbdsbo gl)
15130
15131void gl->gl->gl)
15132{
gl->gl->15133        gfs2_sbwait_eventgl->gl_flagsd_efasspwai
*gl)
gl->gl_flagsd_efasspdisposaf="fs/gfs2/glocksd_efasspdisposafc#L13reef034" id="L134" class="line" na1514"L200">15134        gl->gl)
15135}
15136
15137gfs2_sbdin2_s gl)
1513815139gfs2_sbd *gl)
gl->gl_flagi_ef="fs/gfs2/glocki_ef="sr4" id="L134" class="line" na154="L200">15140hash)
1514115142gl->gl->gl->15143
gfs2_sbd>

gl->gl_flagsgl)
15144static int 154ode=d" id="L130" class="line" na1545"L200">15145{
gfs2_sbscod_/a> *gl->gl_flags15146        const str15146>154+code=atomic_">gl->gl->gl->gl_flags);
15147
gl->gl->15148        if (154code=gfs2_sbdef">hash)
 *gl->gl_flags15149                r15149>1549_bit9" id="L179" class="line" na155="L200">15150        if (!1554de=d" id="L130" class="line" na1551"L200">15151                r15151>155+codea> =icpconst=charef">gl)
 ==2" c*gl)
 == 15152        if (155+code{" id="L185" class="line" na1553"L200">15153                r15153>155+code=list_deswitcha">gl-> == 15154        return 1;15154>155   const strucased="sref">gfs2_sbM_SST_UNLOCKED 15155}
"UN".c#L1304" id="L134" class="line" na1556"L200">15156
gfs2_sbM_SST_SHARED 15157
"SH".c#L1304" id="L134" class="line" na1558"L200">15158void gfs2_sbM_SST_DEFERRED 15159{
"DF".c#L1304" id="L134" class="line" na156="L200">15160        gfs2_sbM_SST_EXCLUSIVE 15161
"EX".c#L1304" id="L134" class="line" na1562"L200">15162        if (!1562code=kmem_ca9" id="L179" class="line" na1563"L200">15163                <15163>156+code=list_delass="cehe glock to " cing">"??".c#L1304" id="L134" class="line" na1564"L200">15164        else
156ode=d9" id="L179" class="line" na1565"L200">15165                <15165>156+code" id="L134" class="line" na1566"L200">15166
gl)
gl)
gl)
);
gl->);
15167        15168        gl)
gl->15169        gl)
);
gl->15170}
gl)
't'.c#L1304" id="L134" class="line" na1571"L200">15171
gl)
);
gl->15172static void 157+code=wake_up" class=f">gl)
'T'.c#L1304" id="L134" class="line" na1573"L200">15173{
gl->);
gl->15174        if (!157   const struct gl)
'e'.c#L1304" id="L134" class="line" na1575"L200">15175                <15175>1575code=list_desref">gl->);
gl->15176                <15176>157+code=atomic_nst struf">gl)
'A'.c#L1304" id="L134" class="line" na1577"L200">15177                <15177>1577code=list_desref">gl->);
gl->15178        }
157code=gfs2_sbdddddddddf">gl)
'p'.c#L1304" id="L134" class="line" na1579"L200">15179}
gl)
);
gl->15180
gl)
'a'.c#L1304" id="L134" class="line" na1581"L200">15181static void 158+code=kmem_casref">gl)
);
gl->15182{
gl)
'E'.c#L1304" id="L134" class="line" na1583"L200">15183        gl->);
gl->15184        gl)
'c'.c#L1304" id="L134" class="line" na1585"L200">15185        gl->gl->gl->);
15186}
gl)
'H'.c#L1304" id="L134" class="line" na1587"L200">15187
gl->gl->gl->);
15188gl)
'W'.c#L1304" id="L134" class="line" na1589"L200">15189gl)
gl->gl->);
15190gl)
'F'.c#L1304" id="L134" class="line" na1591"L200">15191gl)
15192hash)
151931519415195
15196void 15197{
15198        if (159/span>
15199                <15199>159
16e="L/a>                <16e=">1607span>
16e9116e9216e93hash)
gfs2_sbseq_file*gl)
gfs2_sbd/gloer gl)
16e9416e95
gfs2_sbtask_" clas*gl)
gl->16e96void gl->);
_buf 16e97{
16e98        if (160code=gfs2_sbdsref">gl->gl_flagsh_owclr_pio 16e99                <16e99>160+code=GLOCK_BUG_ON" c="sref">gfs2_sbgh_owclrhref="+code=gl"eh_owclr="sr"ef">gl->gl->gl_flagsh_owclr_pio gl)
16210        struct 1618code=kmem_ca">gl->prs"s_dbg gl->" H: s:%s f:%s e:%d p:%ld [%s] %pS\n".c#L130," id="L201" class="line" na1611"L200">16211        struct 161+code=kmem_cache_freekmem_ca">gl-> ==2" c*gl->gl_flagsh_a> == 16212
gl->gl->);
_buf gl->gl_flagsh_a>);
gl->gl_flagsh_ia>);
16213        if (161+code=list_del_init" G_ON" c="sref">gfs2_sbgh*gl_flagsh_errorhref="+code=gl"eh_errorc#L1," id="L201" class="line" na1614"L200">16lock.c#L103" id="L103" c16loc>161   const struct gl->gl_flagsh_owclr_pio gl->gl->gl_flagsh_owclr_pio 16115
gfs2_sbgh_owclrhref="+code=gl"eh_owclr="sr"?c="sref">gfs2_sbgh_owclrhref="+code=gl"eh_owclr="srclass="sref">gl_flagput"(ended)".c#L130," id="L201" class="line" na1616"L200">16116void gl->gl_flagsh_ip(&16117{
16118        struct 161/span9" id="L179" class="line" na1619"L200">16119
16120        gl)
gl)
gfs2_sbd *gl)
16121        if (162 clas{" id="L185" class="line" na1612"L200">16122                <16122>162+code=wake_upconst=unsignerelongff">gl)
gl->gl_flags);
16123}
gl)
gl->16124
16125gl->gl->gl)
16126gl)
'l'.c#L1304" id="L134" class="line" na1617"L200">16127gl->gl->gl)
16128gl)
'D'.c#L1304" id="L134" class="line" na1619"L200">16129gl)
gl->gl)
16130
gl)
'd'.c#L1304" id="L134" class="line" na1631"L200">16131void gl)
gl->gl)
16132{
gl)
'p'.c#L1304" id="L134" class="line" na1613"L200">16133        gl->gl->gl)
16134        gl)
'y'.c#L1304" id="L134" class="line" na1615"L200">16135}
gl->gl->gl)
16136
gl)
'f'.c#L1304" id="L134" class="line" na1617"L200">16137gl->gl->gl)
16138gl)
'i'.c#L1304" id="L134" class="line" na1619"L200">16139gl)
gl->gl)
16140gl)
'r'.c#L1304" id="L134" class="line" na1641"L200">16141gl)
gl->gl)
16142gl)
'I'.c#L1304" id="L134" class="line" na1643"L200">16143
gl->gl->gl)
16144static int 164   const struct gl)
'F'.c#L1304" id="L134" class="line" na1645"L200">16145{
gl->gl->gl)
16146        const str16146>164+code=atomic_nst struf">gl)
'q'.c#L1304" id="L134" class="line" na1647"L200">16147
gl->gl->gl)
16148        if (164code=gfs2_sbdddddddddf">gl)
'L'.c#L1304" id="L134" class="line" na1649"L200">16149                r16149>1649_bit" class=sref">gl)
gl_flags16150        if (!1655code=list_deUG_ON" cf">gl)
'o'.c#L1304" id="L134" class="line" na1651"L200">16151                r16151>165+code=kmem_casref">gl)
gl->gl)
16152        if (165+code=wake_up" class=f">gl)
'b'.c#L1304" id="L134" class="line" na1653"L200">16153                r16153>165+code=list_def">gl)
16154        return 1;16154>165   const strulass="cef">hash)
16155}
16156
16157
16158void 16159{
16160        16161
16162        if (!166This function should only bnt T="ffile format is as follows:.c#L203" id="L203" class="line" na1663"L200">16163                <16163>166gfs2_glock_put() - Decremenck One      per objeas, capital letters are used to indic == objeas..c#L203" id="L203" class="line" na1664"L200">16164        else
166   coThe glock to put
 G"ef"line, I"efIn2_s, R"efrgrp, H"ef/gloer. Glines are nosrind/sped,.c#L203" id="L203" class="line" na1665"L200">16165                <16165>166+codeglock_put() - Decremenck ot="r objeass are ind/sped bypa singleb"16166
16167        16168        16169        16170}
 ==, r"efrefcount, e"eferror, p"efpid..c#L203" id="L203" class="line" na1671"L200">16171
16172static void 167This function should only bnt Rass="s: 0 on success, -ENOBUFSfwhen we run outpof 
16173{
16174        if (!167ode=d" id="L130" class="line" na1675"L200">16175                <16175>1675codea> =icp="sref">hash)
<__dump class(&gfs2_sbseq_file*gl)
gfs2_sbd *gl)
16176                <16176>167+code{" id="L185" class="line" na1677"L200">16177                <16177>1677code=list_deconst=" class="sref">gfs2_sbd _operation.*gl)
gl->gl_flags16178        }
167code=gfs2_sbdunsignerelongflongf">gl->16179}
gfs2_sbd/gloer gl)
16180
gl->);
_buf 16181static void 168+code=kmem_cas"sref">hash)
16182{
16183        gl->gl->gl->gl_flags16184        gl->gl->16185        gl)
gl->gl->gl_flags);
16186}
gl->16187
gl->prs"s_dbg gl->"G:  s:%s n:%u/%llx f:%s t:%s d:%s/%llu a:%d v:%d r:%d m:%ld\n".c#L130," id="L201" class="line" na1688"L200">16188gl-> ==2" c*gl->gl_flags == 16189gl_flagsgl_flagln_typs 16190gl->gl_flagsgl_flagln_numb"r 16191gl->);
2" c*gl->);
_buf gl->16192gl-> ==2" c*gl->gl_flags16193gl-> ==2" c*gl->gl_flags == gl->16194gl->gl->gl_flags16195
gl->gl->gl_flags16196void gl->gl->gl_flagsgl->gl_flags16197{
16198        if (169code=gfs2_sbdef">hash)
  • gl->gl->gl_flagsgl->16199 <16199>169+code=GLOCK_BUG_ON" c="sref">gfs2_sberrorhref="+code=gl"errorc#L1"ef">gl->gl->gl->17e="L/a> <17e=">1705code=list_deUG_ON" csref">gl) 17e91gl->17e9217e93gl->gl_flags == gl->gl->gl_flagso_dump17e94gfs2_sberrorhref="+code=gl"errorc#L1"ef">gl->gl_flagso_dumpgl->gl->17e95 gl->17e96void hash) 17e97{ 17e98 if (170code=" id="L179" class="line" na17e9"L200">17e99 <17e99>170+codea> =icp="sref">hash) =s_seq_show =s_seq_showNLOCa" class="sref">gfs2_sbseq_file*gl) gl) 17210 struct 1718code{" id="L185" class="line" na1711"L200">17211 struct 171+code=kmem_ca" class="sref">gfs2_sbd *gl) gl->17212 17213 if (171+code=list_de">gl->gl->"G: n:%u/%llx rtt:%lld/%lld rttb:%lld/%lld irt:%lld/%lld dcnt: %lld qcnt: %lld\n".c#L130," id="L201" class="line" na1714"L200">17lock.c#L103" id="L103" c17loc>171 const struct gl_flagsgl_flagln_typs 17115 gl->gl_flagsgl_flagln_numb"r 17116void gl->gl_flags =s gl_flaga> =s gl->17117{ gl->gl_flags =s gl_flaga> =s gl->17118 struct 171code=gfs2_sbdddddddddcau(longflong)">gl->gl_flags =s gl_flaga> =s gl->17119 gl->gl_flags =s gl_flaga> =s gl->17120 gl->gl_flags =s gl_flaga> =s gl->17121 if (172+code=kmem_cache_freekme(longflong)">gl->gl_flags =s gl_flaga> =s gl->17122 <17122>172+code=wake_up" class=kme(longflong)">gl->gl_flags =s gl_flaga> =s gl->17123} gl->gl_flags =s gl_flaga> =s gl->17124 171251712617127gl) 17128"typs".c#L130," id="L201" class="line" na1719"L200">17129"reserved".c#L130," id="L201" class="line" na173="L200">17130 "nondisk".c#L130," id="L201" class="line" na1731"L200">17131void "in2_s".c#L130," id="L201" class="line" na1732"L200">17132{ "rgrp".c#L130," id="L201" class="line" na1733"L200">17133 "meta".c#L130," id="L201" class="line" na1734"L200">17134 "iopen".c#L130," id="L201" class="line" na1715"L200">17135} "fline".c#L130," id="L201" class="line" na1716"L200">17136 "pline".c#L130," id="L201" class="line" na1717"L200">17137"quota".c#L130," id="L201" class="line" na1738"L200">17138"jos="al".c#L130," id="L201" class="line" na1739"L200">171391714017141gl) 17142gl->"srtt".c#L130," id="L201" class="line" na1743"L200">17143 gl->"srttvar".c#L130," id="L201" class="line" na1744"L200">17144static int 174 const stru[">gl->"srttb".c#L130," id="L201" class="line" na1745"L200">17145{ gl->"srttvarb".c#L130," id="L201" class="line" na1746"L200">17146 const str17146>174+code=atomic_[">gl->"sirt".c#L130," id="L201" class="line" na1747"L200">17147 gl->"sirtvar".c#L130," id="L201" class="line" na1748"L200">17148 if (174code=gfs2_sbd[">gl->"dlm".c#L130," id="L201" class="line" na1749"L200">17149 r17149>1749_bit" class=[">gl->"queus".c#L130," id="L201" class="line" na175="L200">17150 if (!1755code}4" id="L134" class="line" na1751"L200">17151 r17151>175+code" id="L134" class="line" na1752"L200">17152 if (175+code#def ">gl->gl->gl->gl->gl->17153 r17153>175+code" id="L201" class="line" na1754"L200">17154 return 1;17154>175 coa> =icp="sref">hash) sba> =s_seq_show =s_seq_showNLOCa" class="sref">gfs2_sbseq_file*gl) gl) 17155} 17156 gfs2_sbd _itlr*gl) gl->gl_flagpriv == 17157 gfs2_sbdsbo gl) gl->gl_flagsdp17158void gl) gl->gl_flaghash*17159{ gl) gl->gl_flaghash*17160 gl-> "+codes6 coa">gl-> "+codevalus#L144" id="L134" class="line" na1761"L200">17161 hash) 17162 if (!176+code" id="L179" class="line" na1763"L200">17163 <17163>176+code=list_desref">gl->gl->17164 else 176 const struct 17165 <17165>176+code" id="L134" class="line" na1766"L200">17166 gl->gl->"%-10s %8s:".c#L130,s="sref">gfs2_sbdgl->17167 gl->"cpu".c#L130:s="sref">gfs2_sbdstyps gl->17168 17169 gl->gl->17170} gfs2_sbdpcpu_lka> =s gl) =s gl->gl->gl_flagsd_lka> =s gl->17171 gl->17172static void 177+code=wake_up" class=kmem_caa">gl-> "+codevalus#L14"ef">gl->17173{ 17174 if (!177 const struct gl-> "+codevalus#L14"ef">gl-> =s gl_flaglka> =s gl->gl_flaga> =s gl->17175 <17175>177+code=list_deUG_ON" c9" id="L179" class="line" na1776"L200">17176 <17176>177+code=atomic_nst stru">gl->gl->" %15lld".c#L130,e(longflong)">gl-> "+codevalus#L1434" id="L134" class="line" na1777"L200">17177 <17177>1777code=list_de9" id="L179" class="line" na1778"L200">17178 } 177code=gfs2_sbdef">hash) gl->'\n'.c#L13034" id="L134" class="line" na1779"L200">17179} 17180 17181static void 178+code" id="L134" class="line" na1782"L200">17182{ hash) <__ini *gl->17183 17184 gl) 17185 gl->gl) gl) gl) 17186} gl->gl->gl->17187 1718817189gl->gl->"ehass_workqueus".c#L130,s="sref">gfs2_sbWQ_MEM_RECLAIM*17190gl->gl->17191gl) gl->17192hash) gl->17193gl->gl->"delete_workqueus".c#L130," id="L201" class="line" na1794"L200">17194gl->gl->17195 17196void gl) gl->17197{ gl->gl->17198 if (179code=gfs2_sbdddddddddlass="cef">hash) gl->17199 <17199>179+code=GLOCK_B9" id="L179" class="line" na18e="L200">18e="L/a> <18e=">1805code" id="L134" class="line" na18e1"L200">18e91gl->gl->18e9218e9318e9418e95 18e96void gl->18e97{ 18e98 if (180code=gfs2_sbdef">hash) gl->18e99 <18e99>1809code=kmem_ca">gl->gl->18210 struct 1818code=kmem_ca">gl->gl->18211 struct 181+code9" id="L179" class="line" na1812"L200">18212 18213 if (181+codea> =icp">gl->gfs2_sbd *gl) gl) 18lock.c#L103" id="L103" c18loc>181 co{" id="L185" class="line" na1815"L200">18115 hash) gl->gl->gl->18116void gfs2_sbd *gl->18117{ 18118 struct 181code=" id="L179" class="line" na1819"L200">18119 gl->gfs2_sbd *gl) gfs2_sbd *gl) 18120 18121 if (182+code=kmem_calass="cef">hash) gl->gl->gl_flags
  • gl_flagnexc*18122 <18122>182+code=wake_up" class=kmeuuuuuuuuuuu" class="sref">gfs2_sbd *gl->18123} 18124 18125hash) <=gl" class_itlr_nexc*gfs2_sbd _itlr*gl) 1812618127gfs2_sbd *gl) 181281812918130 gl) gl->gl_flagef="fs/gfs2/glock.c#L144" id="L134" class="line" na1831"L200">18131void gl->18132{ gl->gl_flagef="fs/gfs2/glock.c#L14"ef">gl->gl->18133 gl->gl_flagnhash*18134 18135} gl->gl_flaghash*gl->18136 gl-> *181371813818139gl->gl_flagef="fs/gfs2/glock.c#L14"ef">gl->gl->gl_flaghash*18140gl->gl_flagnhash*1814118142gl->gl_flagef="fs/gfs2/glock.c#L14"eef">gl->18143 gl->gl_flaghash*18144static int 184 const struct gl->gl_flaghash*gl->18145{ gl-> *18146 const str18146>184+code=atomic_nst struuuuuuuuuuuuuuucalass="c14" id="L134" class="line" na1847"L200">18147 18148 if (184code=gfs2_sbdddddddddcaugl->gl_flagef="fs/gfs2/glock.c#L14"ef">gl->gl->gl_flaghash*18149 r18149>184+code=GLOCK_BUG_ON" cruuuuuca">gl->gl_flagnhash*18150 if (!1855code=list_deUG_ON" c}" id="L134" class="line" na1851"L200">18151 r18151>185+code=kmem_ca"he glock to hold18152 if (1852code=kmem_ca9=whileef">gl->gl_flagsdpgl->gl_flagef="fs/gfs2/glock.c#L14class="sref">gl_flagsgl->gl->gl_flagef="fs/gfs2/glock.c#L14class="sref">gl_flags18153 r18153>185+code" id="L201" class="line" na1854"L200">18154 return 1;18154>185 const strulass="c04" id="L134" class="line" na1855"L200">18155} 18156 18157 gl) gfs2_sbseq_file*gl) gl) gl) 18158void 18159{ gfs2_sbd _itlr*gl) gl->gl_flagpriv == 18160 gl->gl_flagn*gl) 18161 18162 if (!1862code=kmem_casref">gl->gl_flag hrt_pos gl) 18163 <18163>186+code=list_del_init" ="sref">gl_flagn*gl->gl_flagnhash*gl) gl->gl_flag hrt_pos 18164 else 186 const struelse" id="L134" class="line" na1865"L200">18165 <18165>186+code=list_deUG_ON" c">gl->gl_flaghash*18166 18167 gl->gl_flagnhash*18168 hash) *18169 18170} 18171 gl->gl) 18172static void 187+code=wake_up" class=kmem_caalass="cef">hash) 18173{ gl->18174 if (!187ode=d" id="L130" class="line" na1875"L200">18175 <18175>187+code=list_de">gl->gl_flag hrt_pos gl) 18176 <18176>1876 const strulass="cef">hash) gl_flagef="fs/gfs2/glock.c#L144" id="L134" class="line" na1877"L200">18177 <18177>1877de=d9" id="L179" class="line" na1878"L200">18178 } 187code=" id="L179" class="line" na1879"L200">18179} gl) gfs2_sbseq_file*gl) gl) 18180 gl) gl) 18181static void 188+code{" id="L185" class="line" na1882"L200">18182{ gfs2_sbd _itlr*gl) gl->gl_flagpriv == 18183 18184 gl) 18185 gl->gl_flag hrt_pos gl) 18186} gl) gl) 18187 hash) 1818818189hash) gl_flagef="fs/gfs2/glock.c#L144" id="L134" class="line" na189="L200">181901819118192gl) gfs2_sbseq_file*gl) gl) 1819318194gfs2_sbd _itlr*gl) gl->gl_flagpriv == 18195 18196void gl) gl_flagef="fs/gfs2/glock.c#L143" id="L201" class="line" na1897"L200">18197{ gl-> *18198 if (189code=gfs2_sbdef">hash) gl_flagef="fs/gfs2/glock.c#L14"ef">gl->18199 <18199>189+code9" id="L179" class="line" na19e="L200">19e="L/a> <19e=">1905code" id="L134" class="line" na19e1"L200">19e91hash) <=gl" class_seq_show gfs2_sbseq_file*gl) gl) 19e9219e93gl) *gl) gl) 19e9419e95 19e96void gl) =s_seq_starc* =s_seq_starcNLOCa" class="sref">gfs2_sbseq_file*gl) gl) gl) 19e97{ 19e98 if (190code=gfs2_sbd" class="sref">gfs2_sbd _itlr*gl) gl->gl_flagpriv == 19e99 <19e99>1909code" id="L134" class="line" na191="L200">19210 struct 1918code=kmem_ca">gl->gl_flaghash*gl) 19211 struct 191+code=kmem_casreff">gl) gl->19212 hash) 19213 if (191+code=list_de">gl->19lock.c#L103" id="L103" c19loc>191 const strulass="c">gl->19115 19116void 19117{ gl) =s_seq_nexc* =s_seq_nexcNLOCa" class="sref">gfs2_sbseq_file*gl) gl) 19118 struct 191code=gfs2_sbdddddddddcaugl->gl) 19119 19120 gfs2_sbd _itlr*gl) gl->gl_flagpriv == 19121 if (192+code=kmem_ca(f">gl) 19122 <19122>192+code=wake_up">gl->gl_flaghash*19123} gl->gl_flaghash*gl->19124 gl->19125hash) 1912619127gl->191281912919130 gl) =s_seq_stop =s_seq_stopNLOCa" class="sref">gfs2_sbseq_file*gl) gl) 19131void 19132{ gl->19133 19134 19135} gfs2_sbseq_oper =ions*hash) <=gl" class_seq_ops 19136 gl_flaga> rc*gl->19137gl_flagnexc*gl->19138gl_flaga>opgl->19139gl_flagahow gl->191401914119142gfs2_sbseq_oper =ions*hash) <=gl" cla> =s_seq_ops 19143 gl_flaga> rc*gl->19144static int 194 const stru.="sref">gl_flagnexc*gl->19145{ gl_flaga>opgl->19146 const str19146>194+code=atomic_.="sref">gl_flagahow gl-> =s_seq_show =s_seq_showNLOC," id="L201" class="line" na1947"L200">19147 19148 if (194code=" id="L179" class="line" na1949"L200">19149 r19149>1949codea> =icpconst=" class="sref">gfs2_sbseq_oper =ions*hash) <=gl" sba> =s_seq_ops 19150 if (!1955code=list_de.="sref">gl_flaga> rc*gl-> =s_seq_starc* =s_seq_starcNLOC," id="L201" class="line" na1951"L200">19151 r19151>195+code=kmem_ca.="sref">gl_flagnexc*gl-> =s_seq_nexc* =s_seq_nexcNLOC," id="L201" class="line" na1952"L200">19152 if (1952code=kmem_ca.="sref">gl_flaga>opgl-> =s_seq_stop =s_seq_stopNLOC," id="L201" class="line" na1953"L200">19153 r19153>195+code=list_de.="sref">gl_flagahow gl-> =s_seq_show =s_seq_showNLOC," id="L201" class="line" na1954"L200">19154 return 1;19154>195 co}4" id="L134" class="line" na1955"L200">19155} 19156 gl->hash) gl->gl) 19157 19158void hash) <=gl" classs_open*gfs2_sbin2_s*gl) gfs2_sbfile*gl) 19159{ 19160 hash) gl->gl->gl->19161 gfs2_sbd _itlr*19162 if (!1962code=kmem_casref">gl->19163 <19163>196+code=list_del_init" " class="sref">gfs2_sbseq_file*gl) gl->gl_flagpriv ==_data 19164 else 196 const struct gfs2_sbd _itlr*gl) gl->gl_flagpriv == 19165 <19165>196+code=list_deUG_ON" c">gl->gl_flagsdpgl->gl_flagi_priv == 19166 gl->gl_flagbuocgl->gl->gl) gl->19167 gl->gl_flagbuoc19168 gl->gl_flagsize*gl->19169 19170} gl->19171 19172static void 197+code" id="L179" class="line" na1973"L200">19173{ hash) <=gl" cla> =s_open* =s_openNLOCa" class="sref">gfs2_sbin2_s*gl) gfs2_sbfile*gl) 19174 if (!197 co{" id="L185" class="line" na1975"L200">19175 <19175>197+code=list_de="sref">hash) gl->gl->gl-> =s_seq_ops 19176 <19176>197+code=atomic_nst struuuuuuuuuuuuuuuca eesizeofa" class="sref">gfs2_sbd _itlr*19177 <19177>197+code=clear_bsref">gl->19178 } 197code=gfs2_sbddddddddd" class="sref">gfs2_sbseq_file*gl) gl->gl_flagpriv ==_data 19179} gfs2_sbd _itlr*gl) gl->gl_flagpriv == 19180 gl->gl_flagsdpgl->gl_flagi_priv == 19181static void 198+code=kmem_cache_free">gl->gl_flagbuocgl->gl->gl) gl->19182{ gl->gl_flagbuoc19183 gl->gl_flagsize*gl->19184 19185 gl->19186} 19187 19188hash) <=gl" sba> =s_open* =s_openNLOCa" class="sref">gfs2_sbin2_s*gl) gfs2_sbfile*gl) 1918919190hash) gl->gl->gl-> =s_seq_ops 19191gfs2_sbd _itlr*19192gl->19193gfs2_sbseq_file*gl) gl->gl_flagpriv ==_data 19194gfs2_sbd _itlr*gl) gl->gl_flagpriv == 19195 gl->gl_flagsdpgl->gl_flagi_priv == 19196void 19197{ gl->19198 if (199code=9" id="L179" class="line" na1999"L200">19199 <19199>1999code" id="L134" class="line" na20e="L200">20e="L/a> <20e=">20e=ode=a> =icpconst=" class="sref">gfs2_sbfile_oper =ions*gfs2_sbd s_fops 20e91gl_flagownlr*gl->20e92gl_flagopen*gl->20e93gl_flagreao gl->20e94gl_flagllsee *gl->20e95 gl_flagreleas= gl->20e96void 20e97{ 20e98 if (20e8ode=a> =icpconst=" class="sref">gfs2_sbfile_oper =ions*gfs2_sbd =s_fops 20e99 <20e99>20e+code=GLOCK_B.="sref">gl_flagownlr*gl->20210 struct 2021code=kmem_ca.="sref">gl_flagopen*gl-> =s_open* =s_openNLOC," id="L201" class="line" na2011"L200">20211 struct 202+code=kmem_ca.="sref">gl_flagreao gl->20212 gl_flagllsee *gl->20213 if (202+code=list_de.="sref">gl_flagreleas= gl->20lock.c#L103" id="L103" c20loc>202 co}4" id="L134" class="line" na2025"L200">20115 20116void gfs2_sbfile_oper =ions*gfs2_sbdsba> =s_fops 20117{ gl_flagownlr*gl->20118 struct 202code=gfs2_sbd.="sref">gl_flagopen*gl-> =s_open* =s_openNLOC," id="L201" class="line" na2019"L200">20119 gl_flagreao gl->20120 gl_flagllsee *gl->20121 if (201+code=kmem_ca.="sref">gl_flagreleas= gl->20122 <20122>2012 co}4" id="L134" class="line" na2023"L200">20123} 20124 hash) <=gl" crea==_debu=gl_file*gfs2_sbegl" sbo gl) 2012520126gl) gl_flagdebu=gl_dir*gl->gl->gl_flagsd_table_s="c20127gl) gl_flagdebu=gl_dir*20128gl_flagENOMEM*20129gl) gl_flagdebu=gl_dgl->"classs".c#L130," id="L201" class="line" na203="L200">20130 gl->gl->20131void gl->gl_flagdebu=gl_dir*gl) 20132{ gl->20133 gl) gl_flagdebu=gl_d20134 gfs2_sbfaif="fs/gfs2/glockfaif#L144" id="L134" class="line" na2035"L200">20135} 20136 gl) gl_flagdebu=gl_d =s*gl->"cla> =s".c#L130," id="L201" class="line" na2037"L200">20137gl->gl->20138gl->gl_flagdebu=gl_dir*gl) 20139gl-> =s_fops 20140gl) gl_flagdebu=gl_d =s*20141gfs2_sbfaif="fs/gfs2/glockfaif#L144" id="L134" class="line" na2042"L200">2014220143 gl->gl_flagdebu=gl_d =s*gl->"sba> =s".c#L130," id="L201" class="line" na2044"L200">20144static int 201 const struct gl->gl->20145{ gl->gl_flagdebu=gl_dir*gl) 20146 const str20146>201+code=atomic_nst struuuuuuuuuuuuuuuca eeeeeeeeeeeeeeeeeeeeeee"sref">gl-> =s_fops 20147 gl) gl_flagdebu=gl_d =s*20148 if (201code=gfs2_sbdddddddddgotos="sref">gfs2_sbfaif="fs/gfs2/glockfaif#L144" id="L134" class="line" na2049"L200">20149 r20149>2019code" id="L134" class="line" na205="L200">20150 if (!2015ode=gfs2_sbdlass="c04" id="L134" class="line" na2051"L200">20151 r20151>201+code="sref">gfs2_sbfaif="fs/gfs2/glockfaif#L14:" id="L134" class="line" na2052"L200">20152 if (201+code=wake_up">gl->dele==_debu=gl_file*gl->20153 r20153>201+code=list_delass="c-="sref">gl_flagENOMEM*20154 return 1;20154>201 co9" id="L179" class="line" na2015"L200">20155} 20156 gl) gfs2_sbegl" sbo gl) 20157 20158void gl) gl_flagdebu=gl_dir*20159{ gl) gl_flagdebu=gl_d20160 gl_flagdebu=gl_remove*gl->gl_flagdebu=gl_d20161 gl) gl_flagdebu=gl_dgl->20162 if (!201+code=wake_up" class=9" id="L179" class="line" na2063"L200">20163 <20163>201+code=list_del_init" sref">gl) gl_flagdebu=gl_d =s*20164 else 201 const struct gl_flagdebu=gl_remove*gl->gl_flagdebu=gl_d =s*20165 <20165>201+code=list_deUG_ON" crrrrrrrr">gl) gl_flagdebu=gl_d =s*gl->20166 20167 gl->gl_flagdebu=gl_d =s*20168 gl->gl->gl_flagdebu=gl_d =s*20169 gl->gl_flagdebu=gl_d =s*gl->20170} 20171 gl->gl->gl_flagdebu=gl_dir*20172static void 201+code=wake_up" class=">gl) gl_flagdebu=gl_dir*gl->20173{ 20174 if (!201 co9" id="L179" class="line" na2075"L200">20175 <20175>201+code" id="L134" class="line" na2076"L200">20176 <20176>201+code="sref">hash) <=gl" registlr_debu=gl 20177 <20177>2017de=d{" id="L185" class="line" na2078"L200">20178 } 201code=gfs2_sbdef">hash) <=gl" rooc*gl->"cgl"".c#L130,f">gl->20179} gl->gl_flagENOMEM*20180 20181static void 201+code" id="L134" class="line" na2012"L200">20182{ gl) 20183 20184 hash) gl->20185 hash) <=gl" rooc*gl->20186} 20187 The original LXR software by thff">gl-http://sourceforge.net/projects/lxr">LXR community#L14,=this experimgl-mailto:lxr@hreux.no">lxr@hreux.no#L14.
    lxr.hreux.no kindly hostld by ">gl-http://www.redpill-hrepro.no">Redpill Lrepro AS#L14,=provider of Lreuxpconsulting and oper =ions services since 199+.