diff options
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r-- | mm/page-writeback.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 2cb01f6ec5d0..632b46479c94 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -927,7 +927,7 @@ retry: | |||
927 | break; | 927 | break; |
928 | } | 928 | } |
929 | 929 | ||
930 | done_index = page->index + 1; | 930 | done_index = page->index; |
931 | 931 | ||
932 | lock_page(page); | 932 | lock_page(page); |
933 | 933 | ||
@@ -977,6 +977,7 @@ continue_unlock: | |||
977 | * not be suitable for data integrity | 977 | * not be suitable for data integrity |
978 | * writeout). | 978 | * writeout). |
979 | */ | 979 | */ |
980 | done_index = page->index + 1; | ||
980 | done = 1; | 981 | done = 1; |
981 | break; | 982 | break; |
982 | } | 983 | } |
@@ -1211,6 +1212,17 @@ int set_page_dirty(struct page *page) | |||
1211 | 1212 | ||
1212 | if (likely(mapping)) { | 1213 | if (likely(mapping)) { |
1213 | int (*spd)(struct page *) = mapping->a_ops->set_page_dirty; | 1214 | int (*spd)(struct page *) = mapping->a_ops->set_page_dirty; |
1215 | /* | ||
1216 | * readahead/lru_deactivate_page could remain | ||
1217 | * PG_readahead/PG_reclaim due to race with end_page_writeback | ||
1218 | * About readahead, if the page is written, the flags would be | ||
1219 | * reset. So no problem. | ||
1220 | * About lru_deactivate_page, if the page is redirty, the flag | ||
1221 | * will be reset. So no problem. but if the page is used by readahead | ||
1222 | * it will confuse readahead and make it restart the size rampup | ||
1223 | * process. But it's a trivial problem. | ||
1224 | */ | ||
1225 | ClearPageReclaim(page); | ||
1214 | #ifdef CONFIG_BLOCK | 1226 | #ifdef CONFIG_BLOCK |
1215 | if (!spd) | 1227 | if (!spd) |
1216 | spd = __set_page_dirty_buffers; | 1228 | spd = __set_page_dirty_buffers; |
@@ -1266,7 +1278,6 @@ int clear_page_dirty_for_io(struct page *page) | |||
1266 | 1278 | ||
1267 | BUG_ON(!PageLocked(page)); | 1279 | BUG_ON(!PageLocked(page)); |
1268 | 1280 | ||
1269 | ClearPageReclaim(page); | ||
1270 | if (mapping && mapping_cap_account_dirty(mapping)) { | 1281 | if (mapping && mapping_cap_account_dirty(mapping)) { |
1271 | /* | 1282 | /* |
1272 | * Yes, Virginia, this is indeed insane. | 1283 | * Yes, Virginia, this is indeed insane. |