linux/mm/truncate.c
<<
ptio /spatio /formio a ptio href="../linux+v39 8/mm/truncate.c">ptio img src="../.static/gfx/right.png" alt=">>">pt /spatiopt spat class="lxr_search">ptioptio input typaluhidden" namalunavtarget" on valu">ptio input typalutext" namalusearch" idlusearch">ptio buttptitypalusubmit">Searchptio Prefso /a>pt /spatioio /divioio form ac/opt="ajax+*" method="post" onsubmit="return false;">pt input typaluhidden" namaluajax_lookup" idluajax_lookup" on valu">pio /formiopio div class="headingbottpm">o div idlufile_contents"i
   1
/a>
spat class="comment">/*
/spatio   2
/a>
spat class="comment"> * mm/truncate.c - code for taking down pages from address_spaces
/spatio   3
/a>
spat class="comment"> *
/spatio   4
/a>
spat class="comment"> * Copyright (C) 2002, Linus Toron ds
/spatio   5
/a>
spat class="comment"> *
/spatio   6
/a>
spat class="comment"> * 10Sep2002    Andrew Mortpt
/spatio   7
/a>
spat class="comment"> *              Initial versopt.
/spatio   8
/a>
spat class="comment"> */
/spatio   9
/a>p  18.1a>#include <linux/kernel.h.1a>>p  11.1a>#include <linux/backing-dev.h.1a>>p  12.1a>#include <linux/gfp.h.1a>>p  13.1a>#include <linux/mm.h.1a>>p  14.1a>#include <linux/swap.h.1a>>p  15.1a>#include <linux/export.h.1a>>p  16.1a>#include <linux/pagemap.h.1a>>p  17.1a>#include <linux/highmem.h.1a>>p  18.1a>#include <linux/pagevec.h.1a>>p  19.1a>#include <linux/task_io_accounting_ops.h.1a>>p  28.1a>#include <linux/buffer_head.h.1a>>  
spat class="comment">/* grr. try_to_release_page,
/spatio  21
/a>
spat class="comment">                                   do_inon idatepage */
/spatio  22.1a>#include <linux/cleancache.h.1a>>p  23.1a>#include "internal.h.1a>"p  24
/a>p  25
/a>p  26
/a>
spat class="comment">/**
/spatio  27
/a>
spat class="comment"> * do_inon idatepage - inon idate part or all of a page
/spatio  28
/a>
spat class="comment"> * @page: the page which is affected
/spatio  29
/a>
spat class="comment"> * @offset: the index of the truncatoptipoint
/spatio  30
/a>
spat class="comment"> *
/spatio  31
/a>
spat class="comment"> * do_inon idatepage() is called when all or part of the page has become
/spatio  32
/a>
spat class="comment"> * inon idated by a truncate operatopt.
/spatio  33
/a>
spat class="comment"> *
/spatio  34
/a>
spat class="comment"> * do_inon idatepage() does not have to release all buffers, but it must
/spatio  35
/a>
spat class="comment"> * ensure that no dirty buffer is left outside @offset and that no I/O
/spatio  36
/a>
spat class="comment"> * is underway against any of the blocks which are outside the truncatopt
/spatio  37
/a>
spat class="comment"> * point.  Because the caller is about to free (and possibly reuse) those
/spatio  38
/a>
spat class="comment"> * blocks on-disk.
/spatio  39
/a>
spat class="comment"> */
/spatio  40
/a>void 
a href="+code=do_inon idatepage" class="sref">do_inon idatepage
/a>(struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>, unsigned long 
a href="+code=offset" class="sref">offset
/a>)o  41
/a>{o  42
/a>        void (*
a href="+code=inon idatepage" class="sref">inon idatepage
/a>)(struct 
a href="+code=page" class="sref">page
/a> *, unsigned long);p  43
/a>        
a href="+code=inon idatepage" class="sref">inon idatepage
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=a_ops" class="sref">a_ops
/a>->
a href="+code=inon idatepage" class="sref">inon idatepage
/a>;p  44.1a>#ifdef 
a href="+code=CONFIG_BLOCK" class="sref">CONFIG_BLOCK
/a>p  45
/a>        if (!
a href="+code=inon idatepage" class="sref">inon idatepage
/a>)p  46
/a>                
a href="+code=inon idatepage" class="sref">inon idatepage
/a> = 
a href="+code=block_inon idatepage" class="sref">block_inon idatepage
/a>;p  47.1a>#endifp  48
/a>        if (
a href="+code=inon idatepage" class="sref">inon idatepage
/a>)p  49
/a>                (*
a href="+code=inon idatepage" class="sref">inon idatepage
/a>)(
a href="+code=page" class="sref">page
/a>, 
a href="+code=offset" class="sref">offset
/a>);p  50
/a>}p  51
/a>p  52
/a>static 
a href="+code=inline" class="sref">inline
/a> void 
a href="+code=truncate_partial_page" class="sref">truncate_partial_page
/a>(struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>, unsigned 
a href="+code=partial" class="sref">partial
/a>)p  53
/a>{o  54
/a>        
a href="+code=zero_user_segment" class="sref">zero_user_segment
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=partial" class="sref">partial
/a>, 
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a>);p  55
/a>        
a href="+code=cleancache_inon idate_page" class="sref">cleancache_inon idate_page
/a>(
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p  56
/a>        if (
a href="+code=page_has_private" class="sref">page_has_private
/a>(
a href="+code=page" class="sref">page
/a>))p  57
/a>                
a href="+code=do_inon idatepage" class="sref">do_inon idatepage
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=partial" class="sref">partial
/a>);p  58
/a>}p  59
/a>p  60
/a>
spat class="comment">/*
/spatio  61
/a>
spat class="comment"> * This cancels just the dirty bit ptithe kernel page itself, it
/spatio  62
/a>
spat class="comment"> * does NOT ac/ually remove dirty bits on any mmap's that may be
/spatio  63
/a>
spat class="comment"> * around. It also leaves the page tagged dirty, so any sync
/spatio  64
/a>
spat class="comment"> * ac/ovity will still find it ptithe dirty lists, and in particular,
/spatio  65
/a>
spat class="comment"> * clear_page_dirty_for_io() will still look at the dirty bits in
/spatio  66
/a>
spat class="comment"> * the VM.
/spatio  67
/a>
spat class="comment"> *
/spatio  68
/a>
spat class="comment"> * Doing this should *normally* ptly ever be done when a page
/spatio  69
/a>
spat class="comment"> * is truncated, and is not ac/ually mapped anywhere at all. However,
/spatio  70
/a>
spat class="comment"> * fs/buffer.c does this when it notices that somebody has cleaned
/spatio  71
/a>
spat class="comment"> * out all the buffers on a page without ac/ually doing it through
/spatio  72
/a>
spat class="comment"> * the VM. Cat you say "ext3 is horribly ugly"? Tought you could.
/spatio  73
/a>
spat class="comment"> */
/spatio  74
/a>void 
a href="+code=cancel_dirty_page" class="sref">cancel_dirty_page
/a>(struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>, unsigned int 
a href="+code=account_size" class="sref">account_size
/a>)p  75
/a>{o  76
/a>        if (
a href="+code=TestClearPageDirty" class="sref">TestClearPageDirty
/a>(
a href="+code=page" class="sref">page
/a>)) {o  77
/a>                struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a>;p  78
/a>                if (
a href="+code=mapping" class="sref">mapping
/a> && 
a href="+code=mapping_cap_account_dirty" class="sref">mapping_cap_account_dirty
/a>(
a href="+code=mapping" class="sref">mapping
/a>)) {o  79
/a>                        
a href="+code=dec_zone_page_state" class="sref">dec_zone_page_state
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=NR_FILE_DIRTY" class="sref">NR_FILE_DIRTY
/a>);p  80
/a>                        
a href="+code=dec_bdi_stat" class="sref">dec_bdi_stat
/a>(
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=backing_dev_info" class="sref">backing_dev_info
/a>,p  81
/a>                                        
a href="+code=BDI_RECLAIMABLE" class="sref">BDI_RECLAIMABLE
/a>);p  82
/a>                        if (
a href="+code=account_size" class="sref">account_size
/a>)p  83
/a>                                
a href="+code=task_io_account_cancelled_write" class="sref">task_io_account_cancelled_write
/a>(
a href="+code=account_size" class="sref">account_size
/a>);p  84
/a>                }p  85
/a>        }p  86
/a>}p  87
/a>
a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL
/a>(
a href="+code=cancel_dirty_page" class="sref">cancel_dirty_page
/a>);p  88
/a>p  89
/a>
spat class="comment">/*
/spatio  90
/a>
spat class="comment"> * If truncate cannot remove the fs-private metadata from the page, the page
/spatio  91
/a>
spat class="comment"> * becomes orphaned.  It will be left otithe LRU and may even be mapped into
/spatio  92
/a>
spat class="comment"> * user pagetables if we're racing with filemap_fault().
/spatio  93
/a>
spat class="comment"> *
/spatio  94
/a>
spat class="comment"> * We need to bale out if page->mapping is no longer equal to the original
/spatio  95
/a>
spat class="comment"> * mapping.  This happens a) when the VM reclaimed the page while we waited pt
/spatio  96
/a>
spat class="comment"> * its lock, b) when a concurrent inon idate_mapping_pages got there first and
/spatio  97
/a>
spat class="comment"> * c) when tmpfs swizzles a page between a tmpfs inode and swapper_space.
/spatio  98
/a>
spat class="comment"> */
/spatio  99
/a>static intp 100
/a>
a href="+code=truncate_complete_page" class="sref">truncate_complete_page
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 101
/a>{o 102
/a>        if (
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a> != 
a href="+code=mapping" class="sref">mapping
/a>)o 103
/a>                return -
a href="+code=EIO" class="sref">EIO
/a>;p 104
/a>p 105
/a>        if (
a href="+code=page_has_private" class="sref">page_has_private
/a>(
a href="+code=page" class="sref">page
/a>))p 106
/a>                
a href="+code=do_inon idatepage" class="sref">do_inon idatepage
/a>(
a href="+code=page" class="sref">page
/a>, 0);p 107
/a>p 108
/a>        
a href="+code=cancel_dirty_page" class="sref">cancel_dirty_page
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a>);p 109
/a>p 110
/a>        
a href="+code=clear_page_mlock" class="sref">clear_page_mlock
/a>(
a href="+code=page" class="sref">page
/a>);p 111
/a>        
a href="+code=ClearPageMappedToDisk" class="sref">ClearPageMappedToDisk
/a>(
a href="+code=page" class="sref">page
/a>);p 112
/a>        
a href="+code=delete_from_page_cache" class="sref">delete_from_page_cache
/a>(
a href="+code=page" class="sref">page
/a>);p 113
/a>        return 0;p 114.1a>}p 115
/a>p 116
/a>
spat class="comment">/*
/spatio 117
/a>
spat class="comment"> * This is for inon idate_mapping_pages().  That functoptican be called at
/spatio 118
/a>
spat class="comment"> * any time, and is not supposed to throw away dirty pages.  But pages can
/spatio 119
/a>
spat class="comment"> * be marked dirty at any time too, so use remove_mapping which safely
/spatio 120
/a>
spat class="comment"> * discards clean, unused pages.
/spatio 121
/a>
spat class="comment"> *
/spatio 122
/a>
spat class="comment"> * Returns non-zero if the page was successfully inon idated.
/spatio 123
/a>
spat class="comment"> */
/spatio 124
/a>static intp 125
/a>
a href="+code=inon idate_complete_page" class="sref">inon idate_complete_page
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 126
/a>{o 127
/a>        int 
a href="+code=ret" class="sref">ret
/a>;p 128
/a>p 129
/a>        if (
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a> != 
a href="+code=mapping" class="sref">mapping
/a>)o 130
/a>                return 0;p 131
/a>p 132
/a>        if (
a href="+code=page_has_private" class="sref">page_has_private
/a>(
a href="+code=page" class="sref">page
/a>) && !
a href="+code=try_to_release_page" class="sref">try_to_release_page
/a>(
a href="+code=page" class="sref">page
/a>, 0))o 133
/a>                return 0;p 134
/a>p 135
/a>        
a href="+code=clear_page_mlock" class="sref">clear_page_mlock
/a>(
a href="+code=page" class="sref">page
/a>);p 136
/a>        
a href="+code=ret" class="sref">ret
/a> = 
a href="+code=remove_mapping" class="sref">remove_mapping
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 137
/a>p 138
/a>        return 
a href="+code=ret" class="sref">ret
/a>;p 139
/a>}p 140
/a>p 141
/a>int 
a href="+code=truncate_inode_page" class="sref">truncate_inode_page
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 142
/a>{o 143
/a>        if (
a href="+code=page_mapped" class="sref">page_mapped
/a>(
a href="+code=page" class="sref">page
/a>)) {o 144
/a>                
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mapping" class="sref">mapping
/a>,o 145
/a>                                   (
a href="+code=loff_t" class="sref">loff_t
/a>)
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a> << 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>,o 146
/a>                                   
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a>, 0);p 147
/a>        }p 148
/a>        return 
a href="+code=truncate_complete_page" class="sref">truncate_complete_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 149
/a>}p 150
/a>p 151
/a>
spat class="comment">/*
/spatio 152
/a>
spat class="comment"> * Used to get rid of pages on hardware memory corruptopt.
/spatio 153
/a>
spat class="comment"> */
/spatio 154
/a>int 
a href="+code=generic_error_remove_page" class="sref">generic_error_remove_page
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 155
/a>{o 156
/a>        if (!
a href="+code=mapping" class="sref">mapping
/a>)o 157
/a>                return -
a href="+code=EINVAL" class="sref">EINVAL
/a>;p 158
/a>        
spat class="comment">/*
/spatio 159
/a>
spat class="comment">         * Otly punch for normal data pages for now.
/spatio 160
/a>
spat class="comment">         * Handling other typas like directorias would need more auditing.
/spatio 161
/a>
spat class="comment">         */
/spatio 162
/a>        if (!
a href="+code=S_ISREG" class="sref">S_ISREG
/a>(
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=host" class="sref">host
/a>->
a href="+code=i_mode" class="sref">i_mode
/a>))p 163
/a>                return -
a href="+code=EIO" class="sref">EIO
/a>;p 164
/a>        return 
a href="+code=truncate_inode_page" class="sref">truncate_inode_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 165
/a>}p 166
/a>
a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL
/a>(
a href="+code=generic_error_remove_page" class="sref">generic_error_remove_page
/a>);p 167
/a>p 168
/a>
spat class="comment">/*
/spatio 169
/a>
spat class="comment"> * Safely inon idate one page from its pagecache mapping.
/spatio 170
/a>
spat class="comment"> * It ptly drops clean, unused pages. The page must be locked.
/spatio 171
/a>
spat class="comment"> *
/spatio 172
/a>
spat class="comment"> * Returns 1 if the page is successfully inon idated, otherwise 0.
/spatio 173
/a>
spat class="comment"> */
/spatio 174
/a>int 
a href="+code=inon idate_inode_page" class="sref">inon idate_inode_page
/a>(struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 175
/a>{o 176
/a>        struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a> = 
a href="+code=page_mapping" class="sref">page_mapping
/a>(
a href="+code=page" class="sref">page
/a>);p 177
/a>        if (!
a href="+code=mapping" class="sref">mapping
/a>)o 178
/a>                return 0;p 179
/a>        if (
a href="+code=PageDirty" class="sref">PageDirty
/a>(
a href="+code=page" class="sref">page
/a>) || 
a href="+code=PageWriteback" class="sref">PageWriteback
/a>(
a href="+code=page" class="sref">page
/a>))p 180
/a>                return 0;p 181
/a>        if (
a href="+code=page_mapped" class="sref">page_mapped
/a>(
a href="+code=page" class="sref">page
/a>))p 182
/a>                return 0;p 183
/a>        return 
a href="+code=inon idate_complete_page" class="sref">inon idate_complete_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 184.1a>}p 185
/a>p 186
/a>
spat class="comment">/**
/spatio 187
/a>
spat class="comment"> * truncate_inode_pages_range - truncate range of pages specified by start & end byte offsets
/spatio 188
/a>
spat class="comment"> * @mapping: mapping to truncate
/spatio 189
/a>
spat class="comment"> * @lstart: offset from which to truncate
/spatio 190
/a>
spat class="comment"> * @lend: offset to which to truncate
/spatio 191
/a>
spat class="comment"> *
/spatio 192
/a>
spat class="comment"> * Truncate the page cache, removing the pages that are between
/spatio 193
/a>
spat class="comment"> * specified offsets (and zeroing out partial page
/spatio 194
/a>
spat class="comment"> * (if lstart is not page n igned)).
/spatio 195
/a>
spat class="comment"> *
/spatio 196
/a>
spat class="comment"> * Truncate takes two passes - the first pass is nonblocking.  It will not
/spatio 197
/a>
spat class="comment"> * block on page locks and it will not block on writeback.  The second pass
/spatio 198
/a>
spat class="comment"> * will wait.  This is to prevent as much IO as possible in the affected regopt.
/spatio 199
/a>
spat class="comment"> * The first pass will remove most pages, so the search cost of the second pass
/spatio 200
/a>
spat class="comment"> * is low.
/spatio 201
/a>
spat class="comment"> *
/spatio 202
/a>
spat class="comment"> * We pass down the cache-hot hint to the page freeing code.  Even if the
/spatio 203
/a>
spat class="comment"> * mapping is large, it is probably the case that the final pages are the most
/spatio 204
/a>
spat class="comment"> * recently touched, and freeing happens in ascending file offset order.
/spatio 205
/a>
spat class="comment"> */
/spatio 206
/a>void 
a href="+code=truncate_inode_pages_range" class="sref">truncate_inode_pages_range
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>,o 207
/a>                                
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=lstart" class="sref">lstart
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=lend" class="sref">lend
/a>)o 208
/a>{o 209
/a>        const 
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=start" class="sref">start
/a> = (
a href="+code=lstart" class="sref">lstart
/a> + 
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a>-1) >> 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>;p 210
/a>        const unsigned 
a href="+code=partial" class="sref">partial
/a> = 
a href="+code=lstart" class="sref">lstart
/a> & (
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a> - 1);p 211
/a>        struct 
a href="+code=pagevec" class="sref">pagevec
/a> 
a href="+code=pvec" class="sref">pvec
/a>;p 212
/a>        
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=index" class="sref">index
/a>;p 213
/a>        
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=end" class="sref">end
/a>;p 214
/a>        int 
a href="+code=i" class="sref">i
/a>;p 215
/a>p 216
/a>        
a href="+code=cleancache_inon idate_inode" class="sref">cleancache_inon idate_inode
/a>(
a href="+code=mapping" class="sref">mapping
/a>);p 217
/a>        if (
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=nrpages" class="sref">nrpages
/a> == 0)o 218
/a>                return;p 219
/a>p 220
/a>        
a href="+code=BUG_ON" class="sref">BUG_ON
/a>((
a href="+code=lend" class="sref">lend
/a> & (
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a> - 1)) != (
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a> - 1));p 221
/a>        
a href="+code=end" class="sref">end
/a> = (
a href="+code=lend" class="sref">lend
/a> >> 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>);p 222
/a>p 223
/a>        
a href="+code=pagevec_init" class="sref">pagevec_init
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 0);p 224
/a>        
a href="+code=index" class="sref">index
/a> = 
a href="+code=start" class="sref">start
/a>;p 225
/a>        while (
a href="+code=index" class="sref">index
/a> <= 
a href="+code=end" class="sref">end
/a> && 
a href="+code=pagevec_lookup" class="sref">pagevec_lookup
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=index" class="sref">index
/a>,o 226
/a>                        
a href="+code=min" class="sref">min
/a>(
a href="+code=end" class="sref">end
/a> - 
a href="+code=index" class="sref">index
/a>, (
a href="+code=pgoff_t" class="sref">pgoff_t
/a>)
a href="+code=PAGEVEC_SIZE" class="sref">PAGEVEC_SIZE
/a> - 1) + 1)) {o 227
/a>                
a href="+code=mem_cgroup_uncharge_start" class="sref">mem_cgroup_uncharge_start
/a>();p 228
/a>                for (
a href="+code=i" class="sref">i
/a> = 0; 
a href="+code=i" class="sref">i
/a> < 
a href="+code=pagevec_count" class="sref">pagevec_count
/a>(&
a href="+code=pvec" class="sref">pvec
/a>); 
a href="+code=i" class="sref">i
/a>++) {o 229
/a>                        struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a> = 
a href="+code=pvec" class="sref">pvec
/a>.
a href="+code=pages" class="sref">pages
/a>[
a href="+code=i" class="sref">i
/a>];p 230
/a>p 231
/a>                        
spat class="comment">/* We rely upon deletoptinot changing page->index */
/spatio 232
/a>                        
a href="+code=index" class="sref">index
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a>;p 233
/a>                        if (
a href="+code=index" class="sref">index
/a> > 
a href="+code=end" class="sref">end
/a>)o 234
/a>                                break;p 235
/a>p 236
/a>                        if (!
a href="+code=trylock_page" class="sref">trylock_page
/a>(
a href="+code=page" class="sref">page
/a>))p 237
/a>                                continue;p 238
/a>                        
a href="+code=WARN_ON" class="sref">WARN_ON
/a>(
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a> != 
a href="+code=index" class="sref">index
/a>);p 239
/a>                        if (
a href="+code=PageWriteback" class="sref">PageWriteback
/a>(
a href="+code=page" class="sref">page
/a>)) {o 240
/a>                                
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 241
/a>                                continue;p 242
/a>                        }p 243
/a>                        
a href="+code=truncate_inode_page" class="sref">truncate_inode_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 244
/a>                        
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 245
/a>                }p 246
/a>                
a href="+code=pagevec_release" class="sref">pagevec_release
/a>(&
a href="+code=pvec" class="sref">pvec
/a>);p 247
/a>                
a href="+code=mem_cgroup_uncharge_end" class="sref">mem_cgroup_uncharge_end
/a>();p 248
/a>                
a href="+code=cond_resched" class="sref">cond_resched
/a>();p 249
/a>                
a href="+code=index" class="sref">index
/a>++;p 250
/a>        }p 251
/a>p 252
/a>        if (
a href="+code=partial" class="sref">partial
/a>) {o 253
/a>                struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a> = 
a href="+code=find_lock_page" class="sref">find_lock_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=start" class="sref">start
/a> - 1);p 254
/a>                if (
a href="+code=page" class="sref">page
/a>) {o 255
/a>                        
a href="+code=wait_on_page_writeback" class="sref">wait_on_page_writeback
/a>(
a href="+code=page" class="sref">page
/a>);p 256
/a>                        
a href="+code=truncate_partial_page" class="sref">truncate_partial_page
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=partial" class="sref">partial
/a>);p 257
/a>                        
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 258
/a>                        
a href="+code=page_cache_release" class="sref">page_cache_release
/a>(
a href="+code=page" class="sref">page
/a>);p 259
/a>                }p 260
/a>        }p 261
/a>p 262
/a>        
a href="+code=index" class="sref">index
/a> = 
a href="+code=start" class="sref">start
/a>;p 263
/a>        for ( ; ; ) {o 264
/a>                
a href="+code=cond_resched" class="sref">cond_resched
/a>();p 265
/a>                if (!
a href="+code=pagevec_lookup" class="sref">pagevec_lookup
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=index" class="sref">index
/a>,o 266
/a>                        
a href="+code=min" class="sref">min
/a>(
a href="+code=end" class="sref">end
/a> - 
a href="+code=index" class="sref">index
/a>, (
a href="+code=pgoff_t" class="sref">pgoff_t
/a>)
a href="+code=PAGEVEC_SIZE" class="sref">PAGEVEC_SIZE
/a> - 1) + 1)) {o 267
/a>                        if (
a href="+code=index" class="sref">index
/a> == 
a href="+code=start" class="sref">start
/a>)p 268
/a>                                break;p 269
/a>                        
a href="+code=index" class="sref">index
/a> = 
a href="+code=start" class="sref">start
/a>;p 270
/a>                        continue;p 271
/a>                }p 272
/a>                if (
a href="+code=index" class="sref">index
/a> == 
a href="+code=start" class="sref">start
/a> && 
a href="+code=pvec" class="sref">pvec
/a>.
a href="+code=pages" class="sref">pages
/a>[0]->
a href="+code=index" class="sref">index
/a> > 
a href="+code=end" class="sref">end
/a>) {o 273
/a>                        
a href="+code=pagevec_release" class="sref">pagevec_release
/a>(&
a href="+code=pvec" class="sref">pvec
/a>);p 274
/a>                        break;p 275
/a>                }p 276
/a>                
a href="+code=mem_cgroup_uncharge_start" class="sref">mem_cgroup_uncharge_start
/a>();p 277
/a>                for (
a href="+code=i" class="sref">i
/a> = 0; 
a href="+code=i" class="sref">i
/a> < 
a href="+code=pagevec_count" class="sref">pagevec_count
/a>(&
a href="+code=pvec" class="sref">pvec
/a>); 
a href="+code=i" class="sref">i
/a>++) {o 278
/a>                        struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a> = 
a href="+code=pvec" class="sref">pvec
/a>.
a href="+code=pages" class="sref">pages
/a>[
a href="+code=i" class="sref">i
/a>];p 279
/a>p 280
/a>                        
spat class="comment">/* We rely upon deletoptinot changing page->index */
/spatio 281
/a>                        
a href="+code=index" class="sref">index
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a>;p 282
/a>                        if (
a href="+code=index" class="sref">index
/a> > 
a href="+code=end" class="sref">end
/a>)o 283
/a>                                break;p 284
/a>p 285
/a>                        
a href="+code=lock_page" class="sref">lock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 286
/a>                        
a href="+code=WARN_ON" class="sref">WARN_ON
/a>(
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a> != 
a href="+code=index" class="sref">index
/a>);p 287
/a>                        
a href="+code=wait_on_page_writeback" class="sref">wait_on_page_writeback
/a>(
a href="+code=page" class="sref">page
/a>);p 288
/a>                        
a href="+code=truncate_inode_page" class="sref">truncate_inode_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 289
/a>                        
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 290
/a>                }p 291
/a>                
a href="+code=pagevec_release" class="sref">pagevec_release
/a>(&
a href="+code=pvec" class="sref">pvec
/a>);p 292
/a>                
a href="+code=mem_cgroup_uncharge_end" class="sref">mem_cgroup_uncharge_end
/a>();p 293
/a>                
a href="+code=index" class="sref">index
/a>++;p 294
/a>        }p 295
/a>        
a href="+code=cleancache_inon idate_inode" class="sref">cleancache_inon idate_inode
/a>(
a href="+code=mapping" class="sref">mapping
/a>);p 296
/a>}p 297
/a>
a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL
/a>(
a href="+code=truncate_inode_pages_range" class="sref">truncate_inode_pages_range
/a>);p 298
/a>p 299
/a>
spat class="comment">/**
/spatio 300
/a>
spat class="comment"> * truncate_inode_pages - truncate *all* the pages from at offset
/spatio 301
/a>
spat class="comment"> * @mapping: mapping to truncate
/spatio 302
/a>
spat class="comment"> * @lstart: offset from which to truncate
/spatio 303
/a>
spat class="comment"> *
/spatio 304
/a>
spat class="comment"> * Called under (and serin ised by) inode->i_mutex.
/spatio 305
/a>
spat class="comment"> *
/spatio 306
/a>
spat class="comment"> * Note: When this functoptireturns, thereican be a page in the process of
/spatio 307
/a>
spat class="comment"> * deletopti(inside __delete_from_page_cache()) in the specified range.  Thus
/spatio 308
/a>
spat class="comment"> * mapping->nrpagesican be non-zero when this functoptireturns even after
/spatio 309
/a>
spat class="comment"> * truncatoptiof the whole mapping.
/spatio 310
/a>
spat class="comment"> */
/spatio 311
/a>void 
a href="+code=truncate_inode_pages" class="sref">truncate_inode_pages
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=lstart" class="sref">lstart
/a>)o 312
/a>{o 313
/a>        
a href="+code=truncate_inode_pages_range" class="sref">truncate_inode_pages_range
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=lstart" class="sref">lstart
/a>, (
a href="+code=loff_t" class="sref">loff_t
/a>)-1);p 314.1a>}p 315
/a>
a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL
/a>(
a href="+code=truncate_inode_pages" class="sref">truncate_inode_pages
/a>);p 316
/a>p 317
/a>
spat class="comment">/**
/spatio 318
/a>
spat class="comment"> * inon idate_mapping_pages - Inon idate all the unlocked pagesiof one inode
/spatio 319
/a>
spat class="comment"> * @mapping: the address_space which holds the pages to inon idate
/spatio 320
/a>
spat class="comment"> * @start: the offset 'from' which to inon idate
/spatio 321
/a>
spat class="comment"> * @end: the offset 'to' which to inon idatei(inclusive)
/spatio 322
/a>
spat class="comment"> *
/spatio 323
/a>
spat class="comment"> * This functoptiptly removes the unlocked pages, if you want to
/spatio 324
/a>
spat class="comment"> * remove all the pagesiof one inode, you must call truncate_inode_pages.
/spatio 325
/a>
spat class="comment"> *
/spatio 326
/a>
spat class="comment"> * inon idate_mapping_pages() will not block on IO actovity. It will not
/spatio 327
/a>
spat class="comment"> * inon idateipagesiwhich are dirty, locked, under writeback or mapped into
/spatio 328
/a>
spat class="comment"> * pagetables.
/spatio 329
/a>
spat class="comment"> */
/spatio 330
/a>unsigned long 
a href="+code=inon idate_mapping_pages" class="sref">inon idate_mapping_pages
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>,o 331
/a>                
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=start" class="sref">start
/a>, 
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=end" class="sref">end
/a>)o 332
/a>{o 333
/a>        struct 
a href="+code=pagevec" class="sref">pagevec
/a> 
a href="+code=pvec" class="sref">pvec
/a>;p 334
/a>        
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=index" class="sref">index
/a> = 
a href="+code=start" class="sref">start
/a>;p 335
/a>        unsigned long 
a href="+code=ret" class="sref">ret
/a>;p 336
/a>        unsigned long 
a href="+code=count" class="sref">count
/a> = 0;p 337
/a>        int 
a href="+code=i" class="sref">i
/a>;p 338
/a>p 339
/a>        
spat class="comment">/*
/spatio 340
/a>
spat class="comment">         * Note: this functoptimay get called ptia shmem/tmpfs mapping:
/spatio 341
/a>
spat class="comment">         * pagevec_lookup() might then return 0 prematurely (because it
/spatio 342
/a>
spat class="comment">         * got a gangfuliof swap entrias); but it's hardly worth worrying
/spatio 343
/a>
spat class="comment">         * about - it can rarely have anything to free from such a mapping
/spatio 344
/a>
spat class="comment">         * (most pages are dirty), and already skipsiover any difficulties.
/spatio 345
/a>
spat class="comment">         */
/spatio 346
/a>p 347
/a>        
a href="+code=pagevec_init" class="sref">pagevec_init
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 0);p 348
/a>        while (
a href="+code=index" class="sref">index
/a> <= 
a href="+code=end" class="sref">end
/a> && 
a href="+code=pagevec_lookup" class="sref">pagevec_lookup
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=index" class="sref">index
/a>,o 349
/a>                        
a href="+code=min" class="sref">min
/a>(
a href="+code=end" class="sref">end
/a> - 
a href="+code=index" class="sref">index
/a>, (
a href="+code=pgoff_t" class="sref">pgoff_t
/a>)
a href="+code=PAGEVEC_SIZE" class="sref">PAGEVEC_SIZE
/a> - 1) + 1)) {o 350
/a>                
a href="+code=mem_cgroup_uncharge_start" class="sref">mem_cgroup_uncharge_start
/a>();p 351
/a>                for (
a href="+code=i" class="sref">i
/a> = 0; 
a href="+code=i" class="sref">i
/a> < 
a href="+code=pagevec_count" class="sref">pagevec_count
/a>(&
a href="+code=pvec" class="sref">pvec
/a>); 
a href="+code=i" class="sref">i
/a>++) {o 352
/a>                        struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a> = 
a href="+code=pvec" class="sref">pvec
/a>.
a href="+code=pages" class="sref">pages
/a>[
a href="+code=i" class="sref">i
/a>];p 353
/a>p 354
/a>                        
spat class="comment">/* We rely upon deletoptinot changing page->index */
/spatio 355
/a>                        
a href="+code=index" class="sref">index
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a>;p 356
/a>                        if (
a href="+code=index" class="sref">index
/a> > 
a href="+code=end" class="sref">end
/a>)o 357
/a>                                break;p 358
/a>p 359
/a>                        if (!
a href="+code=trylock_page" class="sref">trylock_page
/a>(
a href="+code=page" class="sref">page
/a>))p 360
/a>                                continue;p 361
/a>                        
a href="+code=WARN_ON" class="sref">WARN_ON
/a>(
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a> != 
a href="+code=index" class="sref">index
/a>);p 362
/a>                        
a href="+code=ret" class="sref">ret
/a> = 
a href="+code=inon idate_inode_page" class="sref">inon idate_inode_page
/a>(
a href="+code=page" class="sref">page
/a>);p 363
/a>                        
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 364
/a>                        
spat class="comment">/*
/spatio 365
/a>
spat class="comment">                         * Inon idatoptiis a hint that the page is no longer
/spatio 366
/a>
spat class="comment">                         * of interest and try to speed up its reclaim.
/spatio 367
/a>
spat class="comment">                         */
/spatio 368
/a>                        if (!
a href="+code=ret" class="sref">ret
/a>)p 369
/a>                                
a href="+code=deactovate_page" class="sref">deactovate_page
/a>(
a href="+code=page" class="sref">page
/a>);p 370
/a>                        
a href="+code=count" class="sref">count
/a> += 
a href="+code=ret" class="sref">ret
/a>;p 371
/a>                }p 372
/a>                
a href="+code=pagevec_release" class="sref">pagevec_release
/a>(&
a href="+code=pvec" class="sref">pvec
/a>);p 373
/a>                
a href="+code=mem_cgroup_uncharge_end" class="sref">mem_cgroup_uncharge_end
/a>();p 374
/a>                
a href="+code=cond_resched" class="sref">cond_resched
/a>();p 375
/a>                
a href="+code=index" class="sref">index
/a>++;p 376
/a>        }p 377
/a>        return 
a href="+code=count" class="sref">count
/a>;p 378
/a>}p 379
/a>
a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL
/a>(
a href="+code=inon idate_mapping_pages" class="sref">inon idate_mapping_pages
/a>);p 380
/a>p 381
/a>
spat class="comment">/*
/spatio 382
/a>
spat class="comment"> * This is like inon idate_complete_page(), except it ignores the page's
/spatio 383
/a>
spat class="comment"> * refcount.  We do this because inon idate_inode_pages2() needs stronger
/spatio 384
/a>
spat class="comment"> * inon idatoptiguarantees, and cannot afford to leaveipagesibehind because
/spatio 385
/a>
spat class="comment"> * shrink_page_list() has a temp ref ptithem, or because they're transiently
/spatio 386
/a>
spat class="comment"> * sitting in the lru_cache_add() pagevecs.
/spatio 387
/a>
spat class="comment"> */
/spatio 388
/a>statoc into 389
/a>
a href="+code=inon idate_complete_page2" class="sref">inon idate_complete_page2
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 390
/a>{o 391
/a>        if (
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a> != 
a href="+code=mapping" class="sref">mapping
/a>)o 392
/a>                return 0;p 393
/a>p 394
/a>        if (
a href="+code=page_has_provate" class="sref">page_has_provate
/a>(
a href="+code=page" class="sref">page
/a>) && !
a href="+code=try_to_release_page" class="sref">try_to_release_page
/a>(
a href="+code=page" class="sref">page
/a>, 
a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL
/a>))p 395
/a>                return 0;p 396
/a>p 397
/a>        
a href="+code=clear_page_mlock" class="sref">clear_page_mlock
/a>(
a href="+code=page" class="sref">page
/a>);p 398
/a>p 399
/a>        
a href="+code=spin_lock_irq" class="sref">spin_lock_irq
/a>(&
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=tree_lock" class="sref">tree_lock
/a>);p 400
/a>        if (
a href="+code=PageDirty" class="sref">PageDirty
/a>(
a href="+code=page" class="sref">page
/a>))p 401
/a>                goto 
a href="+code=failed" class="sref">failed
/a>;p 402
/a>p 403
/a>        
a href="+code=BUG_ON" class="sref">BUG_ON
/a>(
a href="+code=page_has_provate" class="sref">page_has_provate
/a>(
a href="+code=page" class="sref">page
/a>));p 404
/a>        
a href="+code=__delete_from_page_cache" class="sref">__delete_from_page_cache
/a>(
a href="+code=page" class="sref">page
/a>);p 405
/a>        
a href="+code=spin_unlock_irq" class="sref">spin_unlock_irq
/a>(&
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=tree_lock" class="sref">tree_lock
/a>);p 406
/a>        
a href="+code=mem_cgroup_uncharge_cache_page" class="sref">mem_cgroup_uncharge_cache_page
/a>(
a href="+code=page" class="sref">page
/a>);p 407
/a>p 408
/a>        if (
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=a_ops" class="sref">a_ops
/a>->
a href="+code=freepage" class="sref">freepage
/a>)o 409
/a>                
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=a_ops" class="sref">a_ops
/a>->
a href="+code=freepage" class="sref">freepage
/a>(
a href="+code=page" class="sref">page
/a>);p 410
/a>p 411
/a>        
a href="+code=page_cache_release" class="sref">page_cache_release
/a>(
a href="+code=page" class="sref">page
/a>);       
spat class="comment">/* pagecache ref */
/spatio 412
/a>        return 1;p 413
/a>
a href="+code=failed" class="sref">failed
/a>:p 414
/a>        
a href="+code=spin_unlock_irq" class="sref">spin_unlock_irq
/a>(&
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=tree_lock" class="sref">tree_lock
/a>);p 415
/a>        return 0;p 416
/a>}p 417
/a>p 418
/a>statoc int 
a href="+code=do_launder_page" class="sref">do_launder_page
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>, struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a>)p 419
/a>{o 420
/a>        if (!
a href="+code=PageDirty" class="sref">PageDirty
/a>(
a href="+code=page" class="sref">page
/a>))p 421
/a>                return 0;p 422
/a>        if (
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a> != 
a href="+code=mapping" class="sref">mapping
/a> || 
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=a_ops" class="sref">a_ops
/a>->
a href="+code=launder_page" class="sref">launder_page
/a> == 
a href="+code=NULL" class="sref">NULL
/a>)p 423
/a>                return 0;p 424
/a>        return 
a href="+code=mapping" class="sref">mapping
/a>->
a href="+code=a_ops" class="sref">a_ops
/a>->
a href="+code=launder_page" class="sref">launder_page
/a>(
a href="+code=page" class="sref">page
/a>);p 425
/a>}p 426
/a>p 427
/a>
spat class="comment">/**
/spatio 428
/a>
spat class="comment"> * inon idate_inode_pages2_range - remove range of pages from at address_space
/spatio 429
/a>
spat class="comment"> * @mapping: the address_space
/spatio 430
/a>
spat class="comment"> * @start: the page offset 'from' which to inon idate
/spatio 431
/a>
spat class="comment"> * @end: the page offset 'to' which to inon idatei(inclusive)
/spatio 432
/a>
spat class="comment"> *
/spatio 433
/a>
spat class="comment"> * Anyipagesiwhich are found to be mapped into pagetables are unmapped prior to
/spatio 434
/a>
spat class="comment"> * inon idatopt.
/spatio 435
/a>
spat class="comment"> *
/spatio 436
/a>
spat class="comment"> * Returns -EBUSY if anyipagesicould not be inon idated.
/spatio 437
/a>
spat class="comment"> */
/spatio 438
/a>int 
a href="+code=inon idate_inode_pages2_range" class="sref">inon idate_inode_pages2_range
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>,o 439
/a>                                  
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=start" class="sref">start
/a>, 
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=end" class="sref">end
/a>)o 440
/a>{o 441
/a>        struct 
a href="+code=pagevec" class="sref">pagevec
/a> 
a href="+code=pvec" class="sref">pvec
/a>;p 442
/a>        
a href="+code=pgoff_t" class="sref">pgoff_t
/a> 
a href="+code=index" class="sref">index
/a>;p 443
/a>        int 
a href="+code=i" class="sref">i
/a>;p 444
/a>        int 
a href="+code=ret" class="sref">ret
/a> = 0;p 445
/a>        int 
a href="+code=ret2" class="sref">ret2
/a> = 0;p 446
/a>        int 
a href="+code=did_range_unmap" class="sref">did_range_unmap
/a> = 0;p 447
/a>p 448
/a>        
a href="+code=cleancache_inon idate_inode" class="sref">cleancache_inon idate_inode
/a>(
a href="+code=mapping" class="sref">mapping
/a>);p 449
/a>        
a href="+code=pagevec_init" class="sref">pagevec_init
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 0);p 450
/a>        
a href="+code=index" class="sref">index
/a> = 
a href="+code=start" class="sref">start
/a>;p 451
/a>        while (
a href="+code=index" class="sref">index
/a> <= 
a href="+code=end" class="sref">end
/a> && 
a href="+code=pagevec_lookup" class="sref">pagevec_lookup
/a>(&
a href="+code=pvec" class="sref">pvec
/a>, 
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=index" class="sref">index
/a>,o 452
/a>                        
a href="+code=min" class="sref">min
/a>(
a href="+code=end" class="sref">end
/a> - 
a href="+code=index" class="sref">index
/a>, (
a href="+code=pgoff_t" class="sref">pgoff_t
/a>)
a href="+code=PAGEVEC_SIZE" class="sref">PAGEVEC_SIZE
/a> - 1) + 1)) {o 453
/a>                
a href="+code=mem_cgroup_uncharge_start" class="sref">mem_cgroup_uncharge_start
/a>();p 454
/a>                for (
a href="+code=i" class="sref">i
/a> = 0; 
a href="+code=i" class="sref">i
/a> < 
a href="+code=pagevec_count" class="sref">pagevec_count
/a>(&
a href="+code=pvec" class="sref">pvec
/a>); 
a href="+code=i" class="sref">i
/a>++) {o 455
/a>                        struct 
a href="+code=page" class="sref">page
/a> *
a href="+code=page" class="sref">page
/a> = 
a href="+code=pvec" class="sref">pvec
/a>.
a href="+code=pages" class="sref">pages
/a>[
a href="+code=i" class="sref">i
/a>];p 456
/a>p 457
/a>                        
spat class="comment">/* We rely upon deletoptinot changing page->index */
/spatio 458
/a>                        
a href="+code=index" class="sref">index
/a> = 
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a>;p 459
/a>                        if (
a href="+code=index" class="sref">index
/a> > 
a href="+code=end" class="sref">end
/a>)o 460
/a>                                break;p 461
/a>p 462
/a>                        
a href="+code=lock_page" class="sref">lock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 463
/a>                        
a href="+code=WARN_ON" class="sref">WARN_ON
/a>(
a href="+code=page" class="sref">page
/a>->
a href="+code=index" class="sref">index
/a> != 
a href="+code=index" class="sref">index
/a>);p 464
/a>                        if (
a href="+code=page" class="sref">page
/a>->
a href="+code=mapping" class="sref">mapping
/a> != 
a href="+code=mapping" class="sref">mapping
/a>) {o 465
/a>                                
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 466
/a>                                continue;p 467
/a>                        }p 468
/a>                        
a href="+code=wait_on_page_writeback" class="sref">wait_on_page_writeback
/a>(
a href="+code=page" class="sref">page
/a>);p 469
/a>                        if (
a href="+code=page_mapped" class="sref">page_mapped
/a>(
a href="+code=page" class="sref">page
/a>)) {o 470
/a>                                if (!
a href="+code=did_range_unmap" class="sref">did_range_unmap
/a>) {o 471
/a>                                        
spat class="comment">/*
/spatio 472
/a>
spat class="comment">                                         * Zap the rest of the file in one hit.
/spatio 473
/a>
spat class="comment">                                         */
/spatio 474
/a>                                        
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mapping" class="sref">mapping
/a>,o 475
/a>                                           (
a href="+code=loff_t" class="sref">loff_t
/a>)
a href="+code=index" class="sref">index
/a> << 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>,o 476
/a>                                           (
a href="+code=loff_t" class="sref">loff_t
/a>)(1 + 
a href="+code=end" class="sref">end
/a> - 
a href="+code=index" class="sref">index
/a>)o 477
/a>                                                         << 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>,o 478
/a>                                            0);p 479
/a>                                        
a href="+code=did_range_unmap" class="sref">did_range_unmap
/a> = 1;p 480
/a>                                } else {o 481
/a>                                        
spat class="comment">/*
/spatio 482
/a>
spat class="comment">                                         * Just zap this page
/spatio 483
/a>
spat class="comment">                                         */
/spatio 484
/a>                                        
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mapping" class="sref">mapping
/a>,o 485
/a>                                           (
a href="+code=loff_t" class="sref">loff_t
/a>)
a href="+code=index" class="sref">index
/a> << 
a href="+code=PAGE_CACHE_SHIFT" class="sref">PAGE_CACHE_SHIFT
/a>,o 486
/a>                                           
a href="+code=PAGE_CACHE_SIZE" class="sref">PAGE_CACHE_SIZE
/a>, 0);p 487
/a>                                }p 488
/a>                        }p 489
/a>                        
a href="+code=BUG_ON" class="sref">BUG_ON
/a>(
a href="+code=page_mapped" class="sref">page_mapped
/a>(
a href="+code=page" class="sref">page
/a>));p 490
/a>                        
a href="+code=ret2" class="sref">ret2
/a> = 
a href="+code=do_launder_page" class="sref">do_launder_page
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>);p 491
/a>                        if (
a href="+code=ret2" class="sref">ret2
/a> == 0) {o 492
/a>                                if (!
a href="+code=inon idate_complete_page2" class="sref">inon idate_complete_page2
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 
a href="+code=page" class="sref">page
/a>))o 493
/a>                                        
a href="+code=ret2" class="sref">ret2
/a> = -
a href="+code=EBUSY" class="sref">EBUSY
/a>;p 494
/a>                        }p 495
/a>                        if (
a href="+code=ret2" class="sref">ret2
/a> < 0)o 496
/a>                                
a href="+code=ret" class="sref">ret
/a> = 
a href="+code=ret2" class="sref">ret2
/a>;p 497
/a>                        
a href="+code=unlock_page" class="sref">unlock_page
/a>(
a href="+code=page" class="sref">page
/a>);p 498
/a>                }p 499
/a>                
a href="+code=pagevec_release" class="sref">pagevec_release
/a>(&
a href="+code=pvec" class="sref">pvec
/a>);p 500
/a>                
a href="+code=mem_cgroup_uncharge_end" class="sref">mem_cgroup_uncharge_end
/a>();p 501
/a>                
a href="+code=cond_resched" class="sref">cond_resched
/a>();p 502
/a>                
a href="+code=index" class="sref">index
/a>++;p 503
/a>        }p 504
/a>        
a href="+code=cleancache_inon idate_inode" class="sref">cleancache_inon idate_inode
/a>(
a href="+code=mapping" class="sref">mapping
/a>);p 505
/a>        return 
a href="+code=ret" class="sref">ret
/a>;p 506
/a>}p 507
/a>
a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL
/a>(
a href="+code=inon idate_inode_pages2_range" class="sref">inon idate_inode_pages2_range
/a>);p 508
/a>p 509
/a>
spat class="comment">/**
/spatio 510
/a>
spat class="comment"> * inon idate_inode_pages2 - remove all pages from at address_space
/spatio 511
/a>
spat class="comment"> * @mapping: the address_space
/spatio 512
/a>
spat class="comment"> *
/spatio 513
/a>
spat class="comment"> * Anyipagesiwhich are found to be mapped into pagetables are unmapped prior to
/spatio 514
/a>
spat class="comment"> * inon idatopt.
/spatio 515
/a>
spat class="comment"> *
/spatio 516
/a>
spat class="comment"> * Returns -EBUSY if anyipagesicould not be inon idated.
/spatio 517
/a>
spat class="comment"> */
/spatio 518
/a>int 
a href="+code=inon idate_inode_pages2" class="sref">inon idate_inode_pages2
/a>(struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a>)o 519
/a>{o 520
/a>        return 
a href="+code=inon idate_inode_pages2_range" class="sref">inon idate_inode_pages2_range
/a>(
a href="+code=mapping" class="sref">mapping
/a>, 0, -1);p 521
/a>}p 522
/a>
a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL
/a>(
a href="+code=inon idate_inode_pages2" class="sref">inon idate_inode_pages2
/a>);p 523
/a>p 524
/a>
spat class="comment">/**
/spatio 525
/a>
spat class="comment"> * truncate_pagecache - unmap and remove pagecache that has been truncated
/spatio 526
/a>
spat class="comment"> * @inode: inode
/spatio 527
/a>
spat class="comment"> * @oldsize: old file size
/spatio 528
/a>
spat class="comment"> * @newsize: new file size
/spatio 529
/a>
spat class="comment"> *
/spatio 530
/a>
spat class="comment"> * inode's new i_size must already be written before truncate_pagecache
/spatio 531
/a>
spat class="comment"> * isicalled.
/spatio 532
/a>
spat class="comment"> *
/spatio 533
/a>
spat class="comment"> * This functoptishould typically be called before the filesystem
/spatio 534
/a>
spat class="comment"> * releases resources associated with the freed range (eg. deallocates
/spatio 535
/a>
spat class="comment"> * blocks). This way, pagecache will always stay logically coherent
/spatio 536
/a>
spat class="comment"> * with on-disk format, and the filesystem would not haveito deal with
/spatio 537
/a>
spat class="comment"> * situatopts such as writepage being called for a page that has already
/spatio 538
/a>
spat class="comment"> * had its underlying blocks deallocated.
/spatio 539
/a>
spat class="comment"> */
/spatio 540
/a>void 
a href="+code=truncate_pagecache" class="sref">truncate_pagecache
/a>(struct 
a href="+code=inode" class="sref">inode
/a> *
a href="+code=inode" class="sref">inode
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=oldsize" class="sref">oldsize
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=newsize" class="sref">newsize
/a>)o 541
/a>{o 542
/a>        struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a> = 
a href="+code=inode" class="sref">inode
/a>->
a href="+code=i_mapping" class="sref">i_mapping
/a>;p 543
/a>        
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=holebegin" class="sref">holebegin
/a> = 
a href="+code=round_up" class="sref">round_up
/a>(
a href="+code=newsize" class="sref">newsize
/a>, 
a href="+code=PAGE_SIZE" class="sref">PAGE_SIZE
/a>);p 544
/a>p 545
/a>        
spat class="comment">/*
/spatio 546
/a>
spat class="comment">         * unmap_mapping_range isicalled twice, first simply for
/spatio 547
/a>
spat class="comment">         * efficiency so that truncate_inode_pages does fewer
/spatio 548
/a>
spat class="comment">         * single-page unmaps.  However after this first call, and
/spatio 549
/a>
spat class="comment">         * before truncate_inode_pages finishes, it is possible for
/spatio 550
/a>
spat class="comment">         * provateipagesito be COWed,iwhich remain after
/spatio 551
/a>
spat class="comment">         *  3|1ne"t classe=conbe COWed,iwhich remain after
/spat{o 482
/a>
spat class="comment">   .  Ht"> * nyipadages e wrrectnessnderlying blocks deallocated.
/spa {o 483
/a>
sp9
/a>
spat class="comment"> */
/spa);p 50             
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mappinf_t" class="sref">loff_t
/a> 
a href="+code=holebeginng" cass="sref">mapping
/a>, 0, -1 {o 540
/a>vomment">   ef="+code=truncate_pagecomment">   s="sref">unmap_mapping_range
/a>(
a href="+code=mappinf_t" class="sref">loff_t
/a> 
a href="+code=newsizs="sref">mapping
/a>, 0, -1 io 40             
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mappinf_t" class="sref">loff_t
/a> 
a href="+code=holebeginng" cass="sref">mapping
/a>, 0, -1 io 521
/atio 522
/a>ref="+code=EXPORT_SYMBOL_GPLs="sref">unmap_mappi 540
/a>void 
a href="+code=truncate_pagecache" class="ss="sref">mapping
/a>, 0, -1 iomapping
/a>, 0, -1>)o 524
/a>
spat class="comment">/**
/spak;p 531
ate_pagecsetmment- up'ommenent">ment"> * bh as wlass="comment"> * @newsize: new file size
/spaa>p 382
/a>
spat class="comment"> * @inode: inode
/spa);p 533
/a>
spat class="comment"> * @newsize: new file size
/spa);p 534"> * @newsize: new file size
/spa){o 525
/a>
spat setmmentup's"commentnt">mers="cspagecache - a>
spalass(if"> * @newsize: new file size
/spa)io 536
necessary)nt">/a>
spat. Itblocksnyint"> * This functopte_pag * with on-dis, except it ignores the page's
/sp5e;p 537
/etattrspat classw1ne ATTRPAGE_ate_inamsiwhinderlying blocks deallocated.
/spa }p 538derlying blocks deallocated.
/spa io 429
M> * nyiunctopt/a>
sommentmutex|1nldtnt"> class=  Htith on-diskspecilasderlying blocks deallocated.
/spa {o 530
ment"- a>
spalassp and remmers="c underlying blocks deallocated.
/spa {o 531
/a>
spat class="comment"> */
/spatio 540
/a>vsetmmenef="+code=truncate_pagecsetmmenss="sref">truncate_pagecache
/a>(struct 
a href="+code=inode" class="sref">inode
/a> *
a href="+code=inode" class="sref">inode
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=newsize" class="sref">newsize
/atio 541
/atio 50">inode
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=oldsis="sref">mapping
/a>, 0, -1>,omapping
/a>, 0, -1>io 40">loff_t
/a> 
a href="+code=oldsing" class="sref">mapping
/a> = 
a href="+code=inode" class="sref">inooff_t
/a> 
a href="nooff_ldsis="sref">mapping
/a>, 0, -1>;pinooff_k" clat
/a> 
a href="nooff_k" claass="sref">EXPORT_SYMBinode
/a> *
a href="+code=inode" class="sref">loff_t
/a> 
a href="+code=newsizs="sref">mapping
/a>, 0, -1>,o 508
/);p 44 540
/a>void 
a href="+code=truncate_pagecache" class="ssref">EXPORT_SYMBinode
/a> *
a href="+code=inode" class="sref">loff_t
/a> 
a href="+code=oldsize" class="sref">">loff_t
/a> 
a href="+code=newsizs="sref">mapping
/a>, 0, -11;p 521
/a {o 522
/a>ref="+code=EXPORT_SYMBOL_GPLs="sref">unmap_mappi 540
/a>vsetmmenef="+code=truncate_pagecsetmmenss="zs="sref">mapping
/a>, 0, -11io 402
5tio 424
/a>
spat class="comment">/**
/spatio 534
vment">/**mment"> *+code=ms "sourc" by
/a>
spat() on-unct/a>
spat class="comment">/**
/spat,o 525
/a>
spat clas             usecache that has been truncated
/spa>,o 526
/a>
spat c     "comment">="sre- a>
spal=maphe that has been truncated
/spa>;p 537aphe that has been truncated
/spa>,o 538
/a>
spat classi> * preits uent"> a>
spat setmment pag already be written before truncate_pagecache
/spa }p 429
="commeb  usect c-diad,nt"ge   rt/a>
sith on-diskspecilas
ment"- a>
spalasnderlying blocks deallocated.
/spa);p 530
/a>
spat class="comment"> */
/spa);p/**ef="+code=truncvment">/**ss="sref">truncate_pagecache
/a>(struct 
a href="+code=inode" class="sref">inode
/a> *
a href="+code=inode" class="sref">inode
/a>, 
a href="+code=loff_t" class="sref">loff_t
/a> 
a href="+code=newsize" class="sref">newsize
/a {o 541
/a))o 443
/aerrort
/a> 
a href="errorldsis="sref">mapping
/a>, 0, -1>;p 544
/ }p 443
/aerrort
/a> 
a href="errorldsing" class="sref">mappin_+code=n_o"+code=wait_on_pappin_+code=n_o"ass="sref">EXPORT_SYMBinode
/a> *
a href="+code=inode" class="sref">loff_t
/a> 
a href="+code=newsizs="sref">mapping
/a>, 0, -10)o               errort
/a> 
a href="errorldsize" class="sref">newsize
/a ;p 520
/a>  errort
/a> 
a href="errorldsis="sref">mapping
/a>, 0, -1>,o 508
/ }p 44 540
/a>vsetmmenef="+code=truncate_pagecsetmmenss="ssref">EXPORT_SYMBinode
/a> *
a href="+code=inode" class="sref">loff_t
/a> 
a href="+code=newsizs="sref">mapping
/a>, 0, -6);pmapping
/a> = 
a href="+code=inode" class="sref">inoo/a> = 
a href="+noo/de=inode" class="sref">ient">/**ef="+code=truncent">/**ss="ze" class="sref">newsize
/6);p 501
/a>   apping
/a> = 
a href="+code=inode" class="sref">inoo/a> = 
a href="+noo/de=inode" class="sref">ient">/**ef="+code=truncent">/**ss="a class="sref">mapping
/a> = 
a href="+code=izs="sref">mapping
/a>, 0, -6)2p 423
/a>                return6+;p 521
/6 }p 522
/a>ref="+code=EXPORT_SYMBOL_GPLs="sref">unmap_mappivment">/**ef="+code=truncvment">/**ss="zs="sref">mapping
/a>, 0, -6)5pmapping
/a>, 0, -6>;p 524
/a>
spat class="comment">/**
/sp6>}p 537
g already be writt"> * inonnt"> * truncate_pagecache - unmai> ode=-palrhecache that has been truncated
/sp6);p 528
/a>
spat class="comment"> * @inode: inode
/sp6a>p 528
/la>
spat"commen   holebn"com   ode=s="comment"> * @inode: inode
/sp6tio 510
@la>
sp"commen    nat bytem   ode=s="comment"> * @inode: inode
/sp6t;p 511s="comment"> * @inode: inode
/sp6t2p 512
/a>
spat class="comment"> * This functoptishould typically be called before the filesystem
/sp6tio 513
/a>
spat class="comment"> * releases resources associated with the freed range (eg. deallocates
/sp6tio 514
/a>
spat class="comment"> * blocks). This way, pagecache will always stay logically coherent
/sp6tio 515
/a>
spat class="comment"> * with on-disk format, and the filesystem would not haveito deal with
/sp6tio 516
/a>
spat class="comment"> * situatopts such as writepage being called for a page that has already
/sp6tio 517
/a>
spat class="comment"> * had its underlying blocks deallocated.
/sp6tio 528
/a>
spat class="comment"> */
/sp6>)o 540
/a>void 
a hr
a href="+code=unmap_ 540
/a>void 
a hr
a hress="sref">truncate_pagecache
/a>(struct 
a href="+code=inode" class="sref">inode
/a> *
a href="+code=inode" class="sref">inode
/a>, 
a href="+code=loff_t" class="srefl="+code=mem_cgroup_ul="+code=start" class="sref">inode
/a>, 
a href="+code=loff_t" class="srefl="+code=mem_cgrouplef="+code=end" class="sref">end
/6>{o 440
/6);p 441
/a>        struct 
a href="+code=address_space" class="sref">address_space
/a> *
a href="+code=mapping" class="sref">mapping
/a> = 
a href="+code=inode" class="sref">inode
/a>->
a href="+code=i_mapping" class="sref">i_mapping
/6>}p 44">inode
/a>, 
a href="+code=loff_t" class="srefmappin="+code=mem_cgroup_umappin="+coapping" class="sref">mebegin
/a> = 
a href="+code=round_up" class="sref">l="+code=mem_cgroup_ul="+code=start" class="srefnewsize
/a>, 
a href="+code=PAGE_SIZE" class="sref">PAGE_SIZE
/a6);p 543
/a>        
a href="+code=loff_t" class="srefmappin="+code=mem_cgroupmappin="+apping" class="sref">mebegindow
/a> 
a href="+cebegindow
nd_upt" class="sref">lofl="+code=mem_cgrouplef="+cotart" class="srefnewsize
/a>, 
a href="+code=PAGE_SIZE"lass class="sref">PAGE_SIZE
/a6)io 545
/a>        
spat class="comment">/*
/sp6tio 52222222222
/a>
sebegi"com    url alchej> * h asexa" cl:t class="comment">      
spat class="comment">/*
/sp6tio 52222222222
exlinds
spatode= outwards * pll comm blantuncae f    raluL * wode=s="comment"> * @inode: inode
/sp6tio 52222222222
inwards        * ,
existuatopts srs      already be writt"> * inar=s="comment"> * @inode: inode
/sp6tio 52222222222
douato * ir ow
writepebegi"comunmap;ent"> a>
spat omment">   nt">      
spat class="comment">/*
/sp6t)o 52222222222
 url alcheBUGs namlef=m   t, a">  aligned-1 (i beindnd tp+coiat/a>
spat class="comment">/**
/sp6tio 53222222222
ritepe b="sre-   ode=, but t, a">coiat
ritepe bef=m   ode=at  Not     
spat class="comment">/*
/sp6tio 53222222222
 class="comment">   had watode=lef 0ch as  Howevemm bhad wmlef=m-1nderlying blocks deallocated.
/sp6tio 53222222222
/a>
spat class="comment"> */
/sp6tio 523
6tio 545
/a>        
spat class="comment">/*
/sp6tio 53222222222
Unlik   *   already be writt,t class="comment">         * unonld for a page that has already
/sp6tio 53222222222
oe"t (bclass="commenrely upowritt)owevemmtemout "  *n_c wa" flag: for a page that has already
/sp6tio 53222222222
ode=-palrhrely="commet, ancate_paclass="     te_inode_pag * wode=nderlying blocks deallocated.
/sp6tio 53222222222
/a>
spat class="comment"> */
/sp6t)ou="mm/truncacgroupm6classf_t" class="srefmappin="+code=mem_cgroupmappin="+appindex" p" class="sref">u="mm/truncacgroupm6classf_t" class="srefmappin="+code=mem_cgroup_umappin="+coappide=end" class="sref">end
/6tio 500
/a>                
a href="+code=unmap_mapping_range" class="sref">unmap_mapping_range
/a>(
a href="+code=mappinf_t" class="srefmappin="+code=mem_cgroup_umappin="+coappi="sref">PAGE_CACHE_SHIFT
/6>)o 481
/a>        t" class="sref">lofmappin="+code=mem_cgroupmappin="+appine=end" class="sremappin="+code=mem_cgroup_umappin="+coappi=="sref">PAGE_CACHE_SIZE
/a>, 6>{o 44 a>
spat omment">   nt">  f="+code=unmap_ 540
/a>vomment">   nt">    "sref">unmap_mapping_range
/a>(
a href="+code=mappinf_t" class="srefl="+code=mem_cgroup_ul="+code=start" class="sref"="+code=mem_cgrouplef="+codref">PAGE_CACHE_SIZE
/a>, 6>io 521
/6);p 522
/a>ref="+code=EXPORT_SYMBOL_GPLs="sref">unmap_mappi 540
/a>void 
a hr
a href="+code=unmap_ 540
/a>void 
a hr
a hress="dref">PAGE_CACHE_SIZE
/a>, 6>io


Thnt piginat LXR software by /hntf">PAGE_Chttp://ass="clasge.net/projects/lxr">LXR uL53unityde=stapage exleri38">at * slassby f">PAGE_CAailto:lxr@te.ux.nouplxr@te.ux.node=s.
lxr.te.ux.no kindnywods* reby f">PAGE_Chttp://www.redpill-te.pro.noupRedpill Le.pro ASde=staproviderm Le.uxf sulnrelyevemolerspat claervi"comsie"t 1995.