|
@@ -309,17 +309,21 @@ static int __commit_inmem_pages(struct inode *inode,
|
|
|
inode_dec_dirty_pages(inode);
|
|
|
remove_dirty_inode(inode);
|
|
|
}
|
|
|
-
|
|
|
+retry:
|
|
|
fio.page = page;
|
|
|
fio.old_blkaddr = NULL_ADDR;
|
|
|
fio.encrypted_page = NULL;
|
|
|
fio.need_lock = LOCK_DONE;
|
|
|
err = do_write_data_page(&fio);
|
|
|
if (err) {
|
|
|
+ if (err == -ENOMEM) {
|
|
|
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
|
|
|
+ cond_resched();
|
|
|
+ goto retry;
|
|
|
+ }
|
|
|
unlock_page(page);
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
/* record old blkaddr for revoking */
|
|
|
cur->old_addr = fio.old_blkaddr;
|
|
|
last_idx = page->index;
|