summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2002-04-16 21:03:42 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-04-16 21:03:42 -0700
commit485dc02f769730522e69d710db12aaf1169ee907 (patch)
tree95e91c54ff6303143e44705c5e85d045a7b9f203
parent91813920c82529b777b0feeff065bfc8d47a8783 (diff)
parent0ec6ef22403a1b8bfa4e726c15060d469e6fb548 (diff)
Automerge
-rw-r--r--fs/jfs/jfs_metapage.c50
-rw-r--r--kernel/ksyms.c1
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);