|
@@ -2078,7 +2078,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
struct page *page = NULL;
|
|
struct page *page = NULL;
|
|
|
pgoff_t index = ((unsigned long long) pos) >> PAGE_SHIFT;
|
|
pgoff_t index = ((unsigned long long) pos) >> PAGE_SHIFT;
|
|
|
- bool need_balance = false;
|
|
|
|
|
|
|
+ bool need_balance = false, drop_atomic = false;
|
|
|
block_t blkaddr = NULL_ADDR;
|
|
block_t blkaddr = NULL_ADDR;
|
|
|
int err = 0;
|
|
int err = 0;
|
|
|
|
|
|
|
@@ -2087,6 +2087,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
|
|
|
if (f2fs_is_atomic_file(inode) &&
|
|
if (f2fs_is_atomic_file(inode) &&
|
|
|
!available_free_memory(sbi, INMEM_PAGES)) {
|
|
!available_free_memory(sbi, INMEM_PAGES)) {
|
|
|
err = -ENOMEM;
|
|
err = -ENOMEM;
|
|
|
|
|
+ drop_atomic = true;
|
|
|
goto fail;
|
|
goto fail;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2167,7 +2168,7 @@ repeat:
|
|
|
fail:
|
|
fail:
|
|
|
f2fs_put_page(page, 1);
|
|
f2fs_put_page(page, 1);
|
|
|
f2fs_write_failed(mapping, pos + len);
|
|
f2fs_write_failed(mapping, pos + len);
|
|
|
- if (f2fs_is_atomic_file(inode))
|
|
|
|
|
|
|
+ if (drop_atomic)
|
|
|
drop_inmem_pages_all(sbi);
|
|
drop_inmem_pages_all(sbi);
|
|
|
return err;
|
|
return err;
|
|
|
}
|
|
}
|