extent_map.c (bcd987feefe8da66bc59b4e6bd51761a9820588c) | extent_map.c (55c69072d6bd5be170a85467f64a20963cddf490) |
---|---|
1#include <linux/bitops.h> 2#include <linux/slab.h> 3#include <linux/bio.h> 4#include <linux/mm.h> 5#include <linux/gfp.h> 6#include <linux/pagemap.h> 7#include <linux/page-flags.h> 8#include <linux/module.h> --- 1649 unchanged lines hidden (view full) --- 1658 if (!PagePrivate(page)) { 1659 SetPagePrivate(page); 1660 WARN_ON(!page->mapping->a_ops->invalidatepage); 1661 set_page_private(page, EXTENT_PAGE_PRIVATE); 1662 page_cache_get(page); 1663 } 1664} 1665 | 1#include <linux/bitops.h> 2#include <linux/slab.h> 3#include <linux/bio.h> 4#include <linux/mm.h> 5#include <linux/gfp.h> 6#include <linux/pagemap.h> 7#include <linux/page-flags.h> 8#include <linux/module.h> --- 1649 unchanged lines hidden (view full) --- 1658 if (!PagePrivate(page)) { 1659 SetPagePrivate(page); 1660 WARN_ON(!page->mapping->a_ops->invalidatepage); 1661 set_page_private(page, EXTENT_PAGE_PRIVATE); 1662 page_cache_get(page); 1663 } 1664} 1665 |
1666void set_page_extent_head(struct page *page, unsigned long len) 1667{ 1668 WARN_ON(page->private && page->private == EXTENT_PAGE_PRIVATE && 1669 PageDirty(page)); 1670 set_page_private(page, EXTENT_PAGE_PRIVATE_FIRST_PAGE | len << 2); 1671} 1672 |
|
1666/* 1667 * basic readpage implementation. Locked extent state structs are inserted 1668 * into the tree that are removed when the IO is done (by the end_io 1669 * handlers) 1670 */ 1671static int __extent_read_full_page(struct extent_map_tree *tree, 1672 struct page *page, 1673 get_extent_t *get_extent, --- 811 unchanged lines hidden (view full) --- 2485 if (page0) { 2486 eb->first_page = page0; 2487 i = 1; 2488 index++; 2489 page_cache_get(page0); 2490 mark_page_accessed(page0); 2491 set_page_extent_mapped(page0); 2492 WARN_ON(!PageUptodate(page0)); | 1673/* 1674 * basic readpage implementation. Locked extent state structs are inserted 1675 * into the tree that are removed when the IO is done (by the end_io 1676 * handlers) 1677 */ 1678static int __extent_read_full_page(struct extent_map_tree *tree, 1679 struct page *page, 1680 get_extent_t *get_extent, --- 811 unchanged lines hidden (view full) --- 2492 if (page0) { 2493 eb->first_page = page0; 2494 i = 1; 2495 index++; 2496 page_cache_get(page0); 2497 mark_page_accessed(page0); 2498 set_page_extent_mapped(page0); 2499 WARN_ON(!PageUptodate(page0)); |
2493 set_page_private(page0, EXTENT_PAGE_PRIVATE_FIRST_PAGE | 2494 len << 2); | 2500 set_page_extent_head(page0, len); |
2495 } else { 2496 i = 0; 2497 } 2498 for (; i < num_pages; i++, index++) { 2499 p = find_or_create_page(mapping, index, mask | __GFP_HIGHMEM); 2500 if (!p) { 2501 WARN_ON(1); 2502 goto fail; 2503 } 2504 set_page_extent_mapped(p); 2505 mark_page_accessed(p); 2506 if (i == 0) { 2507 eb->first_page = p; | 2501 } else { 2502 i = 0; 2503 } 2504 for (; i < num_pages; i++, index++) { 2505 p = find_or_create_page(mapping, index, mask | __GFP_HIGHMEM); 2506 if (!p) { 2507 WARN_ON(1); 2508 goto fail; 2509 } 2510 set_page_extent_mapped(p); 2511 mark_page_accessed(p); 2512 if (i == 0) { 2513 eb->first_page = p; |
2508 set_page_private(p, EXTENT_PAGE_PRIVATE_FIRST_PAGE | 2509 len << 2); | 2514 set_page_extent_head(p, len); |
2510 } else { 2511 set_page_private(p, EXTENT_PAGE_PRIVATE); 2512 } 2513 if (!PageUptodate(p)) 2514 uptodate = 0; 2515 unlock_page(p); 2516 } 2517 if (uptodate) --- 46 unchanged lines hidden (view full) --- 2564 if (!p) { 2565 goto fail; 2566 } 2567 set_page_extent_mapped(p); 2568 mark_page_accessed(p); 2569 2570 if (i == 0) { 2571 eb->first_page = p; | 2515 } else { 2516 set_page_private(p, EXTENT_PAGE_PRIVATE); 2517 } 2518 if (!PageUptodate(p)) 2519 uptodate = 0; 2520 unlock_page(p); 2521 } 2522 if (uptodate) --- 46 unchanged lines hidden (view full) --- 2569 if (!p) { 2570 goto fail; 2571 } 2572 set_page_extent_mapped(p); 2573 mark_page_accessed(p); 2574 2575 if (i == 0) { 2576 eb->first_page = p; |
2572 set_page_private(p, EXTENT_PAGE_PRIVATE_FIRST_PAGE | 2573 len << 2); | 2577 set_page_extent_head(p, len); |
2574 } else { 2575 set_page_private(p, EXTENT_PAGE_PRIVATE); 2576 } 2577 2578 if (!PageUptodate(p)) 2579 uptodate = 0; 2580 unlock_page(p); 2581 } --- 56 unchanged lines hidden (view full) --- 2638 u64 end = start + eb->len - 1; 2639 2640 set = clear_extent_dirty(tree, start, end, GFP_NOFS); 2641 num_pages = num_extent_pages(eb->start, eb->len); 2642 2643 for (i = 0; i < num_pages; i++) { 2644 page = extent_buffer_page(eb, i); 2645 lock_page(page); | 2578 } else { 2579 set_page_private(p, EXTENT_PAGE_PRIVATE); 2580 } 2581 2582 if (!PageUptodate(p)) 2583 uptodate = 0; 2584 unlock_page(p); 2585 } --- 56 unchanged lines hidden (view full) --- 2642 u64 end = start + eb->len - 1; 2643 2644 set = clear_extent_dirty(tree, start, end, GFP_NOFS); 2645 num_pages = num_extent_pages(eb->start, eb->len); 2646 2647 for (i = 0; i < num_pages; i++) { 2648 page = extent_buffer_page(eb, i); 2649 lock_page(page); |
2650 if (i == 0) 2651 set_page_extent_head(page, eb->len); 2652 else 2653 set_page_private(page, EXTENT_PAGE_PRIVATE); 2654 |
|
2646 /* 2647 * if we're on the last page or the first page and the 2648 * block isn't aligned on a page boundary, do extra checks 2649 * to make sure we don't clean page that is partially dirty 2650 */ 2651 if ((i == 0 && (eb->start & (PAGE_CACHE_SIZE - 1))) || 2652 ((i == num_pages - 1) && 2653 ((eb->start + eb->len) & (PAGE_CACHE_SIZE - 1)))) { --- 38 unchanged lines hidden (view full) --- 2692 struct page *page = extent_buffer_page(eb, i); 2693 /* writepage may need to do something special for the 2694 * first page, we have to make sure page->private is 2695 * properly set. releasepage may drop page->private 2696 * on us if the page isn't already dirty. 2697 */ 2698 if (i == 0) { 2699 lock_page(page); | 2655 /* 2656 * if we're on the last page or the first page and the 2657 * block isn't aligned on a page boundary, do extra checks 2658 * to make sure we don't clean page that is partially dirty 2659 */ 2660 if ((i == 0 && (eb->start & (PAGE_CACHE_SIZE - 1))) || 2661 ((i == num_pages - 1) && 2662 ((eb->start + eb->len) & (PAGE_CACHE_SIZE - 1)))) { --- 38 unchanged lines hidden (view full) --- 2701 struct page *page = extent_buffer_page(eb, i); 2702 /* writepage may need to do something special for the 2703 * first page, we have to make sure page->private is 2704 * properly set. releasepage may drop page->private 2705 * on us if the page isn't already dirty. 2706 */ 2707 if (i == 0) { 2708 lock_page(page); |
2700 set_page_private(page, 2701 EXTENT_PAGE_PRIVATE_FIRST_PAGE | 2702 eb->len << 2); | 2709 set_page_extent_head(page, eb->len); 2710 } else if (PagePrivate(page) && 2711 page->private != EXTENT_PAGE_PRIVATE) { 2712 lock_page(page); 2713 set_page_extent_mapped(page); 2714 unlock_page(page); |
2703 } 2704 __set_page_dirty_nobuffers(extent_buffer_page(eb, i)); 2705 if (i == 0) 2706 unlock_page(page); 2707 } 2708 return set_extent_dirty(tree, eb->start, 2709 eb->start + eb->len - 1, GFP_NOFS); 2710} --- 483 unchanged lines hidden --- | 2715 } 2716 __set_page_dirty_nobuffers(extent_buffer_page(eb, i)); 2717 if (i == 0) 2718 unlock_page(page); 2719 } 2720 return set_extent_dirty(tree, eb->start, 2721 eb->start + eb->len - 1, GFP_NOFS); 2722} --- 483 unchanged lines hidden --- |