[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <434BECC9-8882-4C42-95C9-827C0A53CF68@dilger.ca>
Date: Thu, 10 Dec 2020 15:18:09 -0700
From: Andreas Dilger <adilger@...ger.ca>
To: Harshad Shirwadkar <harshadshirwadkar@...il.com>
Cc: linux-ext4@...r.kernel.org, tytso@....edu
Subject: Re: [PATCH v2 02/15] e2fsck: add kernel endian-ness conversion macros
On Dec 10, 2020, at 10:55 AM, harshadshirwadkar@...il.com wrote:
>
> From: Harshad Shirwadkar <harshadshirwadkar@...il.com>
>
> In order to make recovery.c identical with kernel, we need endianness
> conversion macros (such as cpu_to_be32 and friends) defined in
> e2fsprogs. This patch defines these macros and also fixes recovery.c
> to use these. These macros are also needed for fast commit recovery
> patches later in this series.
>
> Signed-off-by: Harshad Shirwadkar <harshadshirwadkar@...il.com>'
Reviewed-by: Andreas Dilger <adilger@...ger.ca>
> ---
> e2fsck/recovery.c | 42 ++++++++++-------------------------------
> lib/ext2fs/jfs_compat.h | 6 ++++++
> 2 files changed, 16 insertions(+), 32 deletions(-)
>
> diff --git a/e2fsck/recovery.c b/e2fsck/recovery.c
> index 5df690ad..6c3b7bb4 100644
> --- a/e2fsck/recovery.c
> +++ b/e2fsck/recovery.c
> @@ -121,27 +121,6 @@ failed:
>
> #endif /* __KERNEL__ */
>
> -static inline __u32 get_be32(__be32 *p)
> -{
> - unsigned char *cp = (unsigned char *) p;
> - __u32 ret;
> -
> - ret = *cp++;
> - ret = (ret << 8) + *cp++;
> - ret = (ret << 8) + *cp++;
> - ret = (ret << 8) + *cp++;
> - return ret;
> -}
> -
> -static inline __u16 get_be16(__be16 *p)
> -{
> - unsigned char *cp = (unsigned char *) p;
> - __u16 ret;
> -
> - ret = *cp++;
> - ret = (ret << 8) + *cp++;
> - return ret;
> -}
>
> /*
> * Read a block from the journal
> @@ -232,10 +211,10 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
>
> nr++;
> tagp += tag_bytes;
> - if (!(get_be16(&tag->t_flags) & JBD2_FLAG_SAME_UUID))
> + if (!(tag->t_flags & cpu_to_be16(JBD2_FLAG_SAME_UUID)))
> tagp += 16;
>
> - if (get_be16(&tag->t_flags) & JBD2_FLAG_LAST_TAG)
> + if (tag->t_flags & cpu_to_be16(JBD2_FLAG_LAST_TAG))
> break;
> }
>
> @@ -358,9 +337,9 @@ int jbd2_journal_skip_recovery(journal_t *journal)
> static inline unsigned long long read_tag_block(journal_t *journal,
> journal_block_tag_t *tag)
> {
> - unsigned long long block = get_be32(&tag->t_blocknr);
> + unsigned long long block = be32_to_cpu(tag->t_blocknr);
> if (jbd2_has_feature_64bit(journal))
> - block |= (u64)get_be32(&tag->t_blocknr_high) << 32;
> + block |= (u64)be32_to_cpu(tag->t_blocknr_high) << 32;
> return block;
> }
>
> @@ -429,9 +408,9 @@ static int jbd2_block_tag_csum_verify(journal_t *j, journal_block_tag_t *tag,
> csum32 = jbd2_chksum(j, csum32, buf, j->j_blocksize);
>
> if (jbd2_has_feature_csum3(j))
> - return get_be32(&tag3->t_checksum) == csum32;
> -
> - return get_be16(&tag->t_checksum) == (csum32 & 0xFFFF);
> + return tag3->t_checksum == cpu_to_be32(csum32);
> + else
> + return tag->t_checksum == cpu_to_be16(csum32);
> }
>
> static int do_one_pass(journal_t *journal,
> @@ -579,7 +558,7 @@ static int do_one_pass(journal_t *journal,
> unsigned long io_block;
>
> tag = (journal_block_tag_t *) tagp;
> - flags = get_be16(&tag->t_flags);
> + flags = be16_to_cpu(tag->t_flags);
>
> io_block = next_log_block++;
> wrap(journal, next_log_block);
> @@ -643,9 +622,8 @@ static int do_one_pass(journal_t *journal,
> memcpy(nbh->b_data, obh->b_data,
> journal->j_blocksize);
> if (flags & JBD2_FLAG_ESCAPE) {
> - __be32 magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
> - memcpy(nbh->b_data, &magic,
> - sizeof(magic));
> + *((__be32 *)nbh->b_data) =
> + cpu_to_be32(JBD2_MAGIC_NUMBER);
> }
>
> BUFFER_TRACE(nbh, "marking dirty");
> diff --git a/lib/ext2fs/jfs_compat.h b/lib/ext2fs/jfs_compat.h
> index 2bda521d..63ebef99 100644
> --- a/lib/ext2fs/jfs_compat.h
> +++ b/lib/ext2fs/jfs_compat.h
> @@ -20,12 +20,18 @@
> #define REQ_OP_READ 0
> #define REQ_OP_WRITE 1
>
> +#define cpu_to_le16(x) ext2fs_cpu_to_le16(x)
> #define cpu_to_be16(x) ext2fs_cpu_to_be16(x)
> +#define cpu_to_le32(x) ext2fs_cpu_to_le32(x)
> #define cpu_to_be32(x) ext2fs_cpu_to_be32(x)
> +#define cpu_to_le64(x) ext2fs_cpu_to_le64(x)
> #define cpu_to_be64(x) ext2fs_cpu_to_be64(x)
>
> +#define le16_to_cpu(x) ext2fs_le16_to_cpu(x)
> #define be16_to_cpu(x) ext2fs_be16_to_cpu(x)
> +#define le32_to_cpu(x) ext2fs_le32_to_cpu(x)
> #define be32_to_cpu(x) ext2fs_be32_to_cpu(x)
> +#define le64_to_cpu(x) ext2fs_le64_to_cpu(x)
> #define be64_to_cpu(x) ext2fs_be64_to_cpu(x)
>
> typedef unsigned int tid_t;
> --
> 2.29.2.576.ga3fc446d84-goog
>
Cheers, Andreas
Download attachment "signature.asc" of type "application/pgp-signature" (874 bytes)
Powered by blists - more mailing lists