[Samba] Samba and BTRFS server-side copy

Jeremy Allison jra at samba.org
Fri Oct 28 00:30:09 UTC 2016


On Thu, Oct 27, 2016 at 05:22:14PM -0700, Jeremy Allison via samba wrote:
> 
> Looking around inside that source code I also see:
> 
> do_read (GVfsBackend *backend,
>          GVfsJobRead *job,
>          GVfsBackendHandle handle,
>          char *buffer,
>          gsize bytes_requested)
> {
>   GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
>   ssize_t res;
>   smbc_read_fn smbc_read;
> 
>   /* libsmbclient limits blocksize to (64*1024)-2 for Windows servers,
>    * let's do the same here to achieve reasonable performance. (#588391)
>    *
>    * TODO: port to pull mechanism (#592468)
>    */
>   if (bytes_requested > 65534)
>     bytes_requested = 65534;
> 
>   smbc_read = smbc_getFunctionRead (op_backend->smb_context);
>   res = smbc_read (op_backend->smb_context, (SMBCFILE *)handle, buffer, bytes_requested);
> 
> which is also completely broken and wrong. The read call
> can take any arbitrary size and the both the libsmbclient
> SMB1 and SMB2 engines will break this down into as many
> simultaneous on the wire calls as needed to pipeline
> the reads / writes.
> 
> Restricting this to 65534 is *insane* and slow. That
> whole chunk of code restricting the size needs to be
> removed.

Oh it's my fault from 2009:

https://bugzilla.gnome.org/show_bug.cgi?id=588391#c10

:-).

I'll log another bug to get the whole thing removed
now we pipeline correctly.



More information about the samba mailing list