mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 22:50:41 +00:00
f2fs: add infra struct and helper for inline dir
This patch defines macro/inline dentry structure, and adds some helpers for inline dir infrastructure. Signed-off-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
af41d3ee00
commit
34d67debe0
@ -46,8 +46,9 @@
|
||||
#define F2FS_MOUNT_DISABLE_EXT_IDENTIFY 0x00000040
|
||||
#define F2FS_MOUNT_INLINE_XATTR 0x00000080
|
||||
#define F2FS_MOUNT_INLINE_DATA 0x00000100
|
||||
#define F2FS_MOUNT_FLUSH_MERGE 0x00000200
|
||||
#define F2FS_MOUNT_NOBARRIER 0x00000400
|
||||
#define F2FS_MOUNT_INLINE_DENTRY 0x00000200
|
||||
#define F2FS_MOUNT_FLUSH_MERGE 0x00000400
|
||||
#define F2FS_MOUNT_NOBARRIER 0x00000800
|
||||
|
||||
#define clear_opt(sbi, option) (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option)
|
||||
#define set_opt(sbi, option) (sbi->mount_opt.opt |= F2FS_MOUNT_##option)
|
||||
@ -1058,6 +1059,7 @@ enum {
|
||||
FI_NO_EXTENT, /* not to use the extent cache */
|
||||
FI_INLINE_XATTR, /* used for inline xattr */
|
||||
FI_INLINE_DATA, /* used for inline data*/
|
||||
FI_INLINE_DENTRY, /* used for inline dentry */
|
||||
FI_APPEND_WRITE, /* inode has appended data */
|
||||
FI_UPDATE_WRITE, /* inode has in-place-update data */
|
||||
FI_NEED_IPU, /* used for ipu per file */
|
||||
@ -1104,6 +1106,8 @@ static inline void get_inline_info(struct f2fs_inode_info *fi,
|
||||
set_inode_flag(fi, FI_INLINE_XATTR);
|
||||
if (ri->i_inline & F2FS_INLINE_DATA)
|
||||
set_inode_flag(fi, FI_INLINE_DATA);
|
||||
if (ri->i_inline & F2FS_INLINE_DENTRY)
|
||||
set_inode_flag(fi, FI_INLINE_DENTRY);
|
||||
}
|
||||
|
||||
static inline void set_raw_inline(struct f2fs_inode_info *fi,
|
||||
@ -1115,6 +1119,8 @@ static inline void set_raw_inline(struct f2fs_inode_info *fi,
|
||||
ri->i_inline |= F2FS_INLINE_XATTR;
|
||||
if (is_inode_flag_set(fi, FI_INLINE_DATA))
|
||||
ri->i_inline |= F2FS_INLINE_DATA;
|
||||
if (is_inode_flag_set(fi, FI_INLINE_DENTRY))
|
||||
ri->i_inline |= F2FS_INLINE_DENTRY;
|
||||
}
|
||||
|
||||
static inline int f2fs_has_inline_xattr(struct inode *inode)
|
||||
@ -1165,6 +1171,17 @@ static inline void *inline_data_addr(struct page *page)
|
||||
return (void *)&(ri->i_addr[1]);
|
||||
}
|
||||
|
||||
static inline int f2fs_has_inline_dentry(struct inode *inode)
|
||||
{
|
||||
return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DENTRY);
|
||||
}
|
||||
|
||||
static inline void *inline_dentry_addr(struct page *page)
|
||||
{
|
||||
struct f2fs_inode *ri = F2FS_INODE(page);
|
||||
return (void *)&(ri->i_addr[1]);
|
||||
}
|
||||
|
||||
static inline int f2fs_readonly(struct super_block *sb)
|
||||
{
|
||||
return sb->s_flags & MS_RDONLY;
|
||||
|
@ -171,6 +171,7 @@ struct f2fs_extent {
|
||||
|
||||
#define F2FS_INLINE_XATTR 0x01 /* file inline xattr flag */
|
||||
#define F2FS_INLINE_DATA 0x02 /* file inline data flag */
|
||||
#define F2FS_INLINE_DENTRY 0x04 /* file inline dentry flag */
|
||||
|
||||
#define MAX_INLINE_DATA (sizeof(__le32) * (DEF_ADDRS_PER_INODE - \
|
||||
F2FS_INLINE_XATTR_ADDRS - 1))
|
||||
@ -436,6 +437,24 @@ struct f2fs_dentry_block {
|
||||
__u8 filename[NR_DENTRY_IN_BLOCK][F2FS_SLOT_LEN];
|
||||
} __packed;
|
||||
|
||||
/* for inline dir */
|
||||
#define NR_INLINE_DENTRY (MAX_INLINE_DATA * BITS_PER_BYTE / \
|
||||
((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
|
||||
BITS_PER_BYTE + 1))
|
||||
#define INLINE_DENTRY_BITMAP_SIZE ((NR_INLINE_DENTRY + \
|
||||
BITS_PER_BYTE - 1) / BITS_PER_BYTE)
|
||||
#define INLINE_RESERVED_SIZE (MAX_INLINE_DATA - \
|
||||
((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
|
||||
NR_INLINE_DENTRY + INLINE_DENTRY_BITMAP_SIZE))
|
||||
|
||||
/* inline directory entry structure */
|
||||
struct f2fs_inline_dentry {
|
||||
__u8 dentry_bitmap[INLINE_DENTRY_BITMAP_SIZE];
|
||||
__u8 reserved[INLINE_RESERVED_SIZE];
|
||||
struct f2fs_dir_entry dentry[NR_INLINE_DENTRY];
|
||||
__u8 filename[NR_INLINE_DENTRY][F2FS_SLOT_LEN];
|
||||
} __packed;
|
||||
|
||||
/* file types used in inode_info->flags */
|
||||
enum {
|
||||
F2FS_FT_UNKNOWN,
|
||||
|
Loading…
x
Reference in New Issue
Block a user