[PATCH] Fix bug #13121 - Non-smbd processes using kernel oplocks can hang smbd
slow at samba.org
Thu Nov 30 22:01:44 UTC 2017
On Thu, Nov 30, 2017 at 12:29:46PM -0800, Jeremy Allison wrote:
> OK, there *is* a race condition in the test. It's
> the following. The child process gets the kernel
> lease and then notifies the parent process to continue
> by writing a byte up a pipe. It then sets the alarm
> and calls pause() to wait for the parent process to
> contact the smbd and get it to trigger the break request
> using an open call.
> It is possible for the parent to run and trigger the break
> request after the child has written to the pipe, but *before*
> the child calls pause(). We then miss the signal notifying
> the child to break the lease.
> The fix for this is below. We need to set the sigmask
> on the child to prohibit receiving RT_SIGNAL_LEASE and SIGALRM,
> then wait for the lease break or alarm signal by calling
> sigsuspend(), not pause().
ahhhhh, this smelled so much like a race condition, I just couldn't spot it
yesterday at night. Glad you nailed it!
> When I add this patch the test becomes 100% reliable
> (not flakey) on the Catalyst cloud.
> Thanks a *LOT* Andrew for setting this up and allowing
> access - I don't think I would have found this without
> it !
> Please review and push if happy.
happy, pushed. :)
Ralph Boehme, Samba Team https://samba.org/
Samba Developer, SerNet GmbH https://sernet.de/en/samba/
More information about the samba-technical