diff options
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r-- | mm/page-writeback.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index b901fe52b153..db30ce0b7d80 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -2371,9 +2371,8 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc) | |||
2371 | * | 2371 | * |
2372 | * The page must be locked by the caller and will be unlocked upon return. | 2372 | * The page must be locked by the caller and will be unlocked upon return. |
2373 | * | 2373 | * |
2374 | * write_one_page() returns a negative error code if I/O failed. Note that | 2374 | * Note that the mapping's AS_EIO/AS_ENOSPC flags will be cleared when this |
2375 | * the address_space is not marked for error. The caller must do this if | 2375 | * function returns. |
2376 | * needed. | ||
2377 | */ | 2376 | */ |
2378 | int write_one_page(struct page *page) | 2377 | int write_one_page(struct page *page) |
2379 | { | 2378 | { |
@@ -2391,15 +2390,15 @@ int write_one_page(struct page *page) | |||
2391 | if (clear_page_dirty_for_io(page)) { | 2390 | if (clear_page_dirty_for_io(page)) { |
2392 | get_page(page); | 2391 | get_page(page); |
2393 | ret = mapping->a_ops->writepage(page, &wbc); | 2392 | ret = mapping->a_ops->writepage(page, &wbc); |
2394 | if (ret == 0) { | 2393 | if (ret == 0) |
2395 | wait_on_page_writeback(page); | 2394 | wait_on_page_writeback(page); |
2396 | if (PageError(page)) | ||
2397 | ret = -EIO; | ||
2398 | } | ||
2399 | put_page(page); | 2395 | put_page(page); |
2400 | } else { | 2396 | } else { |
2401 | unlock_page(page); | 2397 | unlock_page(page); |
2402 | } | 2398 | } |
2399 | |||
2400 | if (!ret) | ||
2401 | ret = filemap_check_errors(mapping); | ||
2403 | return ret; | 2402 | return ret; |
2404 | } | 2403 | } |
2405 | EXPORT_SYMBOL(write_one_page); | 2404 | EXPORT_SYMBOL(write_one_page); |