From: Bobi Jam Date: Mon, 2 May 2022 14:47:47 +0000 (-0400) Subject: LU-12186 ec: add necessary structure member for EC file X-Git-Tag: 2.15.51~204 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=4c4790088995fa6907af81ad334facf12363e48d;p=fs%2Flustre-release.git LU-12186 ec: add necessary structure member for EC file Added basic structure members for erasure-coding layout. Test-Parameters: trivial Signed-off-by: Bobi Jam Change-Id: I697dc144877d6c5fbe9335dc721200e43749f5d9 Reviewed-on: https://review.whamcloud.com/38319 Reviewed-by: James Simmons Tested-by: jenkins Tested-by: Maloo Reviewed-by: Bobi Jam Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/lustre/lustreapi.h b/lustre/include/lustre/lustreapi.h index 0284da0..4c60b6e 100644 --- a/lustre/include/lustre/lustreapi.h +++ b/lustre/include/lustre/lustreapi.h @@ -1106,6 +1106,7 @@ static const struct comp_flag_name { { LCME_FL_OFFLINE, "offline" }, { LCME_FL_NOSYNC, "nosync" }, { LCME_FL_EXTENSION, "extension" }, + { LCME_FL_PARITY, "parity" }, }; /** diff --git a/lustre/include/uapi/linux/lustre/lustre_user.h b/lustre/include/uapi/linux/lustre/lustre_user.h index 98507e0..eaadaca 100644 --- a/lustre/include/uapi/linux/lustre/lustre_user.h +++ b/lustre/include/uapi/linux/lustre/lustre_user.h @@ -858,6 +858,7 @@ enum lov_comp_md_entry_flags { LCME_FL_INIT = 0x00000010, /* instantiated */ LCME_FL_NOSYNC = 0x00000020, /* FLR: no sync for the mirror */ LCME_FL_EXTENSION = 0x00000040, /* extension comp, never init */ + LCME_FL_PARITY = 0x00000080, /* EC: a parity code component */ LCME_FL_NEG = 0x80000000 /* used to indicate a negative flag, * won't be stored on disk */ @@ -906,13 +907,23 @@ enum lcme_id { struct lov_comp_md_entry_v1 { __u32 lcme_id; /* unique id of component */ __u32 lcme_flags; /* LCME_FL_XXX */ - struct lu_extent lcme_extent; /* file extent for component */ + /* file extent for component. If it's an EC code component, its flags + * contains LCME_FL_PARITY, and its extent covers the same extent of + * its corresponding data component. + */ + struct lu_extent lcme_extent; __u32 lcme_offset; /* offset of component blob, start from lov_comp_md_v1 */ __u32 lcme_size; /* size of component blob */ __u32 lcme_layout_gen; __u64 lcme_timestamp; /* snapshot time if applicable*/ - __u32 lcme_padding_1; + __u8 lcme_dstripe_count; /* data stripe count, + * k value in EC + */ + __u8 lcme_cstripe_count; /* code stripe count, + * p value in EC + */ + __u16 lcme_padding_1; } __attribute__((packed)); #define SEQ_ID_MAX 0x0000FFFF @@ -954,7 +965,10 @@ struct lov_comp_md_v1 { /* lcm_mirror_count stores the number of actual mirrors minus 1, * so that non-flr files will have value 0 meaning 1 mirror. */ __u16 lcm_mirror_count; - __u16 lcm_padding1[3]; + /* code components count, non-EC file contains 0 ec_count */ + __u8 lcm_ec_count; + __u8 lcm_padding3[1]; + __u16 lcm_padding1[2]; __u64 lcm_padding2; struct lov_comp_md_entry_v1 lcm_entries[0]; } __attribute__((packed)); diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index e3c0f47..46d937d 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -2426,8 +2426,10 @@ void lustre_swab_lov_comp_md_v1(struct lov_comp_md_v1 *lum) __swab16s(&lum->lcm_flags); __swab16s(&lum->lcm_entry_count); __swab16s(&lum->lcm_mirror_count); + /* no need to swab lcm_ec_count */ BUILD_BUG_ON(offsetof(typeof(*lum), lcm_padding1) == 0); BUILD_BUG_ON(offsetof(typeof(*lum), lcm_padding2) == 0); + BUILD_BUG_ON(offsetof(typeof(*lum), lcm_padding3) == 0); for (i = 0; i < ent_count; i++) { ent = &lum->lcm_entries[i]; @@ -2446,6 +2448,8 @@ void lustre_swab_lov_comp_md_v1(struct lov_comp_md_v1 *lum) __swab32s(&ent->lcme_offset); __swab32s(&ent->lcme_size); __swab32s(&ent->lcme_layout_gen); + /* no need to swab lcme_dstripe_count */ + /* no need to swab lcme_cstripe_count */ BUILD_BUG_ON(offsetof(typeof(*ent), lcme_padding_1) == 0); v1 = (struct lov_user_md_v1 *)((char *)lum + off); diff --git a/lustre/ptlrpc/wiretest.c b/lustre/ptlrpc/wiretest.c index fea0df8..6250bb4 100644 --- a/lustre/ptlrpc/wiretest.c +++ b/lustre/ptlrpc/wiretest.c @@ -1817,9 +1817,17 @@ void lustre_assert_wire_constants(void) (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_timestamp)); LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_timestamp) == 8, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_timestamp)); - LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1) == 44, "found %lld\n", + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_dstripe_count) == 44, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_dstripe_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_dstripe_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_dstripe_count)); + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_cstripe_count) == 45, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_cstripe_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_cstripe_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_cstripe_count)); + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1) == 46, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1)); - LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1) == 4, "found %lld\n", + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1) == 2, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1)); BUILD_BUG_ON(LCME_FL_STALE != 0x00000001); BUILD_BUG_ON(LCME_FL_PREF_RD != 0x00000002); @@ -1858,9 +1866,17 @@ void lustre_assert_wire_constants(void) (long long)(int)offsetof(struct lov_comp_md_v1, lcm_mirror_count)); LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_mirror_count) == 2, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_mirror_count)); - LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding1) == 18, "found %lld\n", + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_ec_count) == 18, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_v1, lcm_ec_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_ec_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_ec_count)); + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding3) == 19, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding3)); + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding3) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding3)); + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding1) == 20, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding1)); - LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1) == 6, "found %lld\n", + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1) == 4, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1)); LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding2) == 24, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding2)); diff --git a/lustre/utils/wirecheck.c b/lustre/utils/wirecheck.c index 0a619d5..ce055ca 100644 --- a/lustre/utils/wirecheck.c +++ b/lustre/utils/wirecheck.c @@ -844,6 +844,8 @@ check_lov_comp_md_entry_v1(void) CHECK_MEMBER(lov_comp_md_entry_v1, lcme_size); CHECK_MEMBER(lov_comp_md_entry_v1, lcme_layout_gen); CHECK_MEMBER(lov_comp_md_entry_v1, lcme_timestamp); + CHECK_MEMBER(lov_comp_md_entry_v1, lcme_dstripe_count); + CHECK_MEMBER(lov_comp_md_entry_v1, lcme_cstripe_count); CHECK_MEMBER(lov_comp_md_entry_v1, lcme_padding_1); CHECK_CVALUE_X(LCME_FL_STALE); @@ -868,6 +870,8 @@ check_lov_comp_md_v1(void) CHECK_MEMBER(lov_comp_md_v1, lcm_flags); CHECK_MEMBER(lov_comp_md_v1, lcm_entry_count); CHECK_MEMBER(lov_comp_md_v1, lcm_mirror_count); + CHECK_MEMBER(lov_comp_md_v1, lcm_ec_count); + CHECK_MEMBER(lov_comp_md_v1, lcm_padding3); CHECK_MEMBER(lov_comp_md_v1, lcm_padding1); CHECK_MEMBER(lov_comp_md_v1, lcm_padding2); CHECK_MEMBER(lov_comp_md_v1, lcm_entries[0]); diff --git a/lustre/utils/wiretest.c b/lustre/utils/wiretest.c index 576dbc9..fc0d981 100644 --- a/lustre/utils/wiretest.c +++ b/lustre/utils/wiretest.c @@ -1843,9 +1843,17 @@ void lustre_assert_wire_constants(void) (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_timestamp)); LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_timestamp) == 8, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_timestamp)); - LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1) == 44, "found %lld\n", + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_dstripe_count) == 44, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_dstripe_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_dstripe_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_dstripe_count)); + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_cstripe_count) == 45, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_cstripe_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_cstripe_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_cstripe_count)); + LASSERTF((int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1) == 46, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_entry_v1, lcme_padding_1)); - LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1) == 4, "found %lld\n", + LASSERTF((int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1) == 2, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_entry_v1 *)0)->lcme_padding_1)); BUILD_BUG_ON(LCME_FL_STALE != 0x00000001); BUILD_BUG_ON(LCME_FL_PREF_RD != 0x00000002); @@ -1855,6 +1863,7 @@ void lustre_assert_wire_constants(void) BUILD_BUG_ON(LCME_FL_INIT != 0x00000010); BUILD_BUG_ON(LCME_FL_NOSYNC != 0x00000020); BUILD_BUG_ON(LCME_FL_EXTENSION != 0x00000040); + BUILD_BUG_ON(LCME_FL_PARITY != 0x00000080); BUILD_BUG_ON(LCME_FL_NEG != 0x80000000); /* Checks for struct lov_comp_md_v1 */ @@ -1884,9 +1893,17 @@ void lustre_assert_wire_constants(void) (long long)(int)offsetof(struct lov_comp_md_v1, lcm_mirror_count)); LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_mirror_count) == 2, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_mirror_count)); - LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding1) == 18, "found %lld\n", + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_ec_count) == 18, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_v1, lcm_ec_count)); + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_ec_count) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_ec_count)); + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding3) == 19, "found %lld\n", + (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding3)); + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding3) == 1, "found %lld\n", + (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding3)); + LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding1) == 20, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding1)); - LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1) == 6, "found %lld\n", + LASSERTF((int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1) == 4, "found %lld\n", (long long)(int)sizeof(((struct lov_comp_md_v1 *)0)->lcm_padding1)); LASSERTF((int)offsetof(struct lov_comp_md_v1, lcm_padding2) == 24, "found %lld\n", (long long)(int)offsetof(struct lov_comp_md_v1, lcm_padding2));