fuse: fix blocked_waitq wakeup
authorMiklos Szeredi <mszeredi@redhat.com>
Fri, 28 Sep 2018 14:43:22 +0000 (16:43 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 28 Sep 2018 14:43:22 +0000 (16:43 +0200)
commit908a572b80f6e9577b45e81b3dfe2e22111286b8
tree9752e255244d3e6314f471fdc15f4491c1dc8939
parent4c316f2f3ff315cb48efb7435621e5bfb81df96d
fuse: fix blocked_waitq wakeup

Using waitqueue_active() is racy.  Make sure we issue a wake_up()
unconditionally after storing into fc->blocked.  After that it's okay to
optimize with waitqueue_active() since the first wake up provides the
necessary barrier for all waiters, not the just the woken one.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: 3c18ef8117f0 ("fuse: optimize wake_up")
Cc: <stable@vger.kernel.org> # v3.10
fs/fuse/dev.c