Hi Valentin,
Would you be able to confirm that the attached patch fixes your issue as well?
-Jordan
On Thu, Feb 8, 2024 at 9:42 AM Jordan Rife jrife@google.com wrote:
On Thu, Feb 8, 2024 at 3:37 AM Valentin Kleibel valentin@vrvis.at wrote:
Hi Jordan, hi all
Just a quick look comparing dlm_tcp_listen_bind between the latest 6.1 and 6.6 stable branches, it looks like there is a mismatch here with the dlm_local_addr[0] parameter.
6.1
static int dlm_tcp_listen_bind(struct socket *sock) { int addr_len;
/* Bind to our port */ make_sockaddr(dlm_local_addr[0], dlm_config.ci_tcp_port, &addr_len); return kernel_bind(sock, (struct sockaddr *)&dlm_local_addr[0], addr_len); }
6.6
static int dlm_tcp_listen_bind(struct socket *sock) { int addr_len;
/* Bind to our port */ make_sockaddr(&dlm_local_addr[0], dlm_config.ci_tcp_port, &addr_len); return kernel_bind(sock, (struct sockaddr *)&dlm_local_addr[0], addr_len); }
6.6 contains commit c51c9cd8 (fs: dlm: don't put dlm_local_addrs on heap) which changed
static struct sockaddr_storage *dlm_local_addr[DLM_MAX_ADDR_COUNT];
to
static struct sockaddr_storage dlm_local_addr[DLM_MAX_ADDR_COUNT];
It looks like kernel_bind() in 6.1 needs to be modified to match.
We tried to apply commit c51c9cd8 (fs: dlm: don't put dlm_local_addrs on heap) to the debian kernel 6.1.76 and came up with the attached patch. Besides the different offsets there is a slight change dlm_tcp_bind() where in 6.1.76 kernel_bind() is used instead of sock->ops->bind() in the original commit.
This patch solves the issue we experienced.
Thanks for your help, Valentin
Good to hear that works for you! We should fix this in the 6.1 stable kernel as well.
IMO it may be less risky and simpler to fix the backport of my patch e9cdebbe23f1 ("dlm: use kernel_connect() and kernel_bind()") and just switch (struct sockaddr *)&dlm_local_addr[0] to (struct sockaddr *)dlm_local_addr[0] in the call to kernel_bind() rather than backporting c51c9cd8 (fs: dlm: don't put dlm_local_addrs on heap) to 6.1.
I will have some time soon to fix the 6.1 backport, but it may make sense just to revert in the meantime.
-Jordan