linux/mm/truncate.c
<<
>>
Prefs
   1/*
   2 * mm/truncate.c - code for taking down pages from address_spaces
   3 *
   4 * Copyright (C) 2002, Linus Torvalds
   5 *
   6 * 10Sep2002    akpm@zip.com.au
   7 *              Initial version.
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/backing-dev.h>
  12#include <linux/mm.h>
  13#include <linux/swap.h>
  14#include <linux/module.h>
  15#include <linux/pagemap.h>
  16#include <linux/highmem.h>
  17#include <linux/pagevec.h>
  18#include <linux/task_io_accounting_ops.h>
  19#include <linux/buffer_head.h>  /* grr. try_to_release_page,
  20                                   do_invalidatepage */
  21
  22
  23/**
  24 * do_invalidatepage - invalidate part or all of a page
  25 * @page: the page which is affected
  26 * @offset: the index of the truncation point
  27 *
  28 * do_invalidatepage() is called when all or part of the page has become
  29 * invalidated by a truncate operation.
  30 *
  31 * do_invalidatepage() does not have to release all buffers, but it must
  32 * ensure that no dirty buffer is left outside @offset and that no I/O
  33 * is underway against any of the blocks which are outside the truncation
  34 * point.  Because the caller is about to free (and possibly reuse) those
  35 * blocks on-disk.
  36 */
  37void do_invalidatepage(struct page *page, unsigned long offset)
  38{
  39        void (*invalidatepage)(struct page *, unsigned long);
  40        invalidatepage = page->mapping->a_ops->invalidatepage;
  41#ifdef CONFIG_BLOCK
  42        if (!invalidatepage)
  43                invalidatepage = block_invalidatepage;
  44#endif
  45        if (invalidatepage)
  46                (*invalidatepage)(page, offset);
  47}
  48
  49static inline void truncate_partial_page(struct page *page, unsigned partial)
  50{
  51        zero_user_segment(page, partial, PAGE_CACHE_SIZE);
  52        if (PagePrivate(page))
  53                do_invalidatepage(page, partial);
  54}
  55
  56/*
  57 * This cancels just the dirty bit on the kernel page itself, it
  58 * does NOT actually remove dirty bits on any mmap's that may be
  59 * around. It also leaves the page tagged dirty, so any sync
  60 * activity will still find it on the dirty lists, and in particular,
  61 * clear_page_dirty_for_io() will still look at the dirty bits in
  62 * the VM.
  63 *
  64 * Doing this should *normally* only ever be done when a page
  65 * is truncated, and is not actually mapped anywhere at all. However,
  66 * fs/buffer.c does this when it notices that somebody has cleaned
  67 * out all the buffers on a page without actually doing it through
  68 * the VM. Can you say "ext3 is horribly ugly"? Tought you could.
  69 */
  70void cancel_dirty_page(struct page *page, unsigned int account_size)
  71{
  72        if (TestClearPageDirty(page)) {
  73                struct address_space *mapping = page->mapping;
  74                if (mapping && mapping_cap_account_dirty(mapping)) {
  75                        dec_zone_page_state(page, NR_FILE_DIRTY);
  76                        dec_bdi_stat(mapping->backing_dev_info,
  77                                        BDI_RECLAIMABLE);
  78                        if (account_size)
  79                                task_io_account_cancelled_write(account_size);
  80                }
  81        }
  82}
  83EXPORT_SYMBOL(cancel_dirty_page);
  84
  85/*
  86 * If truncate cannot remove the fs-private metadata from the page, the page
  87 * becomes orphaned.  It will be left on the LRU and may even be mapped into
  88 * user pagetables if we're racing with filemap_fault().
  89 *
  90 * We need to bale out if page->mapping is no longer equal to the original
  91 * mapping.  This happens a) when the VM reclaimed the page while we waited on
  92 * its lock, b) when a concurrent invalidate_mapping_pages got there first and
  93 * c) when tmpfs swizzles a page between a tmpfs inode and swapper_space.
  94 */
  95static void
  96truncate_complete_page(struct address_space *mapping, struct page *page)
  97{
  98        if (page->mapping != mapping)
  99                return;
 100
 101        if (PagePrivate(page))
 102                do_invalidatepage(page, 0);
 103
 104        cancel_dirty_page(page, PAGE_CACHE_SIZE);
 105
 106        remove_from_page_cache(page);
 107        ClearPageUptodate(page);
 108        ClearPageMappedToDisk(page);
 109        page_cache_release(page);       /* pagecache ref */
 110}
 111
 112/*
 113 * This is for invalidate_mapping_pages().  That function can be called at
 114 * any time, and is not supposed to throw away dirty pages.  But pages can
 115 * be marked dirty at any time too, so use remove_mapping which safely
 116 * discards clean, unused pages.
 117 *
 118 * Returns non-zero if the page was successfully invalidated.
 119 */
 120static int
 121invalidate_complete_page(struct address_space *mapping, struct page *page)
 122{
 123        int ret;
 124
 125        if (page->mapping != mapping)
 126                return 0;
 127
 128        if (PagePrivate(page) && !try_to_release_page(page, 0))
 129                return 0;
 130
 131        ret = remove_mapping(mapping, page);
 132
 133        return ret;
 134}
 135
 136/**
 137 * truncate_inode_pages - truncate range of pages specified by start & end byte offsets
 138 * @mapping: mapping to truncate
 139 * @lstart: offset from which to truncate
 140 * @lend: offset to which to truncate
 141 *
 142 * Truncate the page cache, removing the pages that are between
 143 * specified offsets (and zeroing out partial page
 144 * (if lstart is not page aligned)).
 145 *
 146 * Truncate takes two passes - the first pass is nonblocking.  It will not
 147 * block on page locks and it will not block on writeback.  The second pass
 148 * will wait.  This is to prevent as much IO as possible in the affected region.
 149 * The first pass will remove most pages, so the search cost of the second pass
 150 * is low.
 151 *
 152 * When looking at page->index outside the page lock we need to be careful to
 153 * copy it into a local to avoid races (it could change at any time).
 154 *
 155 * We pass down the cache-hot hint to the page freeing code.  Even if the
 156 * mapping is large, it is probably the case that the final pages are the most
 157 * recently touched, and freeing happens in ascending file offset order.
 158 */
 159void truncate_inode_pages_range(struct address_space *mapping,
 160                                loff_t lstart, loff_t lend)
 161{
 162        const pgoff_t start = (lstart + PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT;
 163        pgoff_t end;
 164        const unsigned partial = lstart & (PAGE_CACHE_SIZE - 1);
 165        struct pagevec pvec;
 166        pgoff_t next;
 167        int i;
 168
 169        if (mapping->nrpages == 0)
 170                return;
 171
 172        BUG_ON((lend & (PAGE_CACHE_SIZE - 1)) != (PAGE_CACHE_SIZE - 1));
 173        end = (lend >> PAGE_CACHE_SHIFT);
 174
 175        pagevec_init(&pvec, 0);
 176        next = start;
 177        while (next <= end &&
 178               pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) {
 179                for (i = 0; i < pagevec_count(&pvec); i++) {
 180                        struct page *page = pvec.pages[i];
 181                        pgoff_t page_index = page->index;
 182
 183                        if (page_index > end) {
 184                                next = page_index;
 185                                break;
 186                        }
 187
 188                        if (page_index > next)
 189                                next = page_index;
 190                        next++;
 191                        if (TestSetPageLocked(page))
 192                                continue;
 193                        if (PageWriteback(page)) {
 194                                unlock_page(page);
 195                                continue;
 196                        }
 197                        if (page_mapped(page)) {
 198                                unmap_mapping_range(mapping,
 199                                  (loff_t)page_index<<PAGE_CACHE_SHIFT,
 200                                  PAGE_CACHE_SIZE, 0);
 201                        }
 202                        truncate_complete_page(mapping, page);
 203                        unlock_page(page);
 204                }
 205                pagevec_release(&pvec);
 206                cond_resched();
 207        }
 208
 209        if (partial) {
 210                struct page *page = find_lock_page(mapping, start - 1);
 211                if (page) {
 212                        wait_on_page_writeback(page);
 213                        truncate_partial_page(page, partial);
 214                        unlock_page(page);
 215                        page_cache_release(page);
 216                }
 217        }
 218
 219        next = start;
 220        for ( ; ; ) {
 221                cond_resched();
 222                if (!pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) {
 223                        if (next == start)
 224                                break;
 225                        next = start;
 226                        continue;
 227                }
 228                if (pvec.pages[0]->index > end) {
 229                        pagevec_release(&pvec);
 230                        break;
 231                }
 232                for (i = 0; i < pagevec_count(&pvec); i++) {
 233                        struct page *page = pvec.pages[i];
 234
 235                        if (page->index > end)
 236                                break;
 237                        lock_page(page);
 238                        wait_on_page_writeback(page);
 239                        if (page_mapped(page)) {
 240                                unmap_mapping_range(mapping,
 241                                  (loff_t)page->index<<PAGE_CACHE_SHIFT,
 242                                  PAGE_CACHE_SIZE, 0);
 243                        }
 244                        if (page->index > next)
 245                                next = page->index;
 246                        next++;
 247                        truncate_complete_page(mapping, page);
 248                        unlock_page(page);
 249                }
 250                pagevec_release(&pvec);
 251        }
 252}
 253EXPORT_SYMBOL(truncate_inode_pages_range);
 254
 255/**
 256 * truncate_inode_pages - truncate *all* the pages from an offset
 257 * @mapping: mapping to truncate
 258 * @lstart: offset from which to truncate
 259 *
 260 * Called under (and serialised by) inode->i_mutex.
 261 */
 262void truncate_inode_pages(struct address_space *mapping, loff_t lstart)
 263{
 264        truncate_inode_pages_range(mapping, lstart, (loff_t)-1);
 265}
 266EXPORT_SYMBOL(truncate_inode_pages);
 267
 268unsigned long __invalidate_mapping_pages(struct address_space *mapping,
 269                                pgoff_t start, pgoff_t end, bool be_atomic)
 270{
 271        struct pagevec pvec;
 272        pgoff_t next = start;
 273        unsigned long ret = 0;
 274        int i;
 275
 276        pagevec_init(&pvec, 0);
 277        while (next <= end &&
 278                        pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) {
 279                for (i = 0; i < pagevec_count(&pvec); i++) {
 280                        struct page *page = pvec.pages[i];
 281                        pgoff_t index;
 282                        int lock_failed;
 283
 284                        lock_failed = TestSetPageLocked(page);
 285
 286                        /*
 287                         * We really shouldn't be looking at the ->index of an
 288                         * unlocked page.  But we're not allowed to lock these
 289                         * pages.  So we rely upon nobody altering the ->index
 290                         * of this (pinned-by-us) page.
 291                         */
 292                        index = page->index;
 293                        if (index > next)
 294                                next = index;
 295                        next++;
 296                        if (lock_failed)
 297                                continue;
 298
 299                        if (PageDirty(page) || PageWriteback(page))
 300                                goto unlock;
 301                        if (page_mapped(page))
 302                                goto unlock;
 303                        ret += invalidate_complete_page(mapping, page);
 304unlock:
 305                        unlock_page(page);
 306                        if (next > end)
 307                                break;
 308                }
 309                pagevec_release(&pvec);
 310                if (likely(!be_atomic))
 311                        cond_resched();
 312        }
 313        return ret;
 314}
 315
 316/**
 317 * invalidate_mapping_pages - Invalidate all the unlocked pages of one inode
 318 * @mapping: the address_space which holds the pages to invalidate
 319 * @start: the offset 'from' which to invalidate
 320 * @end: the offset 'to' which to invalidate (inclusive)
 321 *
 322 * This function only removes the unlocked pages, if you want to
 323 * remove all the pages of one inode, you must call truncate_inode_pages.
 324 *
 325 * invalidate_mapping_pages() will not block on IO activity. It will not
 326 * invalidate pages which are dirty, locked, under writeback or mapped into
 327 * pagetables.
 328 */
 329unsigned long invalidate_mapping_pages(struct address_space *mapping,
 330                                pgoff_t start, pgoff_t end)
 331{
 332        return __invalidate_mapping_pages(mapping, start, end, false);
 333}
 334EXPORT_SYMBOL(invalidate_mapping_pages);
 335
 336/*
 337 * This is like invalidate_complete_page(), except it ignores the page's
 338 * refcount.  We do this because invalidate_inode_pages2() needs stronger
 339 * invalidation guarantees, and cannot afford to leave pages behind because
 340 * shrink_page_list() has a temp ref on them, or because they're transiently
 341 * sitting in the lru_cache_add() pagevecs.
 342 */
 343static int
 344invalidate_complete_page2(struct address_space *mapping, struct page *page)
 345{
 346        if (page->mapping != mapping)
 347                return 0;
 348
 349        if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL))
 350                return 0;
 351
 352        write_lock_irq(&mapping->tree_lock);
 353        if (PageDirty(page))
 354                goto failed;
 355
 356        BUG_ON(PagePrivate(page));
 357        __remove_from_page_cache(page);
 358        write_unlock_irq(&mapping->tree_lock);
 359        ClearPageUptodate(page);
 360        page_cache_release(page);       /* pagecache ref */
 361        return 1;
 362failed:
 363        write_unlock_irq(&mapping->tree_lock);
 364        return 0;
 365}
 366
 367static int do_launder_page(struct address_space *mapping, struct page *page)
 368{
 369        if (!PageDirty(page))
 370                return 0;
 371        if (page->mapping != mapping || mapping->a_ops->launder_page == NULL)
 372                return 0;
 373        return mapping->a_ops->launder_page(page);
 374}
 375
 376/**
 377 * invalidate_inode_pages2_range - remove range of pages from an address_space
 378 * @mapping: the address_space
 379 * @start: the page offset 'from' which to invalidate
 380 * @end: the page offset 'to' which to invalidate (inclusive)
 381 *
 382 * Any pages which are found to be mapped into pagetables are unmapped prior to
 383 * invalidation.
 384 *
 385 * Returns -EIO if any pages could not be invalidated.
 386 */
 387int invalidate_inode_pages2_range(struct address_space *mapping,
 388                                  pgoff_t start, pgoff_t end)
 389{
 390        struct pagevec pvec;
 391        pgoff_t next;
 392        int i;
 393        int ret = 0;
 394        int ret2 = 0;
 395        int did_range_unmap = 0;
 396        int wrapped = 0;
 397
 398        pagevec_init(&pvec, 0);
 399        next = start;
 400        while (next <= end && !wrapped &&
 401                pagevec_lookup(&pvec, mapping, next,
 402                        min(end - next, (pgoff_t)PAGEVEC_SIZE - 1) + 1)) {
 403                for (i = 0; i < pagevec_count(&pvec); i++) {
 404                        struct page *page = pvec.pages[i];
 405                        pgoff_t page_index;
 406
 407                        lock_page(page);
 408                        if (page->mapping != mapping) {
 409                                unlock_page(page);
 410                                continue;
 411                        }
 412                        page_index = page->index;
 413                        next = page_index + 1;
 414                        if (next == 0)
 415                                wrapped = 1;
 416                        if (page_index > end) {
 417                                unlock_page(page);
 418                                break;
 419                        }
 420                        wait_on_page_writeback(page);
 421                        if (page_mapped(page)) {
 422                                if (!did_range_unmap) {
 423                                        /*
 424                                         * Zap the rest of the file in one hit.
 425                                         */
 426                                        unmap_mapping_range(mapping,
 427                                           (loff_t)page_index<<PAGE_CACHE_SHIFT,
 428                                           (loff_t)(end - page_index + 1)
 429                                                        << PAGE_CACHE_SHIFT,
 430                                            0);
 431                                        did_range_unmap = 1;
 432                                } else {
 433                                        /*
 434                                         * Just zap this page
 435                                         */
 436                                        unmap_mapping_range(mapping,
 437                                          (loff_t)page_index<<PAGE_CACHE_SHIFT,
 438                                          PAGE_CACHE_SIZE, 0);
 439                                }
 440                        }
 441                        BUG_ON(page_mapped(page));
 442                        ret2 = do_launder_page(mapping, page);
 443                        if (ret2 == 0) {
 444                                if (!invalidate_complete_page2(mapping, page))
 445                                        ret2 = -EIO;
 446                        }
 447                        if (ret2 < 0)
 448                                ret = ret2;
 449                        unlock_page(page);
 450                }
 451                pagevec_release(&pvec);
 452                cond_resched();
 453        }
 454        return ret;
 455}
 456EXPORT_SYMBOL_GPL(invalidate_inode_pages2_range);
 457
 458/**
 459 * invalidate_inode_pages2 - remove all pages from an address_space
 460 * @mapping: the address_space
 461 *
 462 * Any pages which are found to be mapped into pagetables are unmapped prior to
 463 * invalidation.
 464 *
 465 * Returns -EIO if any pages could not be invalidated.
 466 */
 467int invalidate_inode_pages2(struct address_space *mapping)
 468{
 469        return invalidate_inode_pages2_range(mapping, 0, -1);
 470}
 471EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
 472