Page MenuHomeFreeBSD

lockf: Do not block in vfs_busy()
ClosedPublic

Authored by markj on Thu, Sep 24, 1:51 PM.
Tags
None
Referenced Files
F173415877: D59982.id187616.diff
Fri, Sep 25, 7:45 PM
F173378581: D59982.id187598.diff
Fri, Sep 25, 1:47 PM
F173367653: D59982.diff
Fri, Sep 25, 12:04 PM
F173328450: D59982.diff
Fri, Sep 25, 6:35 AM
F173301460: D59982.id187598.diff
Fri, Sep 25, 3:06 AM
F173300004: D59982.id187616.diff
Fri, Sep 25, 2:54 AM
F173295091: D59982.id187616.diff
Fri, Sep 25, 1:57 AM
F173295090: D59982.id187598.diff
Fri, Sep 25, 1:57 AM
Subscribers

Details

Summary

I believe a race is possible otherwise: vfs_busy() may return after an
unmounted filesystem has been removed from the global mount list.
That is, vfs_busy() will block until vfs_mount_destroy() sets
MNTK_REFEXPIRE, and at that point the mountpoint has been removed from
the mountlist, so TAILQ_FOREACH can return an invalid value.

Simply do not block if the mountpoint is being unmounted.

Fixes: eca39864f702 ("Add sysctl KERN_LOCKF")

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 77272
Build 74155: arc lint + arc unit