Patch from Dmitry Monakhov: Previous fix for retries in ext3_prepare_write() violation was a bit errorneuos: - it missed return of error code from ext3_journal_stop() - it missed do_journal_get_write_access() before commit_write
a few comments added also. Signed-Off-By: Dmitry Monakhov <[EMAIL PROTECTED]> Signed-Off-By: Kirill Korotaev <[EMAIL PROTECTED]> diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index a48ada9..1acb528 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c @@ -1162,13 +1162,14 @@ static int ext3_prepare_failure(struct f struct buffer_head *bh, *head, *next; unsigned block_start, block_end; unsigned blocksize; + int ret; + handle_t *handle = ext3_journal_current_handle(); mapping = page->mapping; if (ext3_should_writeback_data(mapping->host)) { /* optimization: no constraints about data */ skip: - ext3_journal_stop(ext3_journal_current_handle()); - return 0; + return ext3_journal_stop(handle); } head = page_buffers(page); @@ -1186,7 +1187,19 @@ skip: break; } if (!buffer_mapped(bh)) + /* prepare_write failed on this bh */ break; + if (ext3_should_journal_data(mapping->host)) { + ret = do_journal_get_write_access(handle, bh); + if (ret) { + ext3_journal_stop(handle); + return ret; + } + } + /* + * block_start here becomes the first block where the current iteration + * of prepare_write failed. + */ } if (block_start <= from) goto skip; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/