diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-08-14 06:19:59 -0400 |
| commit | 8d7ccaa545490cdffdfaff0842436a8dd85cf47b (patch) | |
| tree | 8129b5907161bc6ae26deb3645ce1e280c5e1f51 /fs/jbd2/commit.c | |
| parent | b2139aa0eec330c711c5a279db361e5ef1178e78 (diff) | |
| parent | 30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff) | |
Merge commit 'v2.6.27-rc3' into x86/prototypes
Conflicts:
include/asm-x86/dma-mapping.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'fs/jbd2/commit.c')
| -rw-r--r-- | fs/jbd2/commit.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index f8b3be873226..f2ad061e95ec 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c | |||
| @@ -67,7 +67,7 @@ static void release_buffer_page(struct buffer_head *bh) | |||
| 67 | goto nope; | 67 | goto nope; |
| 68 | 68 | ||
| 69 | /* OK, it's a truncated page */ | 69 | /* OK, it's a truncated page */ |
| 70 | if (TestSetPageLocked(page)) | 70 | if (!trylock_page(page)) |
| 71 | goto nope; | 71 | goto nope; |
| 72 | 72 | ||
| 73 | page_cache_get(page); | 73 | page_cache_get(page); |
| @@ -262,8 +262,18 @@ static int journal_finish_inode_data_buffers(journal_t *journal, | |||
| 262 | jinode->i_flags |= JI_COMMIT_RUNNING; | 262 | jinode->i_flags |= JI_COMMIT_RUNNING; |
| 263 | spin_unlock(&journal->j_list_lock); | 263 | spin_unlock(&journal->j_list_lock); |
| 264 | err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping); | 264 | err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping); |
| 265 | if (!ret) | 265 | if (err) { |
| 266 | ret = err; | 266 | /* |
| 267 | * Because AS_EIO is cleared by | ||
| 268 | * wait_on_page_writeback_range(), set it again so | ||
| 269 | * that user process can get -EIO from fsync(). | ||
| 270 | */ | ||
| 271 | set_bit(AS_EIO, | ||
| 272 | &jinode->i_vfs_inode->i_mapping->flags); | ||
| 273 | |||
| 274 | if (!ret) | ||
| 275 | ret = err; | ||
| 276 | } | ||
| 267 | spin_lock(&journal->j_list_lock); | 277 | spin_lock(&journal->j_list_lock); |
| 268 | jinode->i_flags &= ~JI_COMMIT_RUNNING; | 278 | jinode->i_flags &= ~JI_COMMIT_RUNNING; |
| 269 | wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); | 279 | wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); |
| @@ -670,8 +680,14 @@ start_journal_io: | |||
| 670 | * commit block, which happens below in such setting. | 680 | * commit block, which happens below in such setting. |
| 671 | */ | 681 | */ |
| 672 | err = journal_finish_inode_data_buffers(journal, commit_transaction); | 682 | err = journal_finish_inode_data_buffers(journal, commit_transaction); |
| 673 | if (err) | 683 | if (err) { |
| 674 | jbd2_journal_abort(journal, err); | 684 | char b[BDEVNAME_SIZE]; |
| 685 | |||
| 686 | printk(KERN_WARNING | ||
| 687 | "JBD2: Detected IO errors while flushing file data " | ||
| 688 | "on %s\n", bdevname(journal->j_fs_dev, b)); | ||
| 689 | err = 0; | ||
| 690 | } | ||
| 675 | 691 | ||
| 676 | /* Lo and behold: we have just managed to send a transaction to | 692 | /* Lo and behold: we have just managed to send a transaction to |
| 677 | the log. Before we can commit it, wait for the IO so far to | 693 | the log. Before we can commit it, wait for the IO so far to |
