SMB3 and RDMA support

Richard Sharpe realrichardsharpe at
Sun May 18 10:32:31 MDT 2014

On Sat, May 17, 2014 at 11:55 AM, Stefan (metze) Metzmacher
<metze at> wrote:
> Am 17.05.2014 11:22, schrieb Michael Adam:
>> On 2014-05-16 at 03:15 -0700, Richard Sharpe wrote:
>>> After discussing things with Michael Adam at the bar camp, I think we
>>> now have an approach to SMB Direct (SMB3 over RDMA) that is workable,
>>> so I anticipate working with the stuff that Metze and Michael are
>>> doing and helping to get it moving.
>> Right, I will follow up with details soon (txt, wiki, git).
>> I'm looking forward to collaborating and getting this up to speed!
> I just found that there's a ibv_fork_init() function.
> Maybe there's some hope that we don't need an external daemon.

I am not sure which external daemon you are referring to.

The problem is that every client gets a separate daemon.

Anyway, attached is a diagram of what I think Michael was talking
about at SambaXP.

The steps that he described to me seem to be:

1. Not longer after starting, the master smbd forks an SMB Direct
daemon, smb-dd.
2. A TCP connection comes in to the master
3. The master forks after it accepts and protocol processing happens
in the child. The TCP connection is closed in the master but kept open
in the child, so in some sense it is transferred to the child.
4. An RDMA connection comes into the smb-dd. It is accepted and the
SMB Direct protocol starts.
5. The smbd-d forks an smbd (the smbd-d is really just an smbd
anyhow), and communicates with this child via a UNIX-domain socket
(transfers the SMB requests and responses via this UNIX-domain
6. When we get the SessionSetup in the second child smbd we use the
client GUID to find the associated smbd (perhaps via a TDB, or
whatever) and we then transfer the UNIX-domain socket to the first
child smbd.
7. Thereafter, the first child uses that UNIX-domain socket to
communicate with the smb-dd. It receives simple SMB requests and sends
simple responses via the socket while read and write data is
communicated via a shared-memory area.

So, one question is my mind is:

Why do we need a separate smb-dd? Surely, the master can also handle
RDMA SEND/RECV and RDMA READ/WRITE and running the small SMB Direct

Is there a strong reason for that extra daemon?

Richard Sharpe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smb-direct-1.gif
Type: image/gif
Size: 29866 bytes
Desc: not available
URL: <>

More information about the samba-technical mailing list