diff options
| author | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:37:12 -0500 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:37:12 -0500 |
| commit | 23fd07750a789a66fe88cf173d52a18f1a387da4 (patch) | |
| tree | 06fdd6df35fdb835abdaa9b754d62f6b84b97250 /fs/buffer.c | |
| parent | bd787d438a59266af3c9f6351644c85ef1dd21fe (diff) | |
| parent | ed28f96ac1960f30f818374d65be71d2fdf811b0 (diff) | |
Merge ../linux-2.6 by hand
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 1216c0d3c8ce..35fa34977e81 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
| @@ -96,7 +96,7 @@ static void | |||
| 96 | __clear_page_buffers(struct page *page) | 96 | __clear_page_buffers(struct page *page) |
| 97 | { | 97 | { |
| 98 | ClearPagePrivate(page); | 98 | ClearPagePrivate(page); |
| 99 | page->private = 0; | 99 | set_page_private(page, 0); |
| 100 | page_cache_release(page); | 100 | page_cache_release(page); |
| 101 | } | 101 | } |
| 102 | 102 | ||
| @@ -502,7 +502,7 @@ static void free_more_memory(void) | |||
| 502 | yield(); | 502 | yield(); |
| 503 | 503 | ||
| 504 | for_each_pgdat(pgdat) { | 504 | for_each_pgdat(pgdat) { |
| 505 | zones = pgdat->node_zonelists[GFP_NOFS&GFP_ZONEMASK].zones; | 505 | zones = pgdat->node_zonelists[gfp_zone(GFP_NOFS)].zones; |
| 506 | if (*zones) | 506 | if (*zones) |
| 507 | try_to_free_pages(zones, GFP_NOFS); | 507 | try_to_free_pages(zones, GFP_NOFS); |
| 508 | } | 508 | } |
| @@ -1478,8 +1478,10 @@ EXPORT_SYMBOL(__getblk); | |||
| 1478 | void __breadahead(struct block_device *bdev, sector_t block, int size) | 1478 | void __breadahead(struct block_device *bdev, sector_t block, int size) |
| 1479 | { | 1479 | { |
| 1480 | struct buffer_head *bh = __getblk(bdev, block, size); | 1480 | struct buffer_head *bh = __getblk(bdev, block, size); |
| 1481 | ll_rw_block(READA, 1, &bh); | 1481 | if (likely(bh)) { |
| 1482 | brelse(bh); | 1482 | ll_rw_block(READA, 1, &bh); |
| 1483 | brelse(bh); | ||
| 1484 | } | ||
| 1483 | } | 1485 | } |
| 1484 | EXPORT_SYMBOL(__breadahead); | 1486 | EXPORT_SYMBOL(__breadahead); |
| 1485 | 1487 | ||
| @@ -1497,7 +1499,7 @@ __bread(struct block_device *bdev, sector_t block, int size) | |||
| 1497 | { | 1499 | { |
| 1498 | struct buffer_head *bh = __getblk(bdev, block, size); | 1500 | struct buffer_head *bh = __getblk(bdev, block, size); |
| 1499 | 1501 | ||
| 1500 | if (!buffer_uptodate(bh)) | 1502 | if (likely(bh) && !buffer_uptodate(bh)) |
| 1501 | bh = __bread_slow(bh); | 1503 | bh = __bread_slow(bh); |
| 1502 | return bh; | 1504 | return bh; |
| 1503 | } | 1505 | } |
| @@ -1571,7 +1573,7 @@ static inline void discard_buffer(struct buffer_head * bh) | |||
| 1571 | * | 1573 | * |
| 1572 | * NOTE: @gfp_mask may go away, and this function may become non-blocking. | 1574 | * NOTE: @gfp_mask may go away, and this function may become non-blocking. |
| 1573 | */ | 1575 | */ |
| 1574 | int try_to_release_page(struct page *page, int gfp_mask) | 1576 | int try_to_release_page(struct page *page, gfp_t gfp_mask) |
| 1575 | { | 1577 | { |
| 1576 | struct address_space * const mapping = page->mapping; | 1578 | struct address_space * const mapping = page->mapping; |
| 1577 | 1579 | ||
| @@ -1637,6 +1639,15 @@ out: | |||
| 1637 | } | 1639 | } |
| 1638 | EXPORT_SYMBOL(block_invalidatepage); | 1640 | EXPORT_SYMBOL(block_invalidatepage); |
| 1639 | 1641 | ||
| 1642 | int do_invalidatepage(struct page *page, unsigned long offset) | ||
| 1643 | { | ||
| 1644 | int (*invalidatepage)(struct page *, unsigned long); | ||
| 1645 | invalidatepage = page->mapping->a_ops->invalidatepage; | ||
| 1646 | if (invalidatepage == NULL) | ||
| 1647 | invalidatepage = block_invalidatepage; | ||
| 1648 | return (*invalidatepage)(page, offset); | ||
| 1649 | } | ||
| 1650 | |||
| 1640 | /* | 1651 | /* |
| 1641 | * We attach and possibly dirty the buffers atomically wrt | 1652 | * We attach and possibly dirty the buffers atomically wrt |
| 1642 | * __set_page_dirty_buffers() via private_lock. try_to_free_buffers | 1653 | * __set_page_dirty_buffers() via private_lock. try_to_free_buffers |
| @@ -2696,7 +2707,7 @@ int block_write_full_page(struct page *page, get_block_t *get_block, | |||
| 2696 | * they may have been added in ext3_writepage(). Make them | 2707 | * they may have been added in ext3_writepage(). Make them |
| 2697 | * freeable here, so the page does not leak. | 2708 | * freeable here, so the page does not leak. |
| 2698 | */ | 2709 | */ |
| 2699 | block_invalidatepage(page, 0); | 2710 | do_invalidatepage(page, 0); |
| 2700 | unlock_page(page); | 2711 | unlock_page(page); |
| 2701 | return 0; /* don't care */ | 2712 | return 0; /* don't care */ |
| 2702 | } | 2713 | } |
