All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tao Ma <tm@tao.ma>
To: linux-ext4@vger.kernel.org
Cc: "Darrick J. Wong" <djwong@us.ibm.com>, Theodore Ts'o <tytso@mit.edu>
Subject: Re: [PATCH] ext4: Use s_csum_seed instead of i_csum_seed for xattr block csum.
Date: Mon, 03 Sep 2012 11:14:19 +0800	[thread overview]
Message-ID: <5044208B.2080008@tao.ma> (raw)
In-Reply-To: <1340547236-2838-1-git-send-email-tm@tao.ma>

Hi Ted,
	As the corresponding kernel change has been merged, can this patch be
merged to the e2fsporgs also?

Thanks
Tao
On 06/24/2012 10:13 PM, Tao Ma wrote:
> From: Tao Ma <boyu.mt@taobao.com>
> 
> In xattr block operation, we use h_refcount to indicate whether the
> xattr block is shared among many inodes. And xattr block csum uses
> s_csum_seed if it is shared and i_csum_seed if it belongs to
> one inode. But this has a problem. So consider the block is shared
> first bewteen inode A and B, and B has some xattr update and CoW
> the xattr block. When it updates the *old* xattr block(because
> of the h_refcount change) and calls ext4_xattr_release_block, we
> has no idea that inode A is the real owner of the *old* xattr
> block and we can't use the i_csum_seed of inode A either in xattr
> block csum calculation. And I don't think we have an easy way to
> find inode A.
> 
> So this patch just removes the tricky i_csum_seed and we now uses
> s_csum_seed every time for the xattr block csum. The corresponding
> patch for the e2fsprogs will be sent in another patch.
> 
> This is spotted by xfstests 117.
> 
> Cc: Darrick J. Wong <djwong@us.ibm.com>
> Cc: "Theodore Ts'o" <tytso@mit.edu>
> Signed-off-by: Tao Ma <boyu.mt@taobao.com>
> ---
>  fs/ext4/xattr.c |   11 ++++-------
>  1 files changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
> index e56c9ed..2cdb98d 100644
> --- a/fs/ext4/xattr.c
> +++ b/fs/ext4/xattr.c
> @@ -127,19 +127,16 @@ static __le32 ext4_xattr_block_csum(struct inode *inode,
>  				    struct ext4_xattr_header *hdr)
>  {
>  	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
> -	struct ext4_inode_info *ei = EXT4_I(inode);
>  	__u32 csum, old;
>  
>  	old = hdr->h_checksum;
>  	hdr->h_checksum = 0;
> -	if (le32_to_cpu(hdr->h_refcount) != 1) {
> -		block_nr = cpu_to_le64(block_nr);
> -		csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&block_nr,
> -				   sizeof(block_nr));
> -	} else
> -		csum = ei->i_csum_seed;
> +	block_nr = cpu_to_le64(block_nr);
> +	csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&block_nr,
> +			   sizeof(block_nr));
>  	csum = ext4_chksum(sbi, csum, (__u8 *)hdr,
>  			   EXT4_BLOCK_SIZE(inode->i_sb));
> +
>  	hdr->h_checksum = old;
>  	return cpu_to_le32(csum);
>  }
> 


  parent reply	other threads:[~2012-09-03  3:14 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-24 14:13 [PATCH] ext4: Use s_csum_seed instead of i_csum_seed for xattr block csum Tao Ma
2012-06-26  2:23 ` Theodore Ts'o
2012-06-28 20:15   ` Darrick J. Wong
2012-06-29  2:27     ` Andreas Dilger
2012-06-29 18:13       ` Ted Ts'o
2012-06-30 14:19         ` Tao Ma
2012-07-09 14:12 ` Theodore Ts'o
2012-09-03  3:14 ` Tao Ma [this message]
2012-09-03  3:39   ` Theodore Ts'o
2012-09-03  5:37     ` Tao Ma

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=5044208B.2080008@tao.ma \
    --to=tm@tao.ma \
    --cc=djwong@us.ibm.com \
    --cc=linux-ext4@vger.kernel.org \
    --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.