diff options
Diffstat (limited to 'fs/f2fs/inline.c')
| -rw-r--r-- | fs/f2fs/inline.c | 16 | 
1 files changed, 10 insertions, 6 deletions
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c index 5f1a67f756af..e32a9e527968 100644 --- a/fs/f2fs/inline.c +++ b/fs/f2fs/inline.c @@ -111,7 +111,7 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)  		.sbi = F2FS_I_SB(dn->inode),  		.type = DATA,  		.op = REQ_OP_WRITE, -		.op_flags = WRITE_SYNC | REQ_PRIO, +		.op_flags = REQ_SYNC | REQ_PRIO,  		.page = page,  		.encrypted_page = NULL,  	}; @@ -137,8 +137,10 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)  	fio.old_blkaddr = dn->data_blkaddr;  	write_data_page(dn, &fio);  	f2fs_wait_on_page_writeback(page, DATA, true); -	if (dirty) +	if (dirty) {  		inode_dec_dirty_pages(dn->inode); +		remove_dirty_inode(dn->inode); +	}  	/* this converted inline_data should be recovered. */  	set_inode_flag(dn->inode, FI_APPEND_WRITE); @@ -419,7 +421,7 @@ static int f2fs_add_inline_entries(struct inode *dir,  		}  		new_name.name = d.filename[bit_pos]; -		new_name.len = de->name_len; +		new_name.len = le16_to_cpu(de->name_len);  		ino = le32_to_cpu(de->ino);  		fake_mode = get_de_type(de) << S_SHIFT; @@ -573,7 +575,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,  	f2fs_put_page(page, 1);  	dir->i_ctime = dir->i_mtime = current_time(dir); -	f2fs_mark_inode_dirty_sync(dir); +	f2fs_mark_inode_dirty_sync(dir, false);  	if (inode)  		f2fs_drop_nlink(dir, inode); @@ -610,6 +612,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,  	struct f2fs_inline_dentry *inline_dentry = NULL;  	struct page *ipage = NULL;  	struct f2fs_dentry_ptr d; +	int err;  	if (ctx->pos == NR_INLINE_DENTRY)  		return 0; @@ -622,11 +625,12 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,  	make_dentry_ptr(inode, &d, (void *)inline_dentry, 2); -	if (!f2fs_fill_dentries(ctx, &d, 0, fstr)) +	err = f2fs_fill_dentries(ctx, &d, 0, fstr); +	if (!err)  		ctx->pos = NR_INLINE_DENTRY;  	f2fs_put_page(ipage, 1); -	return 0; +	return err < 0 ? err : 0;  }  int f2fs_inline_data_fiemap(struct inode *inode,  |