linux/fs/f2fs
Huajun Li 9ffe0fb5f3 f2fs: handle inline data operations
Hook inline data read/write, truncate, fallocate, setattr, etc.

Files need meet following 2 requirement to inline:
 1) file size is not greater than MAX_INLINE_DATA;
 2) file doesn't pre-allocate data blocks by fallocate().

FI_INLINE_DATA will not be set while creating a new regular inode because
most of the files are bigger than ~3.4K. Set FI_INLINE_DATA only when
data is submitted to block layer, ranther than set it while creating a new
inode, this also avoids converting data from inline to normal data block
and vice versa.

While writting inline data to inode block, the first data block should be
released if the file has a block indexed by i_addr[0].

On the other hand, when a file operation is appied to a file with inline
data, we need to test if this file can remain inline by doing this
operation, otherwise it should be convert into normal file by reserving
a new data block, copying inline data to this new block and clear
FI_INLINE_DATA flag. Because reserve a new data block here will make use
of i_addr[0], if we save inline data in i_addr[0..872], then the first
4 bytes would be overwriten. This problem can be avoided simply by
not using i_addr[0] for inline data.

Signed-off-by: Huajun Li <huajun.li@intel.com>
Signed-off-by: Haicheng Li <haicheng.li@linux.intel.com>
Signed-off-by: Weihong Xu <weihong.xu@intel.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
2013-12-26 20:40:41 +09:00
..
acl.c f2fs: fix a deadlock during init_acl procedure 2013-10-28 13:39:09 +09:00
acl.h f2fs: fix a deadlock during init_acl procedure 2013-10-28 13:39:09 +09:00
checkpoint.c f2fs: convert max_orphans to a field of f2fs_sb_info 2013-12-26 20:37:52 +09:00
data.c f2fs: handle inline data operations 2013-12-26 20:40:41 +09:00
debug.c f2fs: replace the debugfs_root with f2fs_debugfs_root 2013-12-23 10:18:05 +09:00
dir.c f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 20:32:48 +09:00
f2fs.h f2fs: key functions to handle inline data 2013-12-26 20:40:09 +09:00
file.c f2fs: handle inline data operations 2013-12-26 20:40:41 +09:00
gc.c f2fs: remove the rw_flag domain from f2fs_io_info 2013-12-23 10:18:07 +09:00
gc.h f2fs: optimize gc for better performance 2013-09-05 13:50:32 +09:00
hash.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
inline.c f2fs: key functions to handle inline data 2013-12-26 20:40:09 +09:00
inode.c f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 20:32:48 +09:00
Kconfig f2fs: introduce CONFIG_F2FS_CHECK_FS for BUG_ON control 2013-10-29 15:43:01 +09:00
Makefile f2fs: key functions to handle inline data 2013-12-26 20:40:09 +09:00
namei.c f2fs: avoid to set wrong pino of inode when rename dir 2013-12-23 10:42:51 +09:00
node.c f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 20:32:48 +09:00
node.h f2fs: update several comments 2013-12-23 10:26:03 +09:00
recovery.c f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 20:32:48 +09:00
segment.c f2fs: remove the rw_flag domain from f2fs_io_info 2013-12-23 10:18:07 +09:00
segment.h f2fs: introduce sysfs entry to control in-place-update policy 2013-12-23 10:18:07 +09:00
super.c f2fs: introduce sysfs entry to control in-place-update policy 2013-12-23 10:18:07 +09:00
xattr.c f2fs: add unlikely() macro for compiler more aggressively 2013-12-23 10:18:06 +09:00
xattr.h f2fs: support the inline xattrs 2013-08-26 20:15:23 +09:00