All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josef Bacik <jbacik@fusionio.com>
To: Liu Bo <bo.li.liu@oracle.com>
Cc: "linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>,
	Josef Bacik <JBacik@fusionio.com>,
	"dave@jikos.cz" <dave@jikos.cz>
Subject: Re: [PATCH v2 1/6] Btrfs: fix a bug of per-file nocow
Date: Mon, 10 Sep 2012 15:18:03 -0400	[thread overview]
Message-ID: <20120910191803.GG2270@localhost.localdomain> (raw)
In-Reply-To: <1347069690-30223-2-git-send-email-bo.li.liu@oracle.com>

On Fri, Sep 07, 2012 at 08:01:25PM -0600, Liu Bo wrote:
> Users report a bug, the reproducer is:
> $ mkfs.btrfs /dev/loop0
> $ mount /dev/loop0 /mnt/btrfs/
> $ mkdir /mnt/btrfs/dir
> $ chattr +C /mnt/btrfs/dir/
> $ dd if=/dev/zero of=/mnt/btrfs/dir/foo bs=4K count=10;
> $ lsattr /mnt/btrfs/dir/foo
> ---------------C- /mnt/btrfs/dir/foo
> $ filefrag /mnt/btrfs/dir/foo
> /mnt/btrfs/dir/foo: 1 extent found    ---> an extent
> $ dd if=/dev/zero of=/mnt/btrfs/dir/foo bs=4K count=1 seek=5 conv=notrunc,nocreat; sync
> $ filefrag /mnt/btrfs/dir/foo
> /mnt/btrfs/dir/foo: 3 extents found   ---> with nocow, btrfs breaks the extent into three parts
> 
> The new created file should not only inherit the NODATACOW flag, but also
> honor NODATASUM flag, because we must do COW on a file extent with checksum.
> 
> Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
> ---
> v1->v2: add check for only regular file
> 
>  fs/btrfs/inode.c |    3 +--
>  fs/btrfs/ioctl.c |    7 +++++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index b2c3514..9bce6e9 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -4720,8 +4720,7 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
>  	if (S_ISREG(mode)) {
>  		if (btrfs_test_opt(root, NODATASUM))
>  			BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
> -		if (btrfs_test_opt(root, NODATACOW) ||
> -		    (BTRFS_I(dir)->flags & BTRFS_INODE_NODATACOW))
> +		if (btrfs_test_opt(root, NODATACOW))
>  			BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
>  	}
>  
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 00ddf22..2fd5455 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -140,8 +140,11 @@ void btrfs_inherit_iflags(struct inode *inode, struct inode *dir)
>  		BTRFS_I(inode)->flags |= BTRFS_INODE_COMPRESS;
>  	}
>  
> -	if (flags & BTRFS_INODE_NODATACOW)
> -		BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
> +	if (flags & BTRFS_INODE_NODATACOW) {
> +		BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW |
> +		if (S_ISREG(inode->i_mode))
> +			BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
> +	}
>  

This doesn't compile.  Thanks,

Josef

  reply	other threads:[~2012-09-10 19:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-08  2:01 [PATCH v2 0/6] bug-fixes and cleanup Liu Bo
2012-09-08  2:01 ` [PATCH v2 1/6] Btrfs: fix a bug of per-file nocow Liu Bo
2012-09-10 19:18   ` Josef Bacik [this message]
2012-09-08  2:01 ` [PATCH v2 2/6] Btrfs: cleanup for unused ref cache stuff Liu Bo
2012-09-08  2:01 ` [PATCH v2 3/6] Btrfs: update delayed ref's tracepoints to show sequence Liu Bo
2012-09-08  2:01 ` [PATCH v2 4/6] Btrfs: fix a bug in parsing return value in logical resolve Liu Bo
2012-09-08  2:01 ` [PATCH v2 5/6] Btrfs: use helper for " Liu Bo
2012-09-08  2:01 ` [PATCH v2 6/6] Btrfs: use larger limit for translation of logical to inode Liu Bo
2012-09-10 16:20 ` [PATCH v2 0/6] bug-fixes and cleanup Josef Bacik
2012-09-10 16:28   ` Liu Bo

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=20120910191803.GG2270@localhost.localdomain \
    --to=jbacik@fusionio.com \
    --cc=bo.li.liu@oracle.com \
    --cc=dave@jikos.cz \
    --cc=linux-btrfs@vger.kernel.org \
    /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.