Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dlm: handle invalid lockspace member remove

Since commit de7b4869b4ecf ("dlm: add new configfs entry release_recover
for lockspace members") we are moving lockspace members into a gone list
before removing them to get additional removing attributes from
configfs. There is still a very unlikely possibility when
find_config_node() returns NULL, then for some reason the node wasn't
marked as gone but it was removed. We will just handle this case and drop
an error to observe if this case can ever happen.

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/gfs2/aJ2Ssuh8xlsTutrA@stanley.mountain/T/#u
Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>

authored by

Alexander Aring and committed by
David Teigland
452d90de 6f4f4ca5

+7 -1
+7 -1
fs/dlm/member.c
··· 571 571 572 572 list_for_each_entry_safe(memb, safe, &ls->ls_nodes, list) { 573 573 node = find_config_node(rv, memb->nodeid); 574 - if (node && !node->new && !node->gone) 574 + if (!node) { 575 + log_error(ls, "remove member %d invalid", 576 + memb->nodeid); 577 + return -EFAULT; 578 + } 579 + 580 + if (!node->new && !node->gone) 575 581 continue; 576 582 577 583 release_recover = 0;