diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-08-13 07:08:47 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-13 07:08:47 -0400 |
commit | a12e61df4fa1cfae7a6b76976fa65a6fcb048e3f (patch) | |
tree | 957c915298b299902aa80afa7c78e94c71b3dc25 /fs/jbd2 | |
parent | 7b27718bdb1b70166383dec91391df5534d449ee (diff) | |
parent | 30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff) |
Merge commit 'v2.6.27-rc3' into x86/urgent
Diffstat (limited to 'fs/jbd2')
-rw-r--r-- | fs/jbd2/commit.c | 26 | ||||
-rw-r--r-- | fs/jbd2/journal.c | 1 | ||||
-rw-r--r-- | fs/jbd2/transaction.c | 4 |
3 files changed, 23 insertions, 8 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 |
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index b26c6d9fe6ae..8207a01c4edb 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c | |||
@@ -68,7 +68,6 @@ EXPORT_SYMBOL(jbd2_journal_set_features); | |||
68 | EXPORT_SYMBOL(jbd2_journal_create); | 68 | EXPORT_SYMBOL(jbd2_journal_create); |
69 | EXPORT_SYMBOL(jbd2_journal_load); | 69 | EXPORT_SYMBOL(jbd2_journal_load); |
70 | EXPORT_SYMBOL(jbd2_journal_destroy); | 70 | EXPORT_SYMBOL(jbd2_journal_destroy); |
71 | EXPORT_SYMBOL(jbd2_journal_update_superblock); | ||
72 | EXPORT_SYMBOL(jbd2_journal_abort); | 71 | EXPORT_SYMBOL(jbd2_journal_abort); |
73 | EXPORT_SYMBOL(jbd2_journal_errno); | 72 | EXPORT_SYMBOL(jbd2_journal_errno); |
74 | EXPORT_SYMBOL(jbd2_journal_ack_err); | 73 | EXPORT_SYMBOL(jbd2_journal_ack_err); |
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index 4f7cadbb19fa..e5d540588fa9 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
@@ -301,7 +301,7 @@ handle_t *jbd2_journal_start(journal_t *journal, int nblocks) | |||
301 | goto out; | 301 | goto out; |
302 | } | 302 | } |
303 | 303 | ||
304 | lock_acquire(&handle->h_lockdep_map, 0, 0, 0, 2, _THIS_IP_); | 304 | lock_map_acquire(&handle->h_lockdep_map); |
305 | out: | 305 | out: |
306 | return handle; | 306 | return handle; |
307 | } | 307 | } |
@@ -1279,7 +1279,7 @@ int jbd2_journal_stop(handle_t *handle) | |||
1279 | spin_unlock(&journal->j_state_lock); | 1279 | spin_unlock(&journal->j_state_lock); |
1280 | } | 1280 | } |
1281 | 1281 | ||
1282 | lock_release(&handle->h_lockdep_map, 1, _THIS_IP_); | 1282 | lock_map_release(&handle->h_lockdep_map); |
1283 | 1283 | ||
1284 | jbd2_free_handle(handle); | 1284 | jbd2_free_handle(handle); |
1285 | return err; | 1285 | return err; |