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