Hi,
I found cow doesn''t behave as expected in run_delalloc_nocow(). Now in
run_delalloc_now(), if it found a regular extent and the NODATACOW is
set, run_dealloc_now will cow the file range which is not as expected.
Also, if it find a regular extent and NODATACOW is not set(with
PREALLOC set), it will not take cow operation. So, the cow semantic is
opposite to the btrfs design.
I found the problem was introduced by fallocate(), so could Yan please
verify the fix? Much appreciated!
--
Thanks & Best Regards
Liu Hui
--
diff --git a/inode.c b/inode.c
index 2c77e09..5525594 100644
--- a/inode.c
+++ b/inode.c
@@ -1003,7 +1003,7 @@ next_slot:
goto out_check;
if (disk_bytenr == 0)
goto out_check;
- if (extent_type == BTRFS_FILE_EXTENT_REG &&
!force)
+ if (extent_type == BTRFS_FILE_EXTENT_REG &&
force)
goto out_check;
if (btrfs_cross_ref_exist(trans, root, disk_bytenr))
goto out_check;
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
2008/11/20 Liu Hui <onlyflyer@gmail.com>:> Hi, > I found cow doesn''t behave as expected in run_delalloc_nocow(). Now in > run_delalloc_now(), if it found a regular extent and the NODATACOW is > set, run_dealloc_now will cow the file range which is not as expected. > Also, if it find a regular extent and NODATACOW is not set(with > PREALLOC set), it will not take cow operation. So, the cow semantic is > opposite to the btrfs design. > > I found the problem was introduced by fallocate(), so could Yan please > verify the fix? Much appreciated! > > -- > Thanks & Best Regards > Liu Hui > -- > > diff --git a/inode.c b/inode.c > index 2c77e09..5525594 100644 > --- a/inode.c > +++ b/inode.c > @@ -1003,7 +1003,7 @@ next_slot: > goto out_check; > if (disk_bytenr == 0) > goto out_check; > - if (extent_type == BTRFS_FILE_EXTENT_REG && !force) > + if (extent_type == BTRFS_FILE_EXTENT_REG && force) > goto out_check; > if (btrfs_cross_ref_exist(trans, root, disk_bytenr)) > goto out_check; > --You are right, thanks. I suggest modifying run_delalloc_range instead of here, could you please send a new patch. Yan Zheng -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Ok, this is the new patch.
--
Thanks & Best Regards
Liu Hui
--
diff --git a/inode.c b/inode.c
index 2c77e09..5e3789f 100644
--- a/inode.c
+++ b/inode.c
@@ -1114,10 +1114,10 @@ static int run_delalloc_range(struct inode
*inode, struct page *locked_page,
if (btrfs_test_opt(root, NODATACOW) ||
btrfs_test_flag(inode, NODATACOW))
ret = run_delalloc_nocow(inode, locked_page, start, end,
- page_started, 0, nr_written);
+ page_started, 1, nr_written);
else if (btrfs_test_flag(inode, PREALLOC))
ret = run_delalloc_nocow(inode, locked_page, start, end,
- page_started, 1, nr_written);
+ page_started, 0, nr_written);
else
ret = cow_file_range_async(inode, locked_page, start, end,
page_started, nr_written);
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2008-11-20 at 21:47 +0800, Liu Hui wrote:> Ok, this is the new patch. >Thank you both, I''ve pushed this out. -chris -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi chris, This is just a reminder to tell you that I found the commit message in git log, but the code has not been checked in yet. 2008/11/21 Chris Mason <chris.mason@oracle.com>:> On Thu, 2008-11-20 at 21:47 +0800, Liu Hui wrote: >> Ok, this is the new patch. >> > > Thank you both, I''ve pushed this out. > > -chris > > >-- Thanks & Best Regards Liu Hui -- -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 2008-11-21 at 12:47 +0800, Liu Hui wrote:> Hi chris, > This is just a reminder to tell you that I found the commit message in > git log, but the code has not been checked in yet. >You''re right, somehow the commit ended up empty. I''ll have to fix this after vacation. Thanks. -chris -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html