[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