diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2002-04-16 21:03:42 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-04-16 21:03:42 -0700 |
| commit | 485dc02f769730522e69d710db12aaf1169ee907 (patch) | |
| tree | 95e91c54ff6303143e44705c5e85d045a7b9f203 | |
| parent | 91813920c82529b777b0feeff065bfc8d47a8783 (diff) | |
| parent | 0ec6ef22403a1b8bfa4e726c15060d469e6fb548 (diff) | |
Automerge
| -rw-r--r-- | fs/jfs/jfs_metapage.c | 50 | ||||
| -rw-r--r-- | kernel/ksyms.c | 1 |
2 files changed, 7 insertions, 44 deletions
diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 9e21031fcbfc..31ed1c238af1 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -91,32 +91,6 @@ static inline void lock_metapage(struct metapage *mp) __lock_metapage(mp); } -/* We're currently re-evaluating the method we use to write metadata - * pages. Currently, we have to make sure there no dirty buffer_heads - * hanging around after we free the metadata page, since the same - * physical disk blocks may be used in a different address space and we - * can't write old data over the good data. - * - * The best way to do this now is with block_invalidate_page. However, - * this is only available in the newer kernels and is not exported - * to modules. block_flushpage is the next best, but it too is not exported - * to modules. - * - * In a module, about the best we have is generic_buffer_fdatasync. This - * synchronously writes any dirty buffers. This is not optimal, but it will - * keep old dirty buffers from overwriting newer data. - */ -static inline void invalidate_page(metapage_t *mp) -{ -#ifdef MODULE - generic_buffer_fdatasync(mp->mapping->host, mp->index, mp->index + 1); -#else - lock_page(mp->page); - block_flushpage(mp->page, 0); - UnlockPage(mp->page); -#endif -} - int __init metapage_init(void) { int i; @@ -559,8 +533,11 @@ void release_metapage(metapage_t * mp) clear_bit(META_sync, &mp->flag); } - if (test_bit(META_discard, &mp->flag)) - invalidate_page(mp); + if (test_bit(META_discard, &mp->flag)) { + lock_page(mp->page); + block_flushpage(mp->page, 0); + UnlockPage(mp->page); + } page_cache_release(mp->page); INCREMENT(mpStat.pagefree); @@ -593,9 +570,7 @@ void invalidate_metapages(struct inode *ip, unsigned long addr, int l2BlocksPerPage = PAGE_CACHE_SHIFT - ip->i_sb->s_blocksize_bits; struct address_space *mapping = ip->i_mapping; metapage_t *mp; -#ifndef MODULE struct page *page; -#endif /* * First, mark metapages to discard. They will eventually be @@ -612,27 +587,14 @@ void invalidate_metapages(struct inode *ip, unsigned long addr, /* * If in the metapage cache, we've got the page locked */ -#ifdef MODULE - UnlockPage(mp->page); - generic_buffer_fdatasync(mp->mapping->host, mp->index, - mp->index+1); - lock_page(mp->page); -#else block_flushpage(mp->page, 0); -#endif } else { spin_unlock(&meta_lock); -#ifdef MODULE - generic_buffer_fdatasync(ip, lblock << l2BlocksPerPage, - (lblock + 1) << l2BlocksPerPage); -#else - page = find_lock_page(mapping, - lblock >> l2BlocksPerPage); + page = find_lock_page(mapping, lblock>>l2BlocksPerPage); if (page) { block_flushpage(page, 0); UnlockPage(page); } -#endif } } } diff --git a/kernel/ksyms.c b/kernel/ksyms.c index f2c10a8db170..9293eb3f2190 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -211,6 +211,7 @@ EXPORT_SYMBOL(unlock_buffer); EXPORT_SYMBOL(__wait_on_buffer); EXPORT_SYMBOL(___wait_on_page); EXPORT_SYMBOL(generic_direct_IO); +EXPORT_SYMBOL(discard_bh_page); EXPORT_SYMBOL(block_write_full_page); EXPORT_SYMBOL(block_read_full_page); EXPORT_SYMBOL(block_prepare_write); |
