summaryrefslogtreecommitdiff
path: root/fs/buffer.c
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-05-19 02:32:47 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-05-19 02:32:47 -0700
commit66a759eb4d85542f900eba2b5f71f7bb3e2b73d4 (patch)
treeedff587feea6b98df991d4adc04ce2f528f830fd /fs/buffer.c
parentbf7c3d2de183a1c138ac667e41be357ce59f5998 (diff)
[PATCH] blk_run_page() race fix
blk_run_page() is incorrectly using page->mapping, which makes it racy against removal from swapcache. Make block_sync_page() use page_mapping(), and remove bkl_run_page(), which only had one caller.
Diffstat (limited to 'fs/buffer.c')
-rw-r--r--fs/buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/buffer.c b/fs/buffer.c
index 8c6abdcb22cf..9f76190d4654 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -2960,7 +2960,12 @@ EXPORT_SYMBOL(try_to_free_buffers);
int block_sync_page(struct page *page)
{
- blk_run_page(page);
+ struct address_space *mapping;
+
+ smp_mb();
+ mapping = page_mapping(page);
+ if (mapping)
+ blk_run_backing_dev(mapping->backing_dev_info, page);
return 0;
}