f2fs-tools: support project quota
PATCH v4 3/3 f2fs-tools: support project quota
From: Chao Yu <[email protected]>
This patch introduce a new option 'project_quota' for enabling project quota functionality during mkfs.
Signed-off-by Chao Yu <[email protected]>
---
v4: fix to change F2FS_FEATURE_PRJQUOTA to little endian before using.
fsck/mount.c | 4 ++++ include/f2fs_fs.h | 4 ++++ mkfs/f2fs_format.c | 3 +++ mkfs/f2fs_format_main.c | 10 ++++++++++ 4 files changed, 21 insertions(+)
fsck/mount.c +4 -0
@@ -90,6 +90,7 @@ void print_inode_info(struct f2fs_inode *inode, int name)DISP_u16 (inode, i_extra_isize);DISP_u16 (inode, i_padding); +DISP_u32 (inode, i_projid);DISP_u32 (inode, i_addr[ofs]);/* Pointers to data blocks */ DISP_u32 (inode, i_addr[ofs +1 ]);/* Pointers to data blocks */
@@ -287,6 +288,9 @@ void print_sb_state(struct f2fs_super_block *sb)if (f &cpu_to_le32 (F2FS_FEATURE_EXTRA_ATTR )) {MSG (0 ,"%s" ," extra attribute" ); } +if (f &cpu_to_le32 (F2FS_FEATURE_PRJQUOTA )) { +MSG (0 ,"%s" ," project quota" ); + }MSG (0 ,"\n" );MSG (0 ,"Info: superblock encrypt level = %d, salt = " , sb->encryption_level);
include/f2fs_fs.h +4 -0
@@ -472,6 +472,7 @@ enum {#define F2FS_FEATURE_BLKZONED 0x0002#define F2FS_FEATURE_ATOMIC_WRITE 0x0004#define F2FS_FEATURE_EXTRA_ATTR 0x0008 +#define F2FS_FEATURE_PRJQUOTA 0x0010#define MAX_VOLUME_NAME 512
@@ -624,6 +625,8 @@ struct f2fs_extent { (offsetof(struct f2fs_inode , i_extra_end) - \ offsetof(struct f2fs_inode, i_extra_isize)) \ +#define F2FS_DEF_PROJID 0/* default project ID */ +#define MAX_INLINE_DATA (node) (sizeof(__le32) * \ (DEF_ADDRS_PER_INODE_INLINE_XATTR - \ get_extra_isize(node) - \
@@ -679,6 +682,7 @@ struct f2fs_inode {struct {__le16 i_extra_isize;/* extra inode attribute size */ __le16 i_padding;/* padding */ +__le32 i_projid;/* project id */ __le32 i_extra_end[0 ];/* for attribute size calculation */ };__le32 i_addr[DEF_ADDRS_PER_INODE ];/* Pointers to data blocks */
mkfs/f2fs_format.c +3 -0
@@ -929,6 +929,9 @@ static int f2fs_write_root_inode(void)cpu_to_le16 (F2FS_TOTAL_EXTRA_ATTR_SIZE ); } +if (c.feature &cpu_to_le32 (F2FS_FEATURE_PRJQUOTA )) + raw_node->i.i_projid =cpu_to_le32 (F2FS_DEF_PROJID ); + data_blk_nor =get_sb (main_blkaddr) + c.cur_seg[CURSEG_HOT_DATA ] * c.blks_per_seg; raw_node->i.i_addr[get_extra_isize (raw_node)] =cpu_to_le32 (data_blk_nor);
mkfs/f2fs_format_main.c +10 -0
@@ -82,6 +82,8 @@ static void parse_feature(const char *features) c.feature |=cpu_to_le32 (F2FS_FEATURE_ENCRYPT ); }else if (!strcmp (features,"extra_attr" )) { c.feature |=cpu_to_le32 (F2FS_FEATURE_EXTRA_ATTR ); + }else if (!strcmp (features,"project_quota" )) { + c.feature |=cpu_to_le32 (F2FS_FEATURE_PRJQUOTA ); }else {MSG (0 ,"Error: Wrong features\n" );mkfs_usage ();
@@ -161,6 +163,14 @@ static void f2fs_parse_options(int argc, char *argv[]) } } +if (!(c.feature &cpu_to_le32 (F2FS_FEATURE_EXTRA_ATTR ))) { +if (c.feature &cpu_to_le32 (F2FS_FEATURE_PRJQUOTA )) { +MSG (0 ,"\tInfo: project quota feature should always been" +"enabled with extra attr feature\n" ); +exit (1 ); + } + } +if (optind >= argc) {MSG (0 ,"\tError: Device not specified\n" );mkfs_usage ();
Signature · 1 line
2.13.0.90.g1eb437020