linux/fs/f2fs
Chao Yu 6afc662e68 f2fs: support flexible inline xattr size
Now, in product, more and more features based on file encryption were
introduced, their demand of xattr space is increasing, however, inline
xattr has fixed-size of 200 bytes, once inline xattr space is full, new
increased xattr data would occupy additional xattr block which may bring
us more space usage and performance regression during persisting.

In order to resolve above issue, it's better to expand inline xattr size
flexibly according to user's requirement.

So this patch introduces new filesystem feature 'flexible inline xattr',
and new mount option 'inline_xattr_size=%u', once mkfs enables the
feature, we can use the option to make f2fs supporting flexible inline
xattr size.

To support this feature, we add extra attribute i_inline_xattr_size in
inode layout, indicating that how many space inline xattr borrows from
block address mapping space in inode layout, by this, we can easily
locate and store flexible-sized inline xattr data in inode.

Inode disk layout:
  +----------------------+
  | .i_mode              |
  | ...                  |
  | .i_ext               |
  +----------------------+
  | .i_extra_isize       |
  | .i_inline_xattr_size |-----------+
  | ...                  |           |
  +----------------------+           |
  | .i_addr              |           |
  |  - block address or  |           |
  |  - inline data       |           |
  +----------------------+<---+      v
  |    inline xattr      |    +---inline xattr range
  +----------------------+<---+
  | .i_nid               |
  +----------------------+
  |   node_footer        |
  | (nid, ino, offset)   |
  +----------------------+

Note that, we have to cnosider backward compatibility which reserved
inline_data space, 200 bytes, all the time, reported by Sheng Yong.

Previous inline data or directory always reserved 200 bytes in inode layout,
even if inline_xattr is disabled. In order to keep inline_dentry's structure
for backward compatibility, we get the space back only from inline_data.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Reported-by: Sheng Yong <shengyong1@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2017-11-05 16:41:50 -08:00
..
acl.c f2fs: stop all the operations by cp_error flag 2017-11-05 16:41:43 -08:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: stop all the operations by cp_error flag 2017-11-05 16:41:43 -08:00
data.c f2fs: limit # of inmemory pages 2017-10-26 10:44:21 +02:00
debug.c f2fs: show current cp state 2017-11-05 16:41:49 -08:00
dir.c f2fs: update ctx->pos correctly when hitting hole in directory 2017-10-26 10:44:20 +02:00
extent_cache.c f2fs: fix a bug caused by NULL extent tree 2017-05-23 21:07:18 -07:00
f2fs.h f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
file.c f2fs: stop all the operations by cp_error flag 2017-11-05 16:41:43 -08:00
gc.c f2fs: enhance multiple device flush 2017-10-10 12:49:53 -07:00
gc.h f2fs: fix potential overflow when adjusting GC cycle 2017-08-15 10:40:14 -07:00
hash.c f2fs: check entire encrypted bigname when finding a dentry 2017-05-04 11:44:35 -04:00
inline.c f2fs: enhance multiple device flush 2017-10-10 12:49:53 -07:00
inode.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile f2fs: move sysfs code from super.c to fs/f2fs/sysfs.c 2017-07-04 02:11:45 -07:00
namei.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
node.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
node.h f2fs: limit # of inmemory pages 2017-10-26 10:44:21 +02:00
recovery.c f2fs: check hot_data for roll-forward recovery 2017-08-21 15:55:06 -07:00
segment.c f2fs: remove several redundant assignments 2017-10-26 10:44:26 +02:00
segment.h f2fs: fix to correct no_fggc_candidate 2017-10-26 10:44:24 +02:00
shrinker.c f2fs: obsolete ALLOC_NID_LIST list 2017-10-10 12:49:53 -07:00
super.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
sysfs.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
trace.c f2fs: use set_page_private marcro in f2fs_trace_pid 2017-03-24 15:10:49 -04:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c f2fs: support flexible inline xattr size 2017-11-05 16:41:50 -08:00
xattr.h f2fs: guard macro variables with braces 2017-04-10 19:48:10 -07:00