diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-05-19 02:32:47 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-19 02:32:47 -0700 |
| commit | 66a759eb4d85542f900eba2b5f71f7bb3e2b73d4 (patch) | |
| tree | edff587feea6b98df991d4adc04ce2f528f830fd /fs/buffer.c | |
| parent | bf7c3d2de183a1c138ac667e41be357ce59f5998 (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.c | 7 |
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; } |
