Re: cp --reflink with Btrfs

2010-01-28 Thread Chris Mason
On Wed, Jan 27, 2010 at 11:53:22AM +0100, Andreas Barth wrote:
 * Sage Weil (s...@newdream.net) [091216 17:55]:
  On Wed, 16 Dec 2009, Li Dongyang wrote:
  
   Have a look at line 998, ioctl.c, inside btrfs_ioctl_clone(),
   the src-i_size(the size of the testfile created by touch) is just 0, and 
   this 
   will cause btrfs_ioctl_clone just return -EINVAL.
   I'm not sure if it makes sense to clone a file which actually doesn't 
   have any 
   data extents.
  
  Probably not, but it seems more consistent to return success instead than 
  -EINVAL.  Requiring the caller to check and special case empty files isn't 
  very friendly...
 
 
 Actually it makes lots of sense if trying to e.g. cow-copy an chroot
 on an buildd, and there are some empty files inside of the linux
 installation (which normally just are).
 
 Can I hope on getting the patch (or another patch) incorporated into
 the kernel?

In this case the application is responsible for duplicating the file.
The clone ioctl doesn't actually clone any of the file metadata or
anything else.

-chris

--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: cp --reflink with Btrfs

2010-01-27 Thread Andreas Barth
* Sage Weil (s...@newdream.net) [091216 17:55]:
 On Wed, 16 Dec 2009, Li Dongyang wrote:
 
  Have a look at line 998, ioctl.c, inside btrfs_ioctl_clone(),
  the src-i_size(the size of the testfile created by touch) is just 0, and 
  this 
  will cause btrfs_ioctl_clone just return -EINVAL.
  I'm not sure if it makes sense to clone a file which actually doesn't have 
  any 
  data extents.
 
 Probably not, but it seems more consistent to return success instead than 
 -EINVAL.  Requiring the caller to check and special case empty files isn't 
 very friendly...


Actually it makes lots of sense if trying to e.g. cow-copy an chroot
on an buildd, and there are some empty files inside of the linux
installation (which normally just are).

Can I hope on getting the patch (or another patch) incorporated into
the kernel?



Cheers,
Andi
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: cp --reflink with Btrfs

2009-12-16 Thread Sage Weil
On Wed, 16 Dec 2009, Li Dongyang wrote:

 Have a look at line 998, ioctl.c, inside btrfs_ioctl_clone(),
 the src-i_size(the size of the testfile created by touch) is just 0, and 
 this 
 will cause btrfs_ioctl_clone just return -EINVAL.
 I'm not sure if it makes sense to clone a file which actually doesn't have 
 any 
 data extents.

Probably not, but it seems more consistent to return success instead than 
-EINVAL.  Requiring the caller to check and special case empty files isn't 
very friendly...

sage

---
Subject: [PATCH] Btrfs: return success when cloning 0 byte range at eof

We currently return -EINVAL when cloning a zero byte range at EOF (most 
commonly when cloning a 0 byte file).  Return success instead, even though 
this is a no-op.

Signed-off-by: Sage Weil s...@newdream.net
---
 fs/btrfs/ioctl.c |5 -
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index cdbb054..1a964a4 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -994,8 +994,11 @@ static noinline long btrfs_ioctl_clone(struct file *file, 
unsigned long srcfd,
}
 
/* determine range to clone */
+   ret = 0;
+   if (off == src-i_size  len == 0)
+   goto out_unlock;
ret = -EINVAL;
-   if (off = src-i_size || off + len  src-i_size)
+   if (off  src-i_size || off + len  src-i_size)
goto out_unlock;
if (len == 0)
olen = len = src-i_size - off;
-- 
1.6.5

--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: cp --reflink with Btrfs

2009-12-15 Thread Jason White
Josef Bacik  jo...@redhat.com wrote:
On Sun, Dec 13, 2009 at 12:29:03AM +, Jason White wrote:
 I am testing a Btrfs root file system with Debian (kernel 2.6.32) under KVM.
 
 ja...@vrtl:~$ touch testfile
 ja...@vrtl:~$ cp --reflink testfile /tmp
 cp: failed to clone `/tmp/testfile': Invalid argument
 
 This is with GNU Coreutils 8.0 taken from debian Sid.
 
 Is this a Coreutils issue, a Btrfs problem or something in my local
 configuration?


Try using bcp, if that works then its likely a problem with coreutils.

After reporting this to Debian and engaging on follow-up discussion, it turns
out that bcp copies the data if the ioctl() call to clone the file fails, as
can be seen from the Python code (which I should have read, but didn't...).

Unfortunately the ioctl() call is failing both in bcp and in cp --reflink.

Here's partial strace output from the latter.

cp --reflink testfile testfile2

open(testfile, O_RDONLY)  = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
open(testfile2, O_WRONLY|O_CREAT|O_EXCL, 0644) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
ioctl(4, 0x40049409, 0x3)   = -1 EINVAL (Invalid argument)

Kernel 2.6.32 (debian Sid), x86-64 architecture.

Suggestions welcome.

Debian bug report:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561225


--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: cp --reflink with Btrfs

2009-12-15 Thread Li Dongyang
Have a look at line 998, ioctl.c, inside btrfs_ioctl_clone(),
the src-i_size(the size of the testfile created by touch) is just 0, and this 
will cause btrfs_ioctl_clone just return -EINVAL.
I'm not sure if it makes sense to clone a file which actually doesn't have any 
data extents.

On Wednesday 16 December 2009 07:37:42 Jason White wrote:
 Josef Bacik  jo...@redhat.com wrote:
 On Sun, Dec 13, 2009 at 12:29:03AM +, Jason White wrote:
  I am testing a Btrfs root file system with Debian (kernel 2.6.32) under
  KVM.
 
  ja...@vrtl:~$ touch testfile
  ja...@vrtl:~$ cp --reflink testfile /tmp
  cp: failed to clone `/tmp/testfile': Invalid argument
 
  This is with GNU Coreutils 8.0 taken from debian Sid.
 
  Is this a Coreutils issue, a Btrfs problem or something in my local
  configuration?
 
 Try using bcp, if that works then its likely a problem with coreutils.
 
 After reporting this to Debian and engaging on follow-up discussion, it
  turns out that bcp copies the data if the ioctl() call to clone the file
  fails, as can be seen from the Python code (which I should have read, but
  didn't...).
 
 Unfortunately the ioctl() call is failing both in bcp and in cp --reflink.
 
 Here's partial strace output from the latter.
 
 cp --reflink testfile testfile2
 
 open(testfile, O_RDONLY)  = 3
 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
 open(testfile2, O_WRONLY|O_CREAT|O_EXCL, 0644) = 4
 fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
 ioctl(4, 0x40049409, 0x3)   = -1 EINVAL (Invalid argument)
 
 Kernel 2.6.32 (debian Sid), x86-64 architecture.
 
 Suggestions welcome.
 
 Debian bug report:
 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561225
 
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-btrfs in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: cp --reflink with Btrfs

2009-12-14 Thread Josef Bacik
On Sun, Dec 13, 2009 at 12:29:03AM +, Jason White wrote:
 I am testing a Btrfs root file system with Debian (kernel 2.6.32) under KVM.
 
 ja...@vrtl:~$ touch testfile
 ja...@vrtl:~$ cp --reflink testfile /tmp
 cp: failed to clone `/tmp/testfile': Invalid argument
 
 This is with GNU Coreutils 8.0 taken from debian Sid.
 
 Is this a Coreutils issue, a Btrfs problem or something in my local
 configuration?


Try using bcp, if that works then its likely a problem with coreutils.

 All the other issues that I have encountered so far are known limitations, for
 example, lack of Btrfs support in Grub 2 and the current inability of the
 initrd scripts from Debian to recognize the file system type. All of this will
 be fixed, no doubt, over time.
 

Yeah the initrd stuff is all debian problems.  When I added btrfs support to
fedora there were alot of various utilities and such that needed to be changed
in order to accomodate it, so the same sort of thing likely needs to be done
with debian.  There are patches for Grub1 since thats what Fedora uses, I
suppose that there will be Grub2 patches in the future, but since the author of
the grub patches uses fedora and we're on grub1 it's all we care about :).
Thanks,

Josef
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html