Whamcloud - gitweb
LU-12186 ec: add necessary structure member for EC file 19/38319/5
authorBobi Jam <bobijam@whamcloud.com>
Mon, 2 May 2022 14:47:47 +0000 (10:47 -0400)
committerOleg Drokin <green@whamcloud.com>
Sat, 11 Jun 2022 05:29:54 +0000 (05:29 +0000)
Added basic structure members for erasure-coding layout.

Test-Parameters: trivial
Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: I697dc144877d6c5fbe9335dc721200e43749f5d9
Reviewed-on: https://review.whamcloud.com/38319
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Bobi Jam <bobijam@hotmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/lustre/lustreapi.h
lustre/include/uapi/linux/lustre/lustre_user.h
lustre/ptlrpc/pack_generic.c
lustre/ptlrpc/wiretest.c
lustre/utils/wirecheck.c
lustre/utils/wiretest.c

index 0284da0..4c60b6e 100644 (file)
@@ -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" },
 };
 
 /**
index 98507e0..eaadaca 100644 (file)
@@ -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));
index e3c0f47..46d937d 100644 (file)
@@ -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);
index fea0df8..6250bb4 100644 (file)
@@ -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));
index 0a619d5..ce055ca 100644 (file)
@@ -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]);
index 576dbc9..fc0d981 100644 (file)
@@ -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));