diff options
| author | Andrew Morton <akpm@osdl.org> | 2005-05-05 19:16:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-05 19:36:44 -0400 |
| commit | d17d7fa44dbe1f12031773e27eda9e939024a037 (patch) | |
| tree | 4b2a8ebb60907a5cde4dd02b737851525a24a588 /fs/ext3/inode.c | |
| parent | ecffdde68ebefa1aa24411a91b12ae649f71f71c (diff) | |
[PATCH] revert ext3-writepages-support-for-writeback-mode
This had a fatal lock ranking bug: we do journal_start outside
mpage_writepages()'s lock_page().
Revert the whole thing, think again.
Credit-to: Jan Kara <jack@suse.cz>
For identifying the bug.
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/ext3/inode.c')
| -rw-r--r-- | fs/ext3/inode.c | 46 |
1 files changed, 0 insertions, 46 deletions
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index ea5888688f94..0d5fa73b18dc 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
| @@ -844,12 +844,6 @@ get_block: | |||
| 844 | return ret; | 844 | return ret; |
| 845 | } | 845 | } |
| 846 | 846 | ||
| 847 | static int ext3_writepages_get_block(struct inode *inode, sector_t iblock, | ||
| 848 | struct buffer_head *bh, int create) | ||
| 849 | { | ||
| 850 | return ext3_direct_io_get_blocks(inode, iblock, 1, bh, create); | ||
| 851 | } | ||
| 852 | |||
| 853 | /* | 847 | /* |
| 854 | * `handle' can be NULL if create is zero | 848 | * `handle' can be NULL if create is zero |
| 855 | */ | 849 | */ |
| @@ -1323,45 +1317,6 @@ out_fail: | |||
| 1323 | return ret; | 1317 | return ret; |
| 1324 | } | 1318 | } |
| 1325 | 1319 | ||
| 1326 | static int | ||
| 1327 | ext3_writeback_writepage_helper(struct page *page, | ||
| 1328 | struct writeback_control *wbc) | ||
| 1329 | { | ||
| 1330 | return block_write_full_page(page, ext3_get_block, wbc); | ||
| 1331 | } | ||
| 1332 | |||
| 1333 | static int | ||
| 1334 | ext3_writeback_writepages(struct address_space *mapping, | ||
| 1335 | struct writeback_control *wbc) | ||
| 1336 | { | ||
| 1337 | struct inode *inode = mapping->host; | ||
| 1338 | handle_t *handle = NULL; | ||
| 1339 | int err, ret = 0; | ||
| 1340 | |||
| 1341 | if (!mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) | ||
| 1342 | return ret; | ||
| 1343 | |||
| 1344 | handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode)); | ||
| 1345 | if (IS_ERR(handle)) { | ||
| 1346 | ret = PTR_ERR(handle); | ||
| 1347 | return ret; | ||
| 1348 | } | ||
| 1349 | |||
| 1350 | ret = __mpage_writepages(mapping, wbc, ext3_writepages_get_block, | ||
| 1351 | ext3_writeback_writepage_helper); | ||
| 1352 | |||
| 1353 | /* | ||
| 1354 | * Need to reaquire the handle since ext3_writepages_get_block() | ||
| 1355 | * can restart the handle | ||
| 1356 | */ | ||
| 1357 | handle = journal_current_handle(); | ||
| 1358 | |||
| 1359 | err = ext3_journal_stop(handle); | ||
| 1360 | if (!ret) | ||
| 1361 | ret = err; | ||
| 1362 | return ret; | ||
| 1363 | } | ||
| 1364 | |||
| 1365 | static int ext3_writeback_writepage(struct page *page, | 1320 | static int ext3_writeback_writepage(struct page *page, |
| 1366 | struct writeback_control *wbc) | 1321 | struct writeback_control *wbc) |
| 1367 | { | 1322 | { |
| @@ -1599,7 +1554,6 @@ static struct address_space_operations ext3_writeback_aops = { | |||
| 1599 | .readpage = ext3_readpage, | 1554 | .readpage = ext3_readpage, |
| 1600 | .readpages = ext3_readpages, | 1555 | .readpages = ext3_readpages, |
| 1601 | .writepage = ext3_writeback_writepage, | 1556 | .writepage = ext3_writeback_writepage, |
| 1602 | .writepages = ext3_writeback_writepages, | ||
| 1603 | .sync_page = block_sync_page, | 1557 | .sync_page = block_sync_page, |
| 1604 | .prepare_write = ext3_prepare_write, | 1558 | .prepare_write = ext3_prepare_write, |
| 1605 | .commit_write = ext3_writeback_commit_write, | 1559 | .commit_write = ext3_writeback_commit_write, |
