Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f36603e authored by Jaegeuk Kim's avatar Jaegeuk Kim Committed by Jaegeuk Kim
Browse files

f2fs: fix quota_sync failure due to f2fs_lock_op



f2fs_quota_sync() uses f2fs_lock_op() before flushing dirty pages, but
f2fs_write_data_page() returns EAGAIN.
Likewise dentry blocks, we can just bypass getting the lock, since quota
blocks are also maintained by checkpoint.

Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 94378664
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -985,7 +985,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
	loff_t psize;
	int i, err;

	if (!f2fs_trylock_op(sbi))
	if (!IS_NOQUOTA(inode) && !f2fs_trylock_op(sbi))
		return -EAGAIN;

	set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
+2 −2
Original line number Diff line number Diff line
@@ -2659,8 +2659,8 @@ int f2fs_write_single_data_page(struct page *page, int *submitted,
			f2fs_available_free_memory(sbi, BASE_CHECK))))
		goto redirty_out;

	/* Dentry blocks are controlled by checkpoint */
	if (S_ISDIR(inode->i_mode)) {
	/* Dentry/quota blocks are controlled by checkpoint */
	if (S_ISDIR(inode->i_mode) || IS_NOQUOTA(inode)) {
		fio.need_lock = LOCK_DONE;
		err = f2fs_do_write_data_page(&fio);
		goto done;