On Wed, Apr 20, 2016 at 11:38:20AM -0700, Ravi Pokala wrote:
> Hi folks,
> 
> My colleague Sushanth (CCed) tried to send this to hackers@ yesterday, but it 
> didn't go through for some reason. Resending on his behalf, adding geom@, and 
> noting that while we saw this on 7-STABLE, it looks like it could still be an 
> issue in -HEAD.
> 
> --------------------------------
> 
> Hello,
> 
> We have a home-grown geom driver that creates sysctl in the device creation 
> path. Device creation is handled by the geom event thread. The call to 
> SYSCTL_ADD_NODE() takes the sysctllock in exclusive mode. If the event thread 
> is racing with another thread that calls sysctl_disks(), then you end up with 
> a deadlock since sysctl_disks() tickles the event thread and goes to sleep 
> while holding the sysctllock. It is expected to woken up by the event thread 
> when the event of listing all the disks is processed. But the geom event is 
> blocked waiting for the sysctllock.
> 
> I did see g_disk_create() adds a sysctl variable in a similar fashion, hence 
> the email. I'm thinking of fixing the sysctl_disks() to drop the sysctllock 
> before going to sleep and reacquiring it after being woken up. Let me know 
> your thoughts.
> 

This is not an issue in head. r216060 modified the sysctl code so that
the sysctl lock is dropped before handlers are called. So sysctl_disks()
is no longer executed with the sysctl lock held, and this addresses the
problem you described.

This change was MFCed to stable/7 in r220012 though. Do you have that
revision?
_______________________________________________
freebsd-geom@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-geom
To unsubscribe, send any mail to "freebsd-geom-unsubscr...@freebsd.org"

Reply via email to