linux/mm/backing-dev.c
<<
>>
Prefs
   1
   2#include <linux/wait.h>
   3#include <linux/backing-dev.h>
   4#include <linux/kthread.h>
   5#include <linux/freezer.h>
   6#include <linux/fs.h>
   7#include <linux/pagemap.h>
   8#include <linux/mm.h>
   9#include <linux/sched.h>
  10#include <linux/module.h>
  11#include <linux/writeback.h>
  12#include <linux/device.h>
  13#include <trace/events/writeback.h>
  14
  15static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0);
  16
  17struct backing_dev_info default_backing_dev_info = {
  18        .name           = "default",
  19        .ra_pages       = VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE,
  20        .state          = 0,
  21        .capabilities   = BDI_CAP_MAP_COPY,
  22};
  23EXPORT_SYMBOL_GPL(default_backing_dev_info);
  24
  25struct backing_dev_info noop_backing_dev_info = {
  26        .name           = "noop",
  27        .capabilities   = BDI_CAP_NO_ACCT_AND_WRITEBACK,
  28};
  29EXPORT_SYMBOL_GPL(noop_backing_dev_info);
  30
  31static struct class *bdi_class;
  32
  33/*
  34 * bdi_lock protects updates to bdi_list and bdi_pending_list, as well as
  35 * reader side protection for bdi_pending_list. bdi_list has RCU reader side
  36 * locking.
  37 */
  38DEFINE_SPINLOCK(bdi_lock);
  39LIST_HEAD(bdi_list);
  40LIST_HEAD(bdi_pending_list);
  41
  42static struct task_struct *sync_supers_tsk;
  43static struct timer_list sync_supers_timer;
  44
  45static int bdi_sync_supers(void *);
  46static void sync_supers_timer_fn(unsigned long);
  47
  48void bdi_lock_two(struct bdi_writeback *wb1, struct bdi_writeback *wb2)
  49{
  50        if (wb1 < wb2) {
  51                spin_lock(&wb1->list_lock);
  52                spin_lock_nested(&wb2->list_lock, 1);
  53        } else {
  54                spin_lock(&wb2->list_lock);
  55                spin_lock_nested(&wb1->list_lock, 1);
  56        }
  57}
  58
  59#ifdef CONFIG_DEBUG_FS
  60#include <linux/debugfs.h>
  61#include <linux/seq_file.h>
  62
  63static struct dentry *bdi_debug_root;
  64
  65static void bdi_debug_init(void)
  66{
  67        bdi_debug_root = debugfs_create_dir("bdi", NULL);
  68}
  69
  70static int bdi_debug_stats_show(struct seq_file *m, void *v)
  71{
  72        struct backing_dev_info *bdi = m->private;
  73        struct bdi_writeback *wb = &bdi->wb;
  74        unsigned long background_thresh;
  75        unsigned long dirty_thresh;
  76        unsigned long bdi_thresh;
  77        unsigned long nr_dirty, nr_io, nr_more_io;
  78        struct inode *inode;
  79
  80        nr_dirty = nr_io = nr_more_io = 0;
  81        spin_lock(&wb->list_lock);
  82        list_for_each_entry(inode, &nr  sb name="L43">  43  sb names="sref">m, void *private;
  80    ++;wb;
  82        list_for_each_entry(inode, &nr_dirty,   43  sb names="sref">m, void *backg8ound_thresh;
nr_di++;8irty_thresh;
  82        list_for_each_entry(inode, &  43  sb names="sref">m, void *bdi_thresh;
nr_io = ++;linux//pagemap.h>
  81spin_lock(&wb->inode;
  79
 namit"L45">  45stglobal80 namit"        74        unsigned long   75        unsigned long nr9more_io = 0;
  76        unsigned long rty =  namit  70static int < namit=list_for_each_entry="+code=wb" class="sref">irty,   75        unsigned long private;
w(code=DEFINE_SPINxine" name="L38"xref">w61" >    code=DEFINE_SPIN* 102SHIFss="sref">bdi_se* 102SHIFsong r- 10)ref">m, void *wb;
m, void *backg9ound_thresh;
m, void *9irty_thresh;
m, void *bdi_thresh;
m, void *linux9/pagemap.h>
m, void *llinux/mm.h>
m, void *linux//sched.h>
m, void *linux/0module.h>
m, void *m, void *linux/0device.h>
m, void *debugfs_creaef">m, void *  14
debugfs_creaef">m, void *LIST_H:v.c#L54" id%10u\n>debugfs_creaef">m, void *  16
  2:v.c#L54" id=.c%10lx\n>debugfs_crea     = &q0_backing_0dev_info = {
, irty, &q0uot;defau0lt",
, irty, &qref">linuxx/sched.h>
,   76        unsigned long )     = &qrf">linux/mmodule.h>
,   75        unsigned long &qrlinux/wriiteback.h>
,   74        unsigned long &qrf">linux//device.h>
irty, &qrvents/wriiteback.h>
, irty, &qrline" namme="L14">  14
, wb = &&qr>ATOMIC_LLONG_INIT(0);
  77        unsigned lo    = &qrline" namme="L16">  16
nr_di    = &qr_backing__dev_info = {
nr_io = i    = &qruot;defauult",
(&  77      ref="emp7"      wb = &LIST_HEAD, wb = &  20PAG1E_CACHE_SIZE,
linux//a>          = 0,
BDI_1CAP_MAP_COPY,
  22};
  24
static vs="l  78        struct iriteback *bdi_debug_stats_(struct bdi_debug_stats_(strref">m, void *"n1oop",
static va66"leoope f="+code=DEFINE_SPINf">bdi_debug_stats_(strirty,   70static int iwb = &,
  28};
);
boopera5"> "L45">  45stf">boopera5"> "ckingty,   45staticine" name="Lfop"ong rtyg-dev.c#L66" id="L66" class="1"line" na1me="L30">  30
static vope f="+L55" id=.c#ty = &qlass="sre1f">bdi_class;
static vide f="+L55" id=.c#ty = static vshowide     i    = &qlf">linux/ddevice.h>
 = &qllt_backi1omment">/*
 = &qlline" na1as well as
 1* locking.
timer_li="line" naregT_Hs=     L78" id="L78" class="line" name="L72">  72        struct backing_,cconsticharde=backing_dev_inass="line" name="L26">  26m, void * */
bdi_lock);
wb = &bdi_debug_root ="+code=d"+code=bdi_debug_root" class="sref">bdi_debug_root =   26,   67        bdi_list);
wb = &bdi_debug_stats_oot" class="sref">bde=debugfs_create_dir" class="sr">  s>debugfs_create0444irty, wb = &bdi_debug_root ="+code=di    = &qef">bdi_p1ending_list);
backing_,c   45staticine" name="Lfop"ong =ATOMIC_LONG_INIT" class="sref"lass="sre1me="L41">  41
syn1c_supers_tsk;
timer_li="line" naunregT_Hs=     L78" id="L78" class="line" name="L72">  72        struct backing_ref">m, void *  44
wb = & 1>(unsigned long);
wb = &bdi_debug_root ="+code=d=ATOMIC_LONG_INIT" class="sref"llass="co1me="L47">  47
wb2)
  49{
{=inode" class="9  65static void wb2) {
list_lock);
l1ist_lock, 1);
{=inode" class="9timer_li="line" naregT_Hs=     L78" id="L78" class="line" name="L72">  72        struct backing_,-dev.c#L68" id="L68" class="1=vents/wri>        } else {
  26m, void *list_lock);
l1ist_lock, 1);
 1  56        }
{=inode" class="9timer_li="line" naunregT_Hs=     L78" id="L78" class="line" name="L72">  72        struct backing_ref">m, void *  57}
  58
CO1NFIG_DEBUG_FS
>
linux/s1eq_file.h>
  15ssize" ckingty,   62
;
,   15size" ckingty,   15coun ing_ref">m, void *  64
bdi_deb1ug_init(void)
  72        struct backing_dev_info *mment"> 1e="L66">  66{
ine" nam1"sref">NULL);
line" na1e="L68">  68}
  15ssize" ckingty,   15id ing_dev-ty,   INVAnckinATOMIC_LONG_INIT" class="sref""line" na1me="L69">  69
v)
 =   15simplec sttoulf="+code=DEFINE_SPINaufdi_debug_stats_buf 26linux/s1e="L71">  71{
(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[1] =.wb1 < private;
wb = &  19      ty = 
 code=DEFINE_SPIN* 102SHIFss="sref">bdi_se* 102SHIFsong r- 10)ATOMIC_LONG_INIT" class="sref""vents/wriss="sref">wb;
,   15id ing_devty,   15coun ing_ATOMIC_LONG_INIT" class="sref""line" na1round_thresh;
1dirty_thresh;
  15id ing_ATOMIC_LONG_INIT" class="sref""line" namee="L16">  16
nr_more_io;
inode;
      >w(code=DEFINE_SPIN="line" name="L19">      >w61" >    code=DEFINE_SPIN* 102SHIFss="sref">bdi_se* 102SHIFsong r- 10)ref">m, void *  79
nr1_more_io = 0;
bdi_seef="SHOWde=debbacking_dev_inass="line" name="L26">  26, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\g-dev.c#L30" id="L30" class=1">linux/s1">list_lock);
  15ssize" ckingty,   26<##ode=b L78" id="L78" class="ld;private;
e" name="L19">     >www\g-dev.c#L30" id="L30" class=1"vents/wri8s="sref">wb;
;
  72        struct backing_dev_info *18irty_thresh;
bdi_thresh;
e" name="L19">     irty,  * 102 href="+-1,#Lugfs_create_dir" class="sr%lld\n>debugfs_crea  (L77" er_fnty, ;ww\g-dev.c#L30" id="L30" class=1"_backing_ddev_info = {
inode;
  79
bdi_seef="SHOWde=debbacking_dev_inide _aax_l_kb+code=m" class=ide _aax_l_kbckinirty, wb = &  19     )ref">m, void *nr19more_io = 0;
list_lock);
  15ssize" ckingty, "f=or"+code=m" class=min_ra5">"f=or"     L78" id="L78" class="ld;private;
,   15size" ckingty,   15coun ing_ref">m, void *wb;
backg19ound_thresh;
  72        struct backing_dev_info * < 19irty_thresh;
e" name="L19">  1t, linux19/pagemap.h>
  15ssize" ckingty,   15id ing_dev-ty,   INVAnckinATOMIC_LONG_INIT" class="sref"9="fref">1llinux/mm.h>
linu2//sched.h>
e" name="L19">  1t, #ty =   15simplec sttoulf="+code=DEFINE_SPINaufdi_debug_stats_buf 26linux20module.h>
(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[1] =.wb1 < ,   15id ing_devty,  class="sref">back  et_min_ra5">f="+code=DEFINE_SPINaticode=wb" class="sref">irty, e" name="L19">  1t, )ATOMIC_LONG_INIT" class="sref203inux/wr20ef">private;
(&  15id ing_ref">m, void *,   15id ing_devty,   15coun ing_ATOMIC_LONG_INIT" class="sref20line" na20e="L14">  14

     > = &  15id ing_ATOMIC_LONG_INIT" class="sref20line" na20e="L16">  16
bdi_seef="SHOWde=debbacking_dev_inmin_ra5"> class="sref">bmin_ra5">f="+irty, wb = & class="sref">bmin_ra5">f="+ref">m, void *linu2x/sched.h>
  15ssize" ckingty, "f=or"+code=m" class=max_ra5">"f=or"     L78" id="L78" class="ld;linux2mmodule.h>
,   15size" ckingty,   15coun ing_ref">m, void * < linux2/device.h>
  72        struct backing_dev_info * < (bdi_debug_root(ckinATOMIC_LONG_INIT" class="sref2rline" na2me="L14">  14
e" name="L19">  1t, ATOMIC_2LONG_INIT(0);
  15ssize" ckingty,   15id ing_dev-ty,   INVAnckinATOMIC_LONG_INIT" class="sref2rline" na2me="L16">  16
 = {
e" name="L19">  1t, #ty =   15simplec sttoulf="+code=DEFINE_SPINaufdi_debug_stats_buf 26(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[0] =.(bdi_debug_root(ckin[1] =.wb1 < PAG2E_CACHE_SIZE,
,   15id ing_devty,  class="sref">back  et_max_ra5">f="+code=DEFINE_SPINaticode=wb" class="sref">irty, e" name="L19">  1t, )ATOMIC_LONG_INIT" class="sref2sf">linux2/a>          = 0,
(&  15id ing_ref">m, void *BDI_2CAP_MAP_COPY,
,   15id ing_devty,   15coun ing_ATOMIC_LONG_INIT" class="sref2ine" name2="L22">  22};

     > = &  15id ing_ATOMIC_LONG_INIT" class="sref2"line" na2me="L24">  24
bdi_seef="SHOWde=debbacking_dev_inmax_ra5"> class="sref">bmax_ra5">f="+irty, wb = & class="sref">bmax_ra5">f="+ref">m, void *,
,
bdi_se__ATTR_RWde=debbacking_dev_inatir+code=m" class=atiring_nrty, bdi_se__ATTRde=debbacking_dev_inatir+code=m" class=atiring_, 0644irty, , m, void *  28};
);
,   45staticin  30
bdi_se__ATTR_RWde=debbacking_dev_inide _aax_l_kb+code=m" class=ide _aax_l_kbckint     = &2lass="sre2f">bdi_class;
bdi_se__ATTR_RWde=debbacking_dev_inmin_ra5"> class="sref">bmin_ra5">f="+r     = &2lne" name2ddevice.h>
bdi_se__ATTR_RWde=debbacking_dev_inmax_ra5"> class="sref">bmax_ra5">f="+r     = &2lvents/wr2omment">/*
&quo__ATTR_clasing_,-dev.c#L68" id="L68" class="2lline" na2as well as
 2* locking.
  65st_   ame="L65">  65static5">  ame="de=de+code=bdi_debug_init" class="sref2class="co2mment"> */
bdi_lock);
  L65">  65static5">  ing_devty,   acs="srname="L15">  15c">  acs="srde=debbacking_dev_inTHIS_MODULX_READAHEAD THIS_MODULXf="+irtugfs_create_dir" class="sr">L>debugfs_crea)ATOMIC_LONG_INIT" class="sref2lass="sre2f">bdi_list);
bdi_seIS_ERRf="+code=DEFINE_SPINatic5">  L65">  65static5">  ing_)ref">m, void *bdi_p2ending_list);

     > = &bdi_sePTR_ERRf="+code=DEFINE_SPINatic5">  L65">  65static5">  ing_)ATOMIC_LONG_INIT" class="sref2lass="sre2me="L41">  41
syn2c_supers_tsk;
  L65">  65static5">  ing_wb = &  45stin =   45staticin  65static void   44
(void *);
 2>(unsigned long);
  15postc_io  ame="L65">  65static5">  ame="de=d)ATOMIC_LONG_INIT" class="sref2llass="co2me="L47">  47
wb2)
  65st_  = &  65stnefault_aticme="de=de+code=bdi_debug_init" class="sref2line" nam2e="L49">  49{
wb2) {
list_lock);
l2ist_lock, 1);
back  ync_supersf="+irty, &quoclasing_,#Lugfs_create_dir" class="sr"ync_supers>debugfs_crea)ATOMIC_LONG_INIT" class="sref2=vents/wr2>        } else {
   = bdi_seIS_ERRf="+code=DEFINE_SPINsync_supers_tsde=wb" class="srsync_supers_tsdckin))ATOMIC_LONG_INIT" class="sref2=line" na2">list_lock);
timer_lil
  p_tims=f="+c timer_lilync_supers_tims= 26, static vaync_supers_tims=_f ing_, 0)ATOMIC_LONG_INIT" class="sref2=mment"> 2  56        }
timer_liack arm_supers_tims=ref=")ATOMIC_LONG_INIT" class="sref2line" nam2e="L57">  57}
  58
 =   65staticme="de=detry(  72       mefault_ane" name="L72">de=d)ATOMIC_LONG_INIT" class="sref2"sref">CO2NFIG_DEBUG_FS
(&>
 = timer_li="liregT_Hs=     try(  72       mefault_ane" name="L72">de=dirty, &quoclasing_,#Lugfs_create_dir" class="srmefault>debugfs_crea)ATOMIC_LONG_INIT" class="sref2">linux/s2eq_file.h>
 =   65staticme="de=detry(  72       noop_ane" name="L72">de=d)ATOMIC_LONG_INIT" class="sref2""sref">l2me="L62">  62
;
  64
bdi_deb2ug_init(void)
  15subsys  65stnefault_aticme="de=d)ATOMIC_LONG_INIT" class="sref2"mment"> 2e="L66">  66{
ine" nam2"sref">NULL);
  72        struct backing_ref">m, void *  68}
  69
wb = &v)
linux/s2e="L71">  71{
private;
/*fs_creaef">m, void *wb;
 * kupdated() used to do this. We cannot do it from the s="lforks=_ref=_l()fs_creaef">m, void *;
 * or we risk d=_llo *  would befs_creaef">m, void *bdi_deb2dirty_thresh;
 * to implement aync_supers_s="() or similar and simply do it from thefs_creaef">m, void * 2ee="L16">  16
 * s=" ftrueid * ref=_l individually.fs_creaef">m, void *nr_more_io;
 */fs_creaef">m, void *inode;
back  ync_supersf="+e+codde=backing_dev_inunused class="sref">bunuseding_ref">m, void *  79
nr2_more_io = 0;
  15curren ing_, 0)ATOMIC_LONG_INIT" class="sref2">linux/s2">list_lock);
private;
(&static vkref=_l_shouldod=opref=")>wb1 < wb;
, ;
, bdi_debug_stats_ chedu>bref=")ATOMIC_LONG_INIT" class="sref2"="sref">28irty_thresh;
bdi_thresh;
/*fs_creaef">m, void * = {
                 * Do this periodically, like kupdated() did before.fs_creaef">m, void *inode;
                 */fs_creaef">m, void *  79
, b ync_supersf="+e)ATOMIC_LONG_INIT" class="sref29sref">nr29more_io = 0;
list_lock);
private;
wb;
;
29irty_thresh;
timer_liack arm_supers_tims=ref="+code=bdi_debug_init" class="sref29ss="sref29>bdi_thresh;
linux29/pagemap.h>
  15nex ckinATOMIC_LONG_INIT" class="sref29="fref">2llinux/mm.h>
linu3//sched.h>
(&  15nsignnftrueid *_#L4ervaling_ref">m, void *linux30module.h>

    ATOMIC_LONG_INIT" class="sref30linux/wr30teback.h>
private;
  15nex ckin#ty =  msecs_to_jiffiinf="+code=DEFINE_SPINnsignnftrueid *_#L4ervalname="L15">  15nsignnftrueid *_#L4ervaling_ * 10) +y =  jiffiinf="+ATOMIC_LONG_INIT" class="sref304inux/wr30s="sref">wb;
timer_limod_tims=f="+c timer_lilync_supers_tims= 26, static vround_jiffiin_upf="+code=DEFINE_SPINnex name="L15">  15nex ckin))ATOMIC_LONG_INIT" class="sref30line" na30e="L14">  14
  16
static vaync_supers_tims=_f ing_(L77" id="L77" class="line" naunused class="sref">bunuseding_ref">m, void *,   65stwake_up_proce  f="+code=DEFINE_SPINsync_supers_tsde=wb" class="srsync_supers_tsdckin)ATOMIC_LONG_INIT" class="sref3ref">linu3x/sched.h>
timer_liack arm_supers_tims=ref=")ATOMIC_LONG_INIT" class="sref3rf">linux3mmodule.h>
linux3/device.h>
static vwake p_tims=_f ing_(L77" id="L77" class="line" nadata+code=m" class=dataf="+ref">m, void * <   14
  72        struct backing_devcL78" id="L78" class="line" name="L72">  72        struct   16
wb = &wb = &,
backing_rATOMIC_LONG_INIT" class="sref3sref">PAG3E_CACHE_SIZE,
,   65stwake_up_proce  f="+code=DEFINE_SPINaticode=wb" class="sref">wb = &linux3/a>          = 0,
wb = & < BDI_3CAP_MAP_COPY,
/*fs_creaef">m, void *  22};
g-dev.c#L52" id= * When s=" tasds ari#Lnactive for"L77" tims, they ari#killed.fs_creaef">m, void * -dev.c#L52" id= * In this ca i#we have to wake-up the forks= ref=_l whichfs_creaef">m, void *  24
 -dev.c#L52" id= * should cs="sr and run the s=" ref=_l.fs_creaef">m, void * -dev.c#L52" id= */fs_creaef">m, void *,
backing_rATOMIC_LONG_INIT" class="sref3s_backing3ND_WRITEBACK,
,   65stwake_up_proce  f="+code=DEFINE_SPINmefault_ane" name="L72">  72       mefault_ane" name="L72">de=dL21" id="L21" clfb+code=m" class=wbde=dL21" id="L21" cltasde=wb" class="srtasdckin)ATOMIC_LONG_INIT" class="sref3suot;defa3="L28">  28};
wb = &  30
bdi_class;
>
/*fs_creaef">m, void */*
 * This func5">  is used when the first#Ln hr for"this s=" is marksd nsign. Itfs_creaef">m, void *
 * wakes-up the correspondm, void * * periodic id *ground ftrue-out#of nsign#Ln hrs. Since the ftrue-out#wouldfs_creaef">m, void *
 * starts only l#39;nsignnftrueid *_#L4ervall#39; centisecs from now anyway,#we justfs_creaef">m, void * */
 * set up a timsr which wakes the s=" ref=_l up l"srr.fs_creaef">m, void *bdi_lock);
 *fs_creaef">m, void *bdi_list);
 * Note,#we wouldnl#39;t bother sett  is on thefs_creaef">m, void *bdi_p3ending_list);
 * fast-path (used by l#39;__mark_Ln hrunsign()l#39;), so#we save few#context switchinf=_creaef">m, void *  41
 * sy delaym, void *syn3c_supers_tsk;
g*/fs_creaef">m, void *b="liwake p_tef=_l_delayedde=deL78" id="L78" class="line" name="L72">  72        struct backing_ref">m, void *  44
 3>(unsigned long);
  47
 =  msecs_to_jiffiinf="+code=DEFINE_SPINnsignnftrueid *_#L4ervalname="L15">  15nsignnftrueid *_#L4ervaling_ * 10)ATOMIC_LONG_INIT" class="sref3lne" name3s="sref">wb2)
timer_limod_tims=f="+c wb = &static vwake p_tims= 26,  jiffiinf="+ +y =   49{
wb2) {
list_lock);
/*fs_creaef">m, void *l3ist_lock, 1);
g* Calcul"sr the er_fest#Ln4erval (jiffiin) s=" ref=_ls ari#allowed to befs_creaef">m, void * * Lnactive.fs_creaef">m, void *list_lock);
 */fs_creaef">m, void *b="lier_fest_Lnactiveref="+code=bdi_debug_init" class="sref3=mment"> 3  56        }
  57}
  15#L4ervaling_ATOMIC_LONG_INIT" class="sref3lne" name3me="L58">  58
CO3NFIG_DEBUG_FS
  15#L4ervaling_#ty =  msecs_to_jiffiinf="+code=DEFINE_SPINnsignnftrueid *_#L4ervalname="L15">  15nsignnftrueid *_#L4ervaling_ * 10)ATOMIC_LONG_INIT" class="sref3"" class=3debugfs.h>
 maxf="+c5UL * 60 * > = & HZ 26,   15#L4ervaling_)ATOMIC_LONG_INIT" class="sref3"ss="sref3eq_file.h>
l3me="L62">  62
;
/*fs_creaef">m, void *  64
 * Clear pend  orfs_creaef">m, void *(void)
 * shutdownfs_creaef">m, void * 3e="L66">  66{
 */fs_creaef">m, void *NULL);
b="li5"ear_pend  72        struct backing_ref">m, void *  68}
  69
  65st5"ear_b="f="+code=DEFINE_SPINef="pendbef="pendwb = &v)
  65st mp_mb__af4er_5"ear_b="ref=")ATOMIC_LONG_INIT" class="sref3">linux/s3e="L71">  71{
  65stwake_up_b="f="+c wb = &bef="pendl3ref">private;
wb;
;
bdi_deb3dirty_thresh;
 3ee="L16">  16
b="liwtrueid *"+code=backing_dev_inm"line" name="L20meing_#ty = nr_more_io;
inode;
  15curren ing_wb = & flagncking|ty =  PF_SWAPWRITXckinATOMIC_LONG_INIT" class="sref3"line" na3me="L79">  79
bdi_debug_stats_ et_freezab>bref=")ATOMIC_LONG_INIT" class="sref3"sref">nr3_more_io = 0;
linux/s3">list_lock);
/*fs_creaef">m, void *private;
g-dev.c#L* Our paren  may run at a differen  priotruy, just set us to normalin_creaef">m, void *wb;
 -dev.c#L*/fs_creaef">m, void *;
  15curren ing_, 0)ATOMIC_LONG_INIT" class="sref3"="sref">38irty_thresh;
bdi_thresh;
 <  = {
&quoclasing_ATOMIC_LONG_INIT" class="sref3"line" na38sref">inode;
  72        struct backing_ATOMIC_LONG_INIT" class="sref39line" na39e="L79">  79
 < nr39more_io = 0;
   = /* Nothm, void *list_lock);
,    = /* Fork s=" ref=_l */fs_creaef">m, void *private;
,    = /* Kill#Lnactive s=" ref=_l */fs_creaef">m, void *wb;
,  s   =  ckin#ty =    = ;
39irty_thresh;
/*fs_creaef">m, void *bdi_thresh;
                 * Temporary measure,#we wan  to make sure#we donl#39;t seefs_creaef">m, void *linux39/pagemap.h>
                 * nsign#data on the mefault  struct m, void *>
                 */fs_creaef">m, void *linu4//sched.h>
wb = &linux40module.h>
, static vdel_tims=f="+c , bwbldoiwtrueid *de=de=backing_dev_inm"line" name="L20meing_, 0)ATOMIC_LONG_INIT" class="sref403inux/wr40ef">private;
wb;
  14
, ;
/*fs_creaef">m, void *  16
                 * In the followm, void *>
                 * some work to do without#any aynchroniz"s">  with tasdsfs_creaef">m, void *>
                 * wakm, void *linu4x/sched.h>
                 * so that#we donl#39;t miss wake ps af4er verify s.fs_creaef">m, void *linux4mmodule.h>
                 */fs_creaef">m, void *linux4/device.h>
(&irtry(  14
(&  15boolckingk(&  16
(&b="li5apnftrueid *_nsignde=debbacking_dev_inaticode=wb" class="sref">) ||g-dev.c#L16" id="L16" class=4r8ine" na4_dev_info = {
(&b="li5apnflushcforks=de=debbacking_dev_inaticode=wb" class="sref">)e=bdi_debug_init" class="sref4ruot;defa4ult",
PAG4E_CACHE_SIZE,
linux4/a>          = 0,
(&   = (&  65sttest_b="f="+code=DEFINE_SPINef="regT_Hs=ed class="sref">bef="regT_Hs=ed 26wb = &BDI_4CAP_MAP_COPY,
L l#37;p/l#37;s is not regT_Hs=ed!\n>debugfs_creairty, irty, wb = &  22};
(&wb = &  24
(&wb = &,
/*fs_creaef">m, void *                         * If the s=" has work to do, but#the ref=_l does notfs_creaef">m, void *  28};
                         * exist - cs="sr it.fs_creaef">m, void *                         */fs_creaef">m, void *  30
(&wb = &bdi_class;
/*fs_creaef">m, void *>
g-dev.c#L52" id=.c#" id=" id=id= * Set the pendm, void */*
 -dev.c#L52" id=.c#" id=" id=id= * unregT_Hs="this s=" -=Ltl#39;ll#wait on this sit.fs_creaef">m, void *
 -dev.c#L52" id=.c#" id=" id=id= */fs_creaef">m, void *ATOMIC_4eader side
  65st et_b="f="+code=DEFINE_SPINef="pendbef="pendwb = &
 s   =  ckin#ty =    =  */
bdi_lock);
bdi_list);
bdi_p4ending_list);
wb = &  41
syn4c_supers_tsk;
/*fs_creaef">m, void * -dev.c#L52" id=.c#" id="* If theri#Ls no work to do and the s=" ref=_l wasfs_creaef">m, void *  44
 -dev.c#L52" id=.c#" id="* Lnactive"L77" enough -=kill#L . The wbllo *#Ls takenfs_creaef">m, void * -dev.c#L52" id= c#" id="* to make sure#no-one adds more work to this s=" andfs_creaef">m, void *(unsigned long);
                 c#" id="* wakes the s=" ref=_l up.fs_creaef">m, void *  47
                         */fs_creaef">m, void *wb2)
wb = &m, void *  49{
 jiffiinf="+irty, wb = &bde=t_activecking+ef">m, void *bdi_p4"sref">wb2) {
b="lier_fest_Lnactiveref="))=wb1 < list_lock);
wb = &m, void *syn4ist_lock, 1);
wb = &&quoclasing_ATOMIC_LONG_INIT" class="sref4=vents/wr4>        } else {
wb = &list_lock);
  65st et_b="f="+code=DEFINE_SPINef="pendbef="pendwb = & s   =  ckin#ty =    =         }
  57}
  58
wb = &CO4NFIG_DEBUG_FS
>
l4me="L62">  62
/* Keep workm, void *;
(&wb = &m, void *  64
(&(void)
 4e="L66">  66{
 s   =  ckin=wb1 < NULL);
 =    =  <   68}
  69
wb = &v)
wb = &  71{
l4ref">private;
/*fs_creaef">m, void *wb;
 -dev.c#L52" id=.c#" id=" id=id= * If thf=_l cs="s">  fails, force ftrueout#offs_creaef">m, void *;
 -dev.c#L52" id=.c#" id=" id=id= * the s=" from the ref=_l. Hopefully 1024 isfs_creaef">m, void *bdi_deb4dirty_thresh;
 -dev.c#L52" id= c#" id=" id=id= * large enough for"efficien  IO.fs_creaef">m, void * 4ee="L16">  16
                 c#" id=" id=id= */fs_creaef">m, void *nr_more_io;
 = &(wb = &inode;
 = &   =   79
 < nr4_more_io = 0;
/*fs_creaef">m, void *linux/s4">list_lock);
                                 * The spinlo *#makes sure#we do not losefs_creaef">m, void *private;
g-dev.c#L                        * fake-ups when racm, void *wb;
 -dev.c#L                        * And as so>  as the s=" ref=_l is visible,#wefs_creaef">m, void *;
 -dev.c#L52" id=.c#" id=" id=id= * cfs_start it.fs_creaef">m, void *48irty_thresh;
 -dev.c#L52" id= c#" id=" id=id= */fs_creaef">m, void *bdi_thresh;
wb = & = {
wb = &m, void *inode;
wb = &  79
  65stwake_up_proce  f="+code=DEFINE_SPINtasde=wb" class="srtasdckin)ATOMIC_LONG_INIT" class="sref49sref">nr49more_io = 0;
list_lock);
, b="li5"ear_pend()ATOMIC_LONG_INIT" class="sref49class="s49ef">private;
wb;
;
 =    =  < 49irty_thresh;
, bdi_thresh;
 = , b="li5"ear_pend()ATOMIC_LONG_INIT" class="sref49line" na4llinux/mm.h>
linu5//sched.h>
linux50module.h>
 =    =  < (&  15nsignnftrueid *_#L4ervaling_=ef">m, void *private;
/*fs_creaef">m, void *wb;
 -dev.c#L                        * Theri#are#no nsign#data. The only thm, void *  14
 -dev.c#L52" id=.c#" id=" id=id= * should now cari#about#is checkia  forfs_creaef">m, void *;
 -dev.c#L52" id= c#" id=" id=id= * Lnactive s=" ref=_ls and killia  them. Thus,fs_creaef">m, void *bdi_thresh;
                 c#" id=" id=id= * letl#39;s sleep for"L77"s="tims, save energy andfs_creaef">m, void *>
                 c#" id=" id=id= * be friendly for"bat4ery-driven refice .fs_creaef">m, void *>
                 c#" id=" id=id= */fs_creaef">m, void *linu5x/sched.h>
b="lier_fest_Lnactiveref="))ATOMIC_LONG_INIT" class="sref5rf">linux5mmodule.h>
 msecs_to_jiffiinf="+code=DEFINE_SPINnsignnftrueid *_#L4ervalname="L15">  15nsignnftrueid *_#L4ervaling_ * 10))ATOMIC_LONG_INIT" class="sref5r3inux/wr5/device.h>
, btry_to_freezeref=")ATOMIC_LONG_INIT" class="sref5r4inux/wr5iteback.h>
  14
  16
 = {
,
PAG5E_CACHE_SIZE,
linux5/a>          = 0,
/*fs_creaef">m, void *BDI_5CAP_MAP_COPY,
 * Remove s=" from ati_list, and ensure#that#it#Ls no L77"s="visiblefs_creaef">m, void *  22};
g*/fs_creaef">m, void *  72        struct backing_ref">m, void *  24
,
wb = &,
  28};
);
  30
bdi_class;
>
  72        struct backing_,#L78" id="L78" class="lreficebdi_debug_root  15/*
  15fm ing_,#...ref">m, void *
ATOMIC_5eader side
 argnckinhef">m, void *
m, void * */
bdi_lock);
wb = &/* The driver needs to use sem, void *bdi_list);

     0ATOMIC_LONG_INIT" class="sref5ef">bdi_p5ending_list);
  41
 argnckinirty,   15fm ing_)ATOMIC_LONG_INIT" class="sref5sref">syn5c_supers_tsk;
 /ab="li5"asnckinirty,   15,   15MKDEVde=de0, 0)irty, irty,   15fm ing_,#ode=DEFINE_SPINargne" name="L19"> argnckin)ATOMIC_LONG_INIT" class="sref5svents/wr5tteback.h>
 argnckin)ATOMIC_LONG_INIT" class="sref5sline" na5me="L44">  44

     > = &(unsigned long);
  47
wb = & = m, void *wb2)
  49{
/*fs_creaef">m, void *bdi_p5"sref">wb2) {
         * Just start the forks= ref=_l for"our mefault  struct m, void *list_lock);
         * and add other "srl#39;s to the list. They will#get a thf=_l cs="sedfs_creaef">m, void *syn5ist_lock, 1);
g-dev.c#L* onhremand when they need it.fs_creaef">m, void * -dev.c#L*/fs_creaef">m, void *list_lock);
b="li5apnflushcforks=de=debbacking_dev_inaticode=wb" class="sref">)e#b1 < b="liwtrueid *"+code=backing_dev_infb+code=m" class=wbde=drtytry(wb = &m, void *        }
  57}
 = & = &L-l#37;s>debugfs_creaig-dev.c#L47" id="L47" class=5lne" name5me="L58">  58
CO5NFIG_DEBUG_FS
 = &>

     > = & = &l5me="L62">  62
;
irty,   64
  65st et_b="f="+code=DEFINE_SPINef="regT_Hs=ed class="sref">bef="regT_Hs=ed 26wb = &(void)
 5e="L66">  66{
NULL);
wb = &  68}
  69
v)
)ATOMIC_LONG_INIT" class="sref5"ss="sref5e="L71">  71{
l5ref">private;
wb;
&quoEXPORT_SYMBOsde=debbacking_dev_inatinregT_Hs=io" class="srefati_regT_Hs=ref=)ATOMIC_LONG_INIT" class="sref5"line" na5round_thresh;
bdi_deb5dirty_thresh;
  72        struct backing_,#ty,  5ee="L16">  16
 < nr_more_io;
backing_,#ty, &quoclasing_, kugfs_create_dir" class="srl#37;u:l#37;u>debugfs_creairty, , inode;
  79
&quoEXPORT_SYMBOsde=debbacking_dev_inatinregT_Hs=_danr5_more_io = 0;
linux/s5">list_lock);
/*fs_creaef">m, void *private;
g* Remove s=" from the global list and shutdown#any ref=_ls we have runnm, void *wb;
 */fs_creaef">m, void *;
b="liwb_shutdownref="L78" id="L78" class="line" name="L72">  72        struct backing_=TOMIC_LONG_INIT" class="sref5"="sref">58irty_thresh;
bdi_thresh;
m, void * = {
inode;
(&b="li5apnftrueid *_nsignde=debbacking_dev_inaticode=wb" class="sref">)=TOMIC_LONG_INIT" class="sref59line" na59e="L79">  79

    hef">m, void *nr59more_io = 0;
list_lock);
/*fs_creaef">m, void *private;
g-dev.c#L* Make sure#nobody finls us on the ati_list#anymorefs_creaef">m, void *wb;
 -dev.c#L*/fs_creaef">m, void *;
)ATOMIC_LONG_INIT" class="sref59="sref">59irty_thresh;
bdi_thresh;
/*fs_creaef">m, void *         * If s
  p#Ls pendm, void *>
         */fs_creaef">m, void *linu6//sched.h>
  65stwait_on_b="de=detry(wb = &bef="pendm, void *linu6/more_io = 0;
)ATOMIC_LONG_INIT" class="sref60linux/wr60teback.h>
private;
/*fs_creaef">m, void *wb;
 -dev.c#L* Finally,=kill#the kernel ref=_l. We donl#39;t need to be RCUfs_creaef">m, void * -dev.c#L* safe#anymore, since the s=" Ls gone from visibility.fs_creaef">m, void *;
 -dev.c#L*/fs_creaef">m, void *bdi_thresh;
(&wb = &>
wb = &m, void *>
wb = &&quoclasing_ATOMIC_LONG_INIT" class="sref6ref">linu6x/sched.h>
wb = &linux6mmodule.h>
>
>
  14
/*fs_creaef">m, void *  16
 * This s=" Ls goia  away now, make sure#that#no super_blo *s po#L45to itfs_creaef">m, void * = {
 */fs_creaef">m, void *,
  72        struct backing_=TOMIC_LONG_INIT" class="sref6sref">PAG6E_CACHE_SIZE,
linux6/a>          = 0,
m, void *BDI_6CAP_MAP_COPY,
  22};
(  24
 = &ba_fo"ckinrtty = =TOMIC_LONG_INIT" class="sref6s>ATOMIC_6_dev_info = {
,  = &ba_fo"ckinrtrtry(  72       mefault_ine" name="L72">de=dhef">m, void *,
,
  28};
  30
  72        struct backing_=TOMIC_LONG_INIT" class="sref6lass="sre6f">bdi_class;
>
 = wb = &m, void */*

 < ATOMIC_6eader side
io" class="srefati_set_min_r"s">ref="=backing_dev_info" class="sref">backing_,#0)ATOMIC_LONG_INIT" class="sref6hline" na6* locking.
)ATOMIC_LONG_INIT" class="sref6h8ine" na6mment"> */
 = &)ATOMIC_LONG_INIT" class="sref6h9ine" na6f">bdi_lock);
 = &(wb = &  65stwakeup_timsref">)ATOMIC_LONG_INIT" class="sref6lass="sre6f">bdi_list);
bdi_p6ending_list);
(&b="li5apnflushcforks=de=debbacking_dev_inaticode=wb" class="sref">)eTOMIC_LONG_INIT" class="sref6eass="sre6me="L41">  41
 = &b="liwb_shutdownref="bbacking_dev_inaticode=wb" class="sref">)ATOMIC_LONG_INIT" class="sref6sref">syn6c_supers_tsk;
)ATOMIC_LONG_INIT" class="sref6svents/wr6tteback.h>
  44
(&wb = & = wb = & = &quoclasing_ATOMIC_LONG_INIT" class="sref6sline" na6>(unsigned long);
wb = &  47
wb2)
 = &  49{
bdi_p6"sref">wb2) {
list_lock);
&quoEXPORT_SYMBOsde=debbacking_dev_inatinunregT_Hs=io" class="srefati_unregT_Hs=ref==ATOMIC_LONG_INIT" class="sref6lref">syn6ist_lock, 1);
b="liwtrueid *"+code=backing_dev_infb+code=m" class=wbde=d,#L78" id="L78" class="line" name="L72">  72        struct backing_=TOMIC_LONG_INIT" class="sref6=line" na6">list_lock);
bmemsetde=debbacking_dev_infb+code=m" class=wbde=d,#0, sizeof(e=backing_dev_infb+code=m" class=wbde=d=)ATOMIC_LONG_INIT" class="sref6=line" na6  56        }
  57}
 = &backing_rty = ATOMIC_LONG_INIT" class="sref6=ne" name6me="L58">  58
 = & jiffiinf="+ATOMIC_LONG_INIT" class="sref6"sref">CO6NFIG_DEBUG_FS
   = ( = &b=_nsignde=d)ATOMIC_LONG_INIT" class="sref6"" class=6debugfs.h>
 = &io" class="srefanr_de=d)ATOMIC_LONG_INIT" class="sref6"ss="sref6eq_file.h>
 = &io" class="srefanmore_">de=d)ATOMIC_LONG_INIT" class="sref6"ref">syn6me="L62">  62
 = &;
  65sts
  p_timsrde=detry( = &  65stwakeup_timsref">,#ode=DEFINE_SPINfakeup_timsr_fn class="sref">bfakeup_timsr_fnef">,#(unsigned L77")bbacking_dev_inaticode=wb" class="sref">)ATOMIC_LONG_INIT" class="sref6"line" na6me="L64">  64
(void)
 6e="L66">  66{
/*fs_creaef">m, void *NULL);
 * Initial wtrue bandwidth: 100 MB/sfs_creaef">m, void *  68}
 */fs_creaef">m, void *  69
)eTOMIC_LONG_INIT" class="sref6ode=v" cl6ass="sref">v)
  71{
  72        struct backing_=TOMIC_LONG_INIT" class="sref6""sref">l6ref">private;
wb;
bking_,#ty,   65sterrf="+ATOMIC_LONG_INIT" class="sref6"line" na6round_thresh;
bdi_deb6dirty_thresh;
wb = & = &quoclasing_ATOMIC_LONG_INIT" class="sref6"mment"> 6ee="L16">  16
nr_more_io;
wb = &io" class="srefmin_r"s">ref=rty0ATOMIC_LONG_INIT" class="sref6one" name6"sref">inode;
wb = &io" class="srefmax_r"s">ref=rty100ATOMIC_LONG_INIT" class="sref6"line" na6me="L79">  79
wb = & = nr6_more_io = 0;
wb = &linux/s6">list_lock);
wb = &l68ef">private;
wb = &wb;
;
(wb = &, )ATOMIC_LONG_INIT" class="sref6">bdi_deb68irty_thresh;
bdi_thresh;
bking_rty0A5" id="L45" clas" class="sref">bking_ <y = &quocR_ef="STAT_ITEMSing_A5" id="L45" clas" class="sref">bking_++=#b1 <  = {
 = &  65sterrf="+rty = wb = &[" id="L45" clas" class="sref">bking_],#0)ATOMIC_LONG_INIT" class="sref6"line" na68sref">inode;
  65sterrf="+=TOMIC_LONG_INIT" class="sref69line" na69e="L79">  79
,   65sterrf="+ATOMIC_LONG_INIT" class="sref69sref">nr69more_io = 0;
list_lock);
private;
wb = &b/signnexceededref=rty0ATOMIC_LONG_INIT" class="sref69vents/wr69s="sref">wb;
;
wb = & jiffiinf="+ATOMIC_LONG_INIT" class="sref69="sref">69irty_thresh;
wb = &bdi_thresh;
>
wb = & =    = >
wb = & =    = linu7//sched.h>
wb = &linu7/more_io = 0;
 = &wb = &linu7/>list_lock);
private;
 = &  65sterrf="+rty = wb = & completionnef">)ATOMIC_LONG_INIT" class="sref704inux/wr70s="sref">wb;
  65sterrf="+=#b1 < ;
  65sterrf="+:1 < bdi_thresh;
bking_--=TOMIC_LONG_INIT" class="sref708ine" na70/pagemap.h>
 = &bpercpu_couL4erldestronde=detry(wb = &[" id="L45" clas" class="sref">bking_])ATOMIC_LONG_INIT" class="sref709ine" na70linux/mm.h>
linu7x/sched.h>
linux7mmodule.h>

     " id="L45" claserrL65">  65sterrf="+ATOMIC_LONG_INIT" class="sref7rlinux/wr7iteback.h>
&quoEXPORT_SYMBOsde=debbacking_dev_inatininitio" class="srefati_initref=)ATOMIC_LONG_INIT" class="sref7r4inux/wr7iteback.h>
  14
baticdestronref="L78" id="L78" class="line" name="L72">  72        struct backing_=TOMIC_LONG_INIT" class="sref7r>ATOMIC_7LONG_INIT(0);
  16
bking_ATOMIC_LONG_INIT" class="sref7r8ine" na7_dev_info = {
,
/*fs_creaef">m, void *PAG7E_CACHE_SIZE,
 -dev.c#L* Spla hgour entriin to the mefault_ine" name="L72">,#L50thisfs_creaef">m, void *linux7/a>          = 0,
         * s=" disappearsfs_creaef">m, void *         */fs_creaef">m, void *  22};
io" class="srefati_has_nsign_">de=debbacking_dev_inati class="sref">backing_==#b1 < b="liwtrueid *"+code=backing_dev_indstio" class="srefdsting_rtytry(  72       mefault_ine" name="L72">de=dL21" id="L21" clwb+code=m" class=wbde=dhef">m, void *  24
 = &io" class="srefati_lo *ltw>ref="try(wb = &, ,
(wb = &b=_nsignde=dirtry(b=_nsignde=d)ATOMIC_LONG_INIT" class="sref7r8ine" na7ND_WRITEBACK,
 = &(wb = &io" class="srefanr_de=dirtry(io" class="srefanr_de=d)ATOMIC_LONG_INIT" class="sref7i9ine" na7="L28">  28};
 = &(wb = &io" class="srefanmore_">de=dirtry(io" class="srefanmore_">de=d)ATOMIC_LONG_INIT" class="sref7oop_backi7ng_dev_info);
 = &wb = &  30
 = &bdi_class;
>
/*
backing_=ATOMIC_LONG_INIT" class="sref7"line" na7as well as
ATOMIC_7eader side
/*fs_creaef">m, void *
         * If ati_unregT_Hs=() had alf=_ly bees_called earlier, thefs_creaef">m, void * */
         * fakeup_timsr could#L7ill#be armed because ati_prune_sb()fs_creaef">m, void *bdi_lock);
         *_can race with the ati_fakeup_thf=_l_delayed() calls fromfs_creaef">m, void *bdi_list);
 -dev.c#L* __mar*linv_i_nsign().fs_creaef">m, void *bdi_p7ending_list);
         */fs_creaef">m, void *  41
wb = &  65stwakeup_timsref">)ATOMIC_LONG_INIT" class="sref7sref">syn7c_supers_tsk;
bking_rty0A5" id="L45" clas" class="sref">bking_ <y = &quocR_ef="STAT_ITEMSing_A5" id="L45" clas" class="sref">bking_++=-dev.c#L68" id="L68" class="7sline" na7me="L44">  44
(&bpercpu_couL4erldestronde=detry(wb = &[" id="L45" clas" class="sref">bking_])ATOMIC_LONG_INIT" class="sref7s>ATOMIC_7pers(void *);
(unsigned long);
wb = & completionnef">)ATOMIC_LONG_INIT" class="sref7llass="co7me="L47">  47
wb2)
&quoEXPORT_SYMBOsde=debbacking_dev_inatindestron class="sref">baticdestronref=)ATOMIC_LONG_INIT" class="sref7line" nam7e="L49">  49{
bdi_p7"sref">wb2) {
/*fs_creaef">m, void *list_lock);
 * For"use from filesy_Hsmn to quickly init and regT_Hs= a s=" eatociatedre_creaef">m, void *syn7ist_lock, 1);
g* with nsign wtrueid *"+_creaef">m, void * */fs_creaef">m, void *list_lock);
  72        struct backing_, charde=backing_dev_in
b
m, void *        }
  57}
  58
  65sterrf="+ATOMIC_LONG_INIT" class="sref7"sref">CO7NFIG_DEBUG_FS
>
wb = &b
 = b
 = &wb = & capabilitiining_rty = syn7me="L62">  62
  65sterrf="+rty = backing_=ATOMIC_LONG_INIT" class="sref7"vents/wr7i_debug_root;
  65sterrf="+=TOMIC_LONG_INIT" class="sref7"line" na7me="L64">  64

     " id="L45" claserrL65">  65sterrf="+ATOMIC_LONG_INIT" class="sref7"_sync_su7ug_init(void)
 7e="L66">  66{
b
NULL);
  65sterrf="+rty = backing_irty, &quoclasing_irty, 
    e=wb" class="sratomic_L77"_inc_>
    de=detry(  68}
  65sterrf="+=#b1 <   69
 = &baticdestronref="bbacking_dev_inati class="sref">backing_=ATOMIC_LONG_INIT" class="sref7ode=v" cl7ass="sref">v)

     " id="L45" claserrL65">  65sterrf="+ATOMIC_LONG_INIT" class="sref7"ss="sref7e="L71">  71{
l7ref">private;
wb;
;
bdi_deb7dirty_thresh;
&quoEXPORT_SYMBOsde=debbacking_dev_inatins
  p_andcregT_Hs=io" class="srefati_s
  p_andcregT_Hs=ref==ATOMIC_LONG_INIT" class="sref7omment"> 7ee="L16">  16
nr_more_io;
  65stwait_queue_h=_l_"cking> = &inode;
 = &m, void *  79
 = &nr7_more_io = 0;
linux/s7">list_lock);
  65statomic_"cking> = &bnr_aticcongestedref=[2]ATOMIC_LONG_INIT" class="sref7""sref">l78ef">private;
wb;
bclear_aticcongestedref="L78" id="L78" class="line" name="L72">  72        struct backing_, #L45" id="L45" classyncbdi_debug_root;
bdi_deb78irty_thresh;
 = &  65stb="de=dATOMIC_LONG_INIT" class="sref7"mment"> 78>bdi_thresh;
  65stwait_queue_h=_l_"ckinge=backing_dev_inwqhe=wb" class="srwqhref=rtytry( = {
inode;
  65stb="de=drty =  = bef="syncccongestedde=d :y = bef="asyncccongestedde=dATOMIC_LONG_INIT" class="sref79line" na79e="L79">  79
  65sttest_andcclear_a="de=debbacking_dev_ina="L65">  65stb="de=dirtry(wb = &nr79more_io = 0;
 = &(bnr_aticcongestedref=[" id="L45" classyncbdi_debug_rootlist_lock);
  65stsmp_mb__af4erlclear_a="de=de=ATOMIC_LONG_INIT" class="sref79"sref">l79ef">private;
wb;
;
79irty_thresh;
&quoEXPORT_SYMBOsde=debbacking_dev_inclear_aticcongested class="sref">bclear_aticcongestedref=)ATOMIC_LONG_INIT" class="sref79mment"> 79>bdi_thresh;
>
bset_aticcongestedref="L78" id="L78" class="line" name="L72">  72        struct backing_, #L45" id="L45" classyncbdi_debug_root>
linu8//sched.h>
 = &  65stb="de=dATOMIC_LONG_INIT" class="sref801f">linu8/more_io = 0;
linu8/>list_lock);
 = &  65stb="de=drty =  = bef="syncccongestedde=d :y = bef="asyncccongestedde=dATOMIC_LONG_INIT" class="sref803inux/wr80ef">private;
(&  65sttest_andcset_a="de=debbacking_dev_ina="L65">  65stb="de=dirtry(wb = &wb;
(bnr_aticcongestedref=[" id="L45" classyncbdi_debug_root;
&quoEXPORT_SYMBOsde=debbacking_dev_inset_aticcongested class="sref">bset_aticcongestedref==ATOMIC_LONG_INIT" class="sref807ine" na80>bdi_thresh;
>
/**fs_creaef">m, void *>
 * congestion_wait - wait for"a  struct m, void *linu8x/sched.h>
 * @sync: SYNC or"ASYNC IOre_creaef">m, void *linu8mmodule.h>
 * @timsout: timsout #L jiffiinf=_creaef">m, void *linu8iteback.h>
 *f=_creaef">m, void *g* Waits for"up to @timsout jiffiin for"a  struct m, void * * wtrue congestion.  If no  struct m, void *  14
 * next wtrue to be completed.fs_creaef">m, void * */fs_creaef">m, void *  16
 = &  65stcongestion_wa="de=de#L45" id="L45" classyncbdi_debug_root = &  65sttimsoutde=d=TOMIC_LONG_INIT" class="sref8r8ine" na8_dev_info = {
,
 = &bre"de=dATOMIC_LONG_INIT" class="sref8sref">PAG8E_CACHE_SIZE,
  65ststar"de=drty =  jiffiinf="+ATOMIC_LONG_INIT" class="sref8sf">linux8/a>          = 0,
 DEFINE_WAITde=debbacking_dev_inwa="L65">  65stwa="de=d=ATOMIC_LONG_INIT" class="sref8slinux/wr8CAP_MAP_COPY,
  65stwait_queue_h=_l_"ckinge=backing_dev_inwqhe=wb" class="srwqhref=rtytry(  22};
  65stprepare_to_wa="de=debbacking_dev_inwqhe=wb" class="srwqhref=irtry(  65stwa="de=d, ky,   65stTASK_UNINTERRUPTIBLEde=d=ATOMIC_LONG_INIT" class="sref8sline" na8me="L24">  24
bre"de=drty =   65stio_schedule_timsoutde=debbacking_dev_intimsoutL65">  65sttimsoutde=d=ATOMIC_LONG_INIT" class="sref8s>ATOMIC_8_dev_info = {
  65stfinish_wa="de=debbacking_dev_inwqhe=wb" class="srwqhref=irtry(  65stwa="de=d=ATOMIC_LONG_INIT" class="sref8s7ine" na8oop",
,
  65sttraceiwtrueid *_congestion_wa="de=debbacking_dev_injiffiin_to_usecne" name="L19"> jiffiin_to_usecnde=debbacking_dev_intimsoutL65">  65sttimsoutde=d=,ef">m, void *  28};
 jiffiin_to_usecnde=debbacking_dev_injiffiine" name="L19"> jiffiinf="+ - > = &  65ststar"de=d==ATOMIC_LONG_INIT" class="sref8oop_backi8ng_dev_info);
  30
bre"de=dATOMIC_LONG_INIT" class="sref8"linux/wr8f">bdi_class;
>
&quoEXPORT_SYMBOsde=debbacking_dev_incongestion_wa="L65">  65stcongestion_wa="de=d=ATOMIC_LONG_INIT" class="sref8ovents/wr8omment">/*

/**fs_creaef">m, void *ATOMIC_8eader side
 * wait_iffccongested - Conditionally wait for"a  struct m, void *
 * @zone: A zone to check#L50it is h=_vily congestedre_creaef">m, void * */
 * @sync: SYNC or"ASYNC IOre_creaef">m, void *bdi_lock);
 * @timsout: timsout #L jiffiinf=_creaef">m, void *bdi_list);
 *fs_creaef">m, void *bdi_p8ending_list);
 * In the event of"a congested  struct m, void *  41
 * @zone has experienced#>
cent congestion,0this waits for"up to @timsoutfs_creaef">m, void *;
g* jiffiin for"either"a BDI to ex=" congestion of"the given @sync queuefs_creaef">m, void * * or"a wtrue to complete.fs_creaef">m, void *  44
 *fs_creaef">m, void * * In the absence of"zone congestion,0condcresched() is called to yieldre_creaef">m, void *(unsigned long);
 * the processor"L50necessary  ut otherwise doin not sleep.fs_creaef">m, void *  47
 *fs_creaef">m, void *wb2)
 * The >
     value is 0#L50the sleep is for"the full timsout. Otherwise,fs_creaef">m, void *  49{
 * it is the number"of"jiffiin that were#L7ill#remaining wheL the functionfs_creaef">m, void *bdi_p8"sref">wb2) {
 * >
    ed. >
    _value == timsout #mpliin the function did not sleep.fs_creaef">m, void *list_lock);
 */fs_creaef">m, void *syn8ist_lock, 1);
  65stwait_iffccongestedref="L78" id="L78" class="lzoneL65">  65stzoneckinge=backing_dev_inzoneL65">  65stzoneckin, #L45" id="L45" classyncbdi_debug_root = &  65sttimsoutde=d=TOMIC_LONG_INIT" class="sref8avents/wr8>        } else {
list_lock);
 = &bre"de=dATOMIC_LONG_INIT" class="sref8=>ATOMIC_8ist_lock, 1);
  65ststar"de=drty =  jiffiinf="+ATOMIC_LONG_INIT" class="sref8=line" na8  56        }
 DEFINE_WAITde=debbacking_dev_inwa="L65">  65stwa="de=d=ATOMIC_LONG_INIT" class="sref8line" nam8e="L57">  57}
  65stwait_queue_h=_l_"ckinge=backing_dev_inwqhe=wb" class="srwqhref=rtytry(  58
CO8NFIG_DEBUG_FS
/*fs_creaef">m, void *>
         * I50there is no congestion,0or"h=_vy congestion in not bem, void *         * encouL4ered #L the current zone, yield"L50necessary insteadre_creaef">m, void *syn8me="L62">  62
g        * of"sleeping oL the congestion queuefs_creaef">m, void *;
         */fs_creaef">m, void *  64
(bnr_aticcongestedref=[" id="L45" classyncbdi_debug_rootm, void *ATOMIC_8ug_init(void)
(&bzone_is_renitimccongestedde=debbacking_dev_inzoneL65">  65stzoneckin==#b1 <  8e="L66">  66{
NULL);
  68}
ugfs_create_comment">/* In case we#Lcheduled, work out tims#remaining */fs_creaef">m, void *  69
 = &bre"de=drty =   65sttimsoutde=d -0"bbacking_dev_injiffiine" name="L19"> jiffiinf="+ - > = &  65ststar"de=d=ATOMIC_LONG_INIT" class="sref8ode=v" cl8ass="sref">v)
bre"de=dr<y0=TOMIC_LONG_INIT" class="sref8"ss="sref8e="L71">  71{
 = &bre"de=drty0ATOMIC_LONG_INIT" class="sref8""sref">l8ref">private;
wb;
  65stoutde=dATOMIC_LONG_INIT" class="sref8"line" na8round_thresh;
bdi_deb8dirty_thresh;
 8ee="L16">  16
/* Sleep uL4il uncongested or"a wtrue happens */fs_creaef">m, void *nr_more_io;
  65stprepare_to_wa="de=debbacking_dev_inwqhe=wb" class="srwqhref=irtry(  65stwa="de=d, ky,   65stTASK_UNINTERRUPTIBLEde=d=ATOMIC_LONG_INIT" class="sref8"ne" name8"sref">inode;
bre"de=drty =   65stio_schedule_timsoutde=debbacking_dev_intimsoutL65">  65sttimsoutde=d=ATOMIC_LONG_INIT" class="sref8"line" na8me="L79">  79
  65stfinish_wa="de=debbacking_dev_inwqhe=wb" class="srwqhref=irtry(  65stwa="de=d=ATOMIC_LONG_INIT" class="sref8"sref">nr8_more_io = 0;
linux/s8">list_lock);
  65stoutde=d:1 < l88ef">private;
  65sttraceiwtrueid *_wait_iffccongestedde=debbacking_dev_injiffiin_to_usecne" name="L19"> jiffiin_to_usecnde=debbacking_dev_intimsoutL65">  65sttimsoutde=d=,ef">m, void *wb;
 = & jiffiin_to_usecnde=debbacking_dev_injiffiine" name="L19"> jiffiinf="+ - > = &  65ststar"de=d==ATOMIC_LONG_INIT" class="sref8"line" na88ound_thresh;
bdi_deb88irty_thresh;
bre"de=dATOMIC_LONG_INIT" class="sref8"mment"> 88>bdi_thresh;
 = {
&quoEXPORT_SYMBOsde=debbacking_dev_inwait_iffccongestedL65">  65stwait_iffccongestedref==ATOMIC_LONG_INIT" class="sref8"ne" name88sref">inode;
inodfooHs=i>
The original LXR software by the OMIC_LONGhttp://sourceforge.net/projects/lx=i>LXR communignde=dirthis experimental version by OMIC_LONG_ailto:lx=@elx=@e
inodsubfooHs=i>
lx=.eRedpill L