All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Dilger <adilger.kernel@dilger.ca>
To: Ted Ts'o <tytso@mit.edu>
Cc: "Darrick J. Wong" <djwong@us.ibm.com>,
	Sunil Mushran <sunil.mushran@oracle.com>,
	Amir Goldstein <amir73il@gmail.com>,
	Andi Kleen <andi@firstfloor.org>, Mingming Cao <cmm@us.ibm.com>,
	Joel Becker <jlbec@evilplan.org>,
	linux-ext4@vger.kernel.org, Coly Li <colyli@gmail.com>
Subject: Re: [PATCH 11/37] libext2fs: Create the inode bitmap checksum
Date: Wed, 14 Sep 2011 13:59:06 -0600	[thread overview]
Message-ID: <1240A2E8-5AA6-4F97-BB36-944A2F51B2E5@dilger.ca> (raw)
In-Reply-To: <20110914170259.GG3429@dhcp-172-31-195-159.cam.corp.google.com>

On 2011-09-14, at 11:02 AM, Ted Ts'o wrote:
> On Wed, Aug 31, 2011 at 05:36:22PM -0700, Darrick J. Wong wrote:
>> diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
>> index 1f08673..367bfdf 100644
>> --- a/lib/ext2fs/ext2_fs.h
>> +++ b/lib/ext2fs/ext2_fs.h
>> @@ -169,7 +169,8 @@ struct ext4_group_desc
>> 	__u16	bg_free_inodes_count_hi;/* Free inodes count MSB */
>> 	__u16	bg_used_dirs_count_hi;	/* Directories count MSB */
>> 	__u16	bg_itable_unused_hi;	/* Unused inodes count MSB */
>> -	__u32	bg_reserved2[3];
>> +	__u32	bg_inode_bitmap_csum;	/* crc32c(uuid+group+ibitmap) */
>> +	__u32	bg_reserved2[2];
>> };
> 
> One of the reasons why I like to coalesce the patches to the data
> structures into their own separate commit, is it's hard when I'm
> reviewing individual patches in a mail reader what's going on from a
> big picture spective.  (Heck, even just *finding* the patches that
> modify the on-disk format is hard....)
> 
> But as near as I can tell, your patch series only uses one of the
> 32-bit fields in bg_reserved.  Is there a good reason why
> bg_inode_bitmap_csum can't also used one of the two fields in
> bg_reserved?  That way we get two 32-bit checksums for both struct
> ext2_group_desc and struct ext4_group_desc.  Is there a third 32-bit
> per-block group checksum I'm forgetting about?

There is the field that you told Amir he could use for the exception
bitmap for snapshots, which is using one of the two reserved fields in
ext2_group_desc, and also one of the 3 reserved fields in ext4_group_desc
for 64-bit block numbers.  That leaves one __u32 in ext2_group_desc, and
two __u32 in ext4_group_desc for checksums.

My proposal was as follows.  It adds the split checksums for block and
inode bitmaps, and renames bg_checksum to bg_group_desc_csum to avoid
confusion with these new checksums.  Truncate after bg_group_desc_csum
for smaller ext2_group_desc version.

struct ext4_group_desc
{
        __le32  bg_block_bitmap_lo;     /* Blocks bitmap block */
        __le32  bg_inode_bitmap_lo;     /* Inodes bitmap block */
        __le32  bg_inode_table_lo;      /* Inodes table block */
        __le16  bg_free_blocks_count_lo;/* Free blocks count */
        __le16  bg_free_inodes_count_lo;/* Free inodes count */
        __le16  bg_used_dirs_count_lo;  /* Directories count */
        __le16  bg_flags;               /* EXT4_BG_flags (INODE_UNINIT, etc) */
        __le32  bg_exclude_bitmap_lo;   /* Snapshot exclude bitmap block LSB */
        __le16  bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
        __le16  bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bitmap) LSB */
        __le16  bg_itable_unused_lo;    /* Unused inodes count */
        __le16  bg_group_desc_csum;     /* crc16(sb_uuid+group+desc) */
        __le32  bg_block_bitmap_hi;     /* Blocks bitmap block MSB */
        __le32  bg_inode_bitmap_hi;     /* Inodes bitmap block MSB */
        __le32  bg_inode_table_hi;      /* Inodes table block MSB */
        __le16  bg_free_blocks_count_hi;/* Free blocks count MSB */
        __le16  bg_free_inodes_count_hi;/* Free inodes count MSB */
        __le16  bg_used_dirs_count_hi;  /* Directories count MSB */
        __le16  bg_itable_unused_hi;    /* Unused inodes count MSB */
	__le32	bg_exclude_bitmap_hi;	/* Exclude bitmap block MSB */
        __le16  bg_block_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
        __le16  bg_inode_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bitmap) MSB */
        __le32  bg_reserved2;
};

Whether crc32c & 0xffff is as strong as crc16 is open for debate, but it
isn't completely worthless (it provides some protection, and crc32c is
much faster at least for larger block sizes), and is only for filesystems
upgraded in-place from ext3 so it isn't critical in the long run.  I'd
rather have less complex and faster code than having to conditionally
compute crc16 vs crc32c depending on the ext4_group_desc size.

There is also the question if we want to extend bg_group_desc_csum and/or
the bg_flags values to be 32-bit fields?  If we do, then that uses up all
of the space in the 64-byte group descriptor and we would need to bump it
to 128 bytes to add any new fields.  We can deal with that when we run
out of flags.  I don't think there is a need to have a 32-bit checksum
for such a small structure, and potentially it makes sense to use the low
bits of crc32c instead of crc16 just to stick with a single algorithm for
the filesystem.

Cheers, Andreas

  parent reply	other threads:[~2011-09-14 19:59 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-01  0:35 [PATCH v1 00/37] e2fsprogs: Add metadata checksumming Darrick J. Wong
2011-09-01  0:35 ` [PATCH 01/37] e2fsprogs: Read and write full-sized inodes Darrick J. Wong
2011-09-03 18:05   ` Andreas Dilger
2011-09-04 14:04     ` Ted Ts'o
2011-09-04 17:40       ` Andreas Dilger
2011-09-14 16:39   ` Ted Ts'o
2011-09-15 20:25     ` Darrick J. Wong
2011-09-15 21:35       ` Andreas Dilger
2011-09-16  1:04         ` Darrick J. Wong
2011-09-18  1:52           ` Ted Ts'o
2011-09-01  0:35 ` [PATCH 02/37] libext2fs: Add metadata checksum flag Darrick J. Wong
2011-09-04  1:47   ` Andreas Dilger
2011-09-01  0:35 ` [PATCH 03/37] debugfs: Optionally ignore bad checksums Darrick J. Wong
2011-09-01  0:35 ` [PATCH 04/37] libext2fs: Add crc32c implementation for metadata checksumming Darrick J. Wong
2011-09-16  3:32   ` Ted Ts'o
2011-09-01  0:35 ` [PATCH 05/37] libext2fs: Implement a crc32c self-test Darrick J. Wong
2011-09-01  0:35 ` [PATCH 06/37] libext2fs: Add inode checksum support Darrick J. Wong
2011-09-04 17:59   ` Andreas Dilger
2011-09-05 18:59     ` Darrick J. Wong
2011-09-01  0:35 ` [PATCH 07/37] debugfs: Dump inode checksum when appropriate Darrick J. Wong
2011-09-01  0:36 ` [PATCH 08/37] tune2fs: Add inode checksum support Darrick J. Wong
2011-09-01  0:36 ` [PATCH 09/37] e2fsck: Verify and correct inode checksums Darrick J. Wong
2011-09-04 18:17   ` Andreas Dilger
2011-09-05 19:05     ` Darrick J. Wong
2011-09-01  0:36 ` [PATCH 10/37] mke2fs: Allow metadata checksums to be turned on at mkfs time Darrick J. Wong
2011-09-04 18:28   ` Andreas Dilger
2011-09-05 19:20     ` Darrick J. Wong
2011-09-06  1:54       ` Andreas Dilger
2011-09-06 17:13         ` Darrick J. Wong
2011-09-01  0:36 ` [PATCH 11/37] libext2fs: Create the inode bitmap checksum Darrick J. Wong
2011-09-14 17:02   ` Ted Ts'o
2011-09-14 19:31     ` Darrick J. Wong
2011-09-14 20:00       ` Andreas Dilger
2011-09-14 19:59     ` Andreas Dilger [this message]
2011-09-14 22:14       ` Ted Ts'o
2011-09-01  0:36 ` [PATCH 12/37] tune2fs: Rewrite inode bitmap checksums Darrick J. Wong
2011-09-01  0:36 ` [PATCH 13/37] dumpe2fs: Display inode bitmap checksum Darrick J. Wong
2011-09-04 18:30   ` Andreas Dilger
2011-09-05 19:20     ` Darrick J. Wong
2011-09-01  0:36 ` [PATCH 14/37] e2fsck: Verify " Darrick J. Wong
2011-09-01  0:36 ` [PATCH 15/37] libext2fs: Create the block " Darrick J. Wong
2011-09-01  0:36 ` [PATCH 16/37] dumpe2fs: Display " Darrick J. Wong
2011-09-01  0:37 ` [PATCH 17/37] e2fsck: Verify " Darrick J. Wong
2011-09-01  0:37 ` [PATCH 18/37] e2fsck: Don't verify bitmap checksums Darrick J. Wong
2011-09-01  0:37 ` [PATCH 19/37] tune2fs: Rewrite block " Darrick J. Wong
2011-09-01  0:37 ` [PATCH 20/37] libext2fs: Verify and calculate extent tree block checksums Darrick J. Wong
2011-09-01  0:37 ` [PATCH 21/37] tune2fs: Enable extent tree checksums Darrick J. Wong
2011-09-01  0:37 ` [PATCH 22/37] libext2fs: Introduce dx_tail and dir_entry_tail Darrick J. Wong
2011-09-01  0:37 ` [PATCH 23/37] debugfs: Print htree internal node checksums Darrick J. Wong
2011-09-01  0:37 ` [PATCH 24/37] libext2fs: Add dx_root/dx_node checksum calculation and verification helpers Darrick J. Wong
2011-09-01  0:37 ` [PATCH 25/37] e2fsck: Verify htree root/node checksums Darrick J. Wong
2011-09-01  0:37 ` [PATCH 26/37] libext2fs: Introduce dir_entry_tail to provide checksums for directory leaf nodes Darrick J. Wong
2011-09-01  0:38 ` [PATCH 27/37] e2fsck: Check directory leaf block checksums Darrick J. Wong
2011-09-01  0:38 ` [PATCH 28/37] tune2fs: Rebuild and checksum directories when toggling metadata_csum or changing UUID Darrick J. Wong
2011-09-01  0:38 ` [PATCH 29/37] libext2fs: Verify and calculate extended attribute block checksums Darrick J. Wong
2011-09-01  0:38 ` [PATCH 30/37] e2fsck: Check " Darrick J. Wong
2011-09-01  0:38 ` [PATCH 32/37] libext2fs: Extend inode checksum to cover the EA block Darrick J. Wong
2011-09-14 16:48   ` Ted Ts'o
2011-09-01  0:38 ` [PATCH 33/37] tune2fs: Rewrite extended attribute block checksums Darrick J. Wong
2011-09-01  0:38 ` [PATCH 34/37] libext2fs: Calculate and verify superblock checksums Darrick J. Wong
2011-09-01  0:38 ` [PATCH 35/37] e2fsck: Handle superblock checksum errors gracefully Darrick J. Wong
2011-09-01  0:39 ` [PATCH 36/37] e2p: Print superblock checksum in list_super Darrick J. Wong
2011-09-01  0:39 ` [PATCH 37/37] e2fsck: Support CRC32c checksum in journal commit blocks Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1240A2E8-5AA6-4F97-BB36-944A2F51B2E5@dilger.ca \
    --to=adilger.kernel@dilger.ca \
    --cc=amir73il@gmail.com \
    --cc=andi@firstfloor.org \
    --cc=cmm@us.ibm.com \
    --cc=colyli@gmail.com \
    --cc=djwong@us.ibm.com \
    --cc=jlbec@evilplan.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=sunil.mushran@oracle.com \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.