On Thu, 27 Oct 2016 15:39:27 -0700, Jeremy Allison <jra at samba.org> wrote :> On Fri, Oct 28, 2016 at 12:08:50AM +0200, Saint Germain via samba > wrote: > > On Thu, 27 Oct 2016 14:50:48 -0700, Jeremy Allison <jra at samba.org> > > wrote : > > > > > > Server-side copy can be requested using smbclient, using > > > the "scopy" command. > > > > > > It's a simple: > > > > > > scopy source dest > > > > Thanks but I just tested and it doesn't trigger > > BTRFS_IOC_CLONE_RANGE. The server-side copy is working all right, > > but the file is not copied through BTRFS reflink (cp > > --reflink=auto). It is quite noticeable on large file, where it > > should be nearly instantaneous. > > > > My configuration: > > - client: Debian Stable + smbclient 4.4.6 (coming from Testing) + > > kernel 4.7 (amd64) > > - server: Debian Stable + samba 4.2.10 + kernel 4.7 (amd64) > > OK, follow though using debug level 10 and see why it isn't > selecting the reflink code. > > Are you using SMB2 ?No I was using SMB1: my mistake. Now with SMB2, it works, thanks ! If I can ask, what is this restrictions with "Btrfs filesystem aligned" and "FSCTL_SRV_COPYCHUNK wire request byte offsets and lengths align to the Btrfs sector-size" ? Is it a restriction on the server or the client ? How can I check that I don't have this restriction ? Thanks for your help !
On Fri, Oct 28, 2016 at 01:00:24AM +0200, Saint Germain via samba wrote:> > On Thu, 27 Oct 2016 15:39:27 -0700, Jeremy Allison <jra at samba.org> > wrote : > > > On Fri, Oct 28, 2016 at 12:08:50AM +0200, Saint Germain via samba > > wrote: > > > On Thu, 27 Oct 2016 14:50:48 -0700, Jeremy Allison <jra at samba.org> > > > wrote : > > > > > > > > Server-side copy can be requested using smbclient, using > > > > the "scopy" command. > > > > > > > > It's a simple: > > > > > > > > scopy source dest > > > > > > Thanks but I just tested and it doesn't trigger > > > BTRFS_IOC_CLONE_RANGE. The server-side copy is working all right, > > > but the file is not copied through BTRFS reflink (cp > > > --reflink=auto). It is quite noticeable on large file, where it > > > should be nearly instantaneous. > > > > > > My configuration: > > > - client: Debian Stable + smbclient 4.4.6 (coming from Testing) + > > > kernel 4.7 (amd64) > > > - server: Debian Stable + samba 4.2.10 + kernel 4.7 (amd64) > > > > OK, follow though using debug level 10 and see why it isn't > > selecting the reflink code. > > > > Are you using SMB2 ? > > No I was using SMB1: my mistake. > Now with SMB2, it works, thanks ! > > If I can ask, what is this restrictions with "Btrfs filesystem aligned" > and "FSCTL_SRV_COPYCHUNK wire request byte offsets and lengths align > to the Btrfs sector-size" ? > Is it a restriction on the server or the client ?Server.> How can I check that I don't have this restriction ?Ensure clone range request sizes are integer divisible by 4096. If the btrfs clone range request fails smbd will fall back to copychunk copies. Debug level 5 has: /* * BTRFS_IOC_CLONE_RANGE only supports 'sectorsize' aligned * cloning. Which is 4096 by default, therefore fall back to * manual read/write on failure. */ DEBUG(5, ("BTRFS_IOC_CLONE_RANGE failed: %s, length %llu, " "src fd: %lld off: %llu, dest fd: %d off: %llu\n", strerror(errno), (unsigned long long)cr_args.src_length, (long long)cr_args.src_fd, (unsigned long long)cr_args.src_offset, dest_fsp->fh->fd, (unsigned long long)cr_args.dest_offset)); if you see any of these then it happened.
On Thu, 27 Oct 2016 16:27:05 -0700, Jeremy Allison <jra at samba.org> wrote :> On Fri, Oct 28, 2016 at 01:00:24AM +0200, Saint Germain via samba > wrote: > > > > On Thu, 27 Oct 2016 15:39:27 -0700, Jeremy Allison <jra at samba.org> > > wrote : > > > > > On Fri, Oct 28, 2016 at 12:08:50AM +0200, Saint Germain via samba > > > wrote: > > > > On Thu, 27 Oct 2016 14:50:48 -0700, Jeremy Allison > > > > <jra at samba.org> wrote : > > > > > > > > > > Server-side copy can be requested using smbclient, using > > > > > the "scopy" command. > > > > > > > > > > It's a simple: > > > > > > > > > > scopy source dest > > > > > > > > Thanks but I just tested and it doesn't trigger > > > > BTRFS_IOC_CLONE_RANGE. The server-side copy is working all > > > > right, but the file is not copied through BTRFS reflink (cp > > > > --reflink=auto). It is quite noticeable on large file, where it > > > > should be nearly instantaneous. > > > > > > > > My configuration: > > > > - client: Debian Stable + smbclient 4.4.6 (coming from > > > > Testing) + kernel 4.7 (amd64) > > > > - server: Debian Stable + samba 4.2.10 + kernel 4.7 (amd64) > > > > > > OK, follow though using debug level 10 and see why it isn't > > > selecting the reflink code. > > > > > > Are you using SMB2 ? > > > > No I was using SMB1: my mistake. > > Now with SMB2, it works, thanks ! > > > > If I can ask, what is this restrictions with "Btrfs filesystem > > aligned" and "FSCTL_SRV_COPYCHUNK wire request byte offsets and > > lengths align to the Btrfs sector-size" ? > > Is it a restriction on the server or the client ? > > Server. > > > How can I check that I don't have this restriction ? > > Ensure clone range request sizes are integer > divisible by 4096. > > If the btrfs clone range request fails smbd > will fall back to copychunk copies. > > Debug level 5 has: > > /* > * BTRFS_IOC_CLONE_RANGE only supports 'sectorsize' > aligned > * cloning. Which is 4096 by default, therefore fall > back to > * manual read/write on failure. > */ > DEBUG(5, ("BTRFS_IOC_CLONE_RANGE failed: %s, length > %llu, " "src fd: %lld off: %llu, dest fd: %d off: %llu\n", > strerror(errno), > (unsigned long long)cr_args.src_length, > (long long)cr_args.src_fd, > (unsigned long long)cr_args.src_offset, > dest_fsp->fh->fd, > (unsigned long long)cr_args.dest_offset)); > > if you see any of these then it happened.Ok I understand how to check that it happened, but how can I make sure that it doesn't happen ? How can I ensure that clone range request sizes are integer divisible by 4096 on my server ? Should I change something on the BTRFS filesystem, or shift my partition or something ? Thanks !