[Ocfs2-tools-devel] [PATCH RESEND 1/3] mkfs.ocfs2: support append direct io incompat feature

Eric Ren zren at suse.com
Fri Mar 4 03:20:11 PST 2016



On 03/03/2016 07:30 PM, Joseph Qi wrote:
> Turn on append direct io incompat feature by default.
>
> Signed-off-by: Joseph Qi <joseph.qi at huawei.com>
Looks good.

Reviewed-by: Eric Ren <zren at suse.com>
> ---
>   include/ocfs2-kernel/ocfs2_fs.h | 14 ++++++++++++--
>   include/ocfs2/ocfs2.h           |  7 +++++++
>   libocfs2/feature_string.c       | 27 +++++++++++++++++++++------
>   3 files changed, 40 insertions(+), 8 deletions(-)
>
> diff --git a/include/ocfs2-kernel/ocfs2_fs.h b/include/ocfs2-kernel/ocfs2_fs.h
> index 79e4f2f..620c6de 100644
> --- a/include/ocfs2-kernel/ocfs2_fs.h
> +++ b/include/ocfs2-kernel/ocfs2_fs.h
> @@ -102,7 +102,8 @@
>   					 | OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS \
>   					 | OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE \
>   					 | OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG	\
> -					 | OCFS2_FEATURE_INCOMPAT_CLUSTERINFO)
> +					 | OCFS2_FEATURE_INCOMPAT_CLUSTERINFO \
> +					 | OCFS2_FEATURE_INCOMPAT_APPEND_DIO)
>   #define OCFS2_FEATURE_RO_COMPAT_SUPP	(OCFS2_FEATURE_RO_COMPAT_UNWRITTEN \
>   					 | OCFS2_FEATURE_RO_COMPAT_USRQUOTA \
>   					 | OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)
> @@ -178,6 +179,11 @@
>   #define OCFS2_FEATURE_INCOMPAT_CLUSTERINFO	0x4000
>
>   /*
> + * Append Direct IO support
> + */
> +#define OCFS2_FEATURE_INCOMPAT_APPEND_DIO	0x8000
> +
> +/*
>    * backup superblock flag is used to indicate that this volume
>    * has backup superblocks.
>    */
> @@ -232,6 +238,8 @@
>   #define OCFS2_CHAIN_FL		(0x00000400)	/* Chain allocator */
>   #define OCFS2_DEALLOC_FL	(0x00000800)	/* Truncate log */
>   #define OCFS2_QUOTA_FL		(0x00001000)	/* Quota file */
> +#define OCFS2_DIO_ORPHANED_FL	(0X00002000)	/* On the orphan list especially
> +						 * for dio */
>
>   /*
>    * Flags on ocfs2_dinode.i_dyn_features
> @@ -737,7 +745,9 @@ struct ocfs2_dinode {
>   					   inode belongs to.  Only valid
>   					   if allocated from a
>   					   discontiguous block group */
> -/*A0*/	__le64 i_reserved2[3];
> +/*A0*/	__le16 i_dio_orphaned_slot;	/* only used for append dio write */
> +	__le16 i_reserved1[3];
> +	__le64 i_reserved2[2];
>   /*B8*/	union {
>   		__le64 i_pad1;		/* Generic way to refer to this
>   					   64bit union */
> diff --git a/include/ocfs2/ocfs2.h b/include/ocfs2/ocfs2.h
> index d33a28d..1d0ab67 100644
> --- a/include/ocfs2/ocfs2.h
> +++ b/include/ocfs2/ocfs2.h
> @@ -1348,6 +1348,13 @@ static inline int ocfs2_writes_unwritten_extents(struct ocfs2_super_block *osb)
>   	return 0;
>   }
>
> +static inline int ocfs2_supports_append_dio(struct ocfs2_super_block *osb)
> +{
> +	if (osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_APPEND_DIO)
> +		return 1;
> +	return 0;
> +}
> +
>   static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super_block *osb)
>   {
>   	if (osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_EXTENDED_SLOT_MAP)
> diff --git a/libocfs2/feature_string.c b/libocfs2/feature_string.c
> index 544cc6e..e987293 100644
> --- a/libocfs2/feature_string.c
> +++ b/libocfs2/feature_string.c
> @@ -68,7 +68,8 @@ static ocfs2_fs_options feature_level_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN},  /* OCFS2_FEATURE_LEVEL_DEFAULT */
>
>   	{OCFS2_FEATURE_COMPAT_BACKUP_SB | OCFS2_FEATURE_COMPAT_JBD2_SB,
> @@ -83,7 +84,8 @@ static ocfs2_fs_options feature_level_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN |
>   	 OCFS2_FEATURE_RO_COMPAT_USRQUOTA |
>   	 OCFS2_FEATURE_RO_COMPAT_GRPQUOTA }, /* OCFS2_FEATURE_LEVEL_MAX_FEATURES */
> @@ -97,7 +99,8 @@ static ocfs2_fs_options mkfstypes_features_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN},  /* OCFS2_MKFSTYPE_DEFAULT */
>
>   	{OCFS2_FEATURE_COMPAT_BACKUP_SB | OCFS2_FEATURE_COMPAT_JBD2_SB,
> @@ -107,7 +110,8 @@ static ocfs2_fs_options mkfstypes_features_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN},  /* OCFS2_MKFSTYPE_DATAFILES */
>
>   	{OCFS2_FEATURE_COMPAT_BACKUP_SB | OCFS2_FEATURE_COMPAT_JBD2_SB,
> @@ -117,7 +121,8 @@ static ocfs2_fs_options mkfstypes_features_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN},  /* OCFS2_MKFSTYPE_MAIL */
>
>   	{OCFS2_FEATURE_COMPAT_BACKUP_SB | OCFS2_FEATURE_COMPAT_JBD2_SB,
> @@ -127,7 +132,8 @@ static ocfs2_fs_options mkfstypes_features_defaults[] = {
>   	 OCFS2_FEATURE_INCOMPAT_XATTR |
>   	 OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE |
>   	 OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS |
> -	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG,
> +	 OCFS2_FEATURE_INCOMPAT_DISCONTIG_BG |
> +	 OCFS2_FEATURE_INCOMPAT_APPEND_DIO,
>   	 OCFS2_FEATURE_RO_COMPAT_UNWRITTEN},  /* OCFS2_MKFSTYPE_VMSTORE */
>   };
>
> @@ -205,6 +211,11 @@ static struct fs_feature_flags ocfs2_supported_features[] = {
>   		{0, OCFS2_FEATURE_INCOMPAT_CLUSTERINFO, 0},
>   	},
>   	{
> +		"append-dio",
> +		{0, OCFS2_FEATURE_INCOMPAT_APPEND_DIO, 0},
> +		{0, OCFS2_FEATURE_INCOMPAT_APPEND_DIO, 0},
> +	},
> +	{
>   		NULL,
>   		{0, 0, 0},
>   		{0, 0, 0}
> @@ -296,6 +307,10 @@ static struct feature_name ocfs2_feature_names[] = {
>   		.fn_flag = {0, OCFS2_FEATURE_INCOMPAT_CLUSTERINFO, 0},
>   	},
>   	{
> +		.fn_name = "append-dio",
> +		.fn_flag = {0, OCFS2_FEATURE_INCOMPAT_APPEND_DIO, 0},
> +	},
> +	{
>   		.fn_name = NULL,
>   	},
>   };




More information about the Ocfs2-tools-devel mailing list