lkml.org 
[lkml]   [2012]   [Jan]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 15/23] jbd2: Change disk layout for metadata checksumming
    From
    Date
    Define flags and allocate space in on-disk journal structures to support
    checksumming of journal metadata.

    Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
    ---
    include/linux/jbd2.h | 28 +++++++++++++++++++++++++++-
    1 files changed, 27 insertions(+), 1 deletions(-)


    diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
    index 2092ea2..ecd9b45 100644
    --- a/include/linux/jbd2.h
    +++ b/include/linux/jbd2.h
    @@ -147,12 +147,24 @@ typedef struct journal_header_s
    #define JBD2_CRC32_CHKSUM 1
    #define JBD2_MD5_CHKSUM 2
    #define JBD2_SHA1_CHKSUM 3
    +#define JBD2_CRC32C_CHKSUM 4

    #define JBD2_CRC32_CHKSUM_SIZE 4

    #define JBD2_CHECKSUM_BYTES (32 / sizeof(u32))
    /*
    * Commit block header for storing transactional checksums:
    + *
    + * NOTE: If FEATURE_COMPAT_CHECKSUM (checksum v1) is set, the h_chksum*
    + * fields are used to store a checksum of the descriptor and data blocks.
    + *
    + * If FEATURE_INCOMPAT_CSUM_V2 (checksum v2) is set, then the h_chksum
    + * field is used to store crc32c(uuid+commit_block). Each journal metadata
    + * block gets its own checksum, and data block checksums are stored in
    + * journal_block_tag (in the descriptor). The other h_chksum* fields are
    + * not used.
    + *
    + * Checksum v1 and v2 are mutually exclusive features.
    */
    struct commit_header {
    __be32 h_magic;
    @@ -177,11 +189,17 @@ typedef struct journal_block_tag_s
    __be32 t_blocknr; /* The on-disk block number */
    __be32 t_flags; /* See below */
    __be32 t_blocknr_high; /* most-significant high 32bits. */
    + __be32 t_checksum; /* crc32c(uuid+seq+block) */
    } journal_block_tag_t;

    #define JBD2_TAG_SIZE32 (offsetof(journal_block_tag_t, t_blocknr_high))
    #define JBD2_TAG_SIZE64 (sizeof(journal_block_tag_t))

    +/* Tail of descriptor block, for checksumming */
    +struct jbd2_journal_block_tail {
    + __be32 t_checksum; /* crc32c(uuid+descr_block) */
    +};
    +
    /*
    * The revoke descriptor: used on disk to describe a series of blocks to
    * be revoked from the log
    @@ -192,6 +210,10 @@ typedef struct jbd2_journal_revoke_header_s
    __be32 r_count; /* Count of bytes used in the block */
    } jbd2_journal_revoke_header_t;

    +/* Tail of revoke block, for checksumming */
    +struct jbd2_journal_revoke_tail {
    + __be32 r_checksum; /* crc32c(uuid+revoke_block) */
    +};

    /* Definitions for the journal tag flags word: */
    #define JBD2_FLAG_ESCAPE 1 /* on-disk block is escaped */
    @@ -241,7 +263,10 @@ typedef struct journal_superblock_s
    __be32 s_max_trans_data; /* Limit of data blocks per trans. */

    /* 0x0050 */
    - __u32 s_padding[44];
    + __u8 s_checksum_type; /* checksum type */
    + __u8 s_padding2[3];
    + __u32 s_padding[42];
    + __be32 s_checksum; /* crc32c(superblock) */

    /* 0x0100 */
    __u8 s_users[16*48]; /* ids of all fs'es sharing the log */
    @@ -263,6 +288,7 @@ typedef struct journal_superblock_s
    #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001
    #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002
    #define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004
    +#define JBD2_FEATURE_INCOMPAT_CSUM_V2 0x00000008

    /* Features known to this kernel version: */
    #define JBD2_KNOWN_COMPAT_FEATURES JBD2_FEATURE_COMPAT_CHECKSUM


    \
     
     \ /
      Last update: 2012-01-07 09:35    [W:0.025 / U:28.980 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site