2008/11/20 Liu Hui <onlyflyer@xxxxxxxxx>: > 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
