[fuse] fix deadlock between fuse_put_super() and request_end(), try #2
authorMiklos Szeredi <miklos@szeredi.hu>
Wed, 26 Apr 2006 08:49:06 +0000 (10:49 +0200)
committerMiklos Szeredi <miklos@szeredi.hu>
Wed, 26 Apr 2006 08:49:06 +0000 (10:49 +0200)
commit6dbbcb120570d747b00783820ee02d1e1bcf63de
tree9be2938cea30b1f2ce93ed59b8806fdfac62fd1e
parent5a5fb1ea74d8b82ca1461b885a1334fb21e037be
[fuse] fix deadlock between fuse_put_super() and request_end(), try #2

A deadlock was possible, when the last reference to the superblock was
held due to a background request containing a file reference.

Releasing the file would release the vfsmount which in turn would
release the superblock.  Since sbput_sem is held during the fput() and
fuse_put_super() tries to acquire this same semaphore, a deadlock
results.

The solution is to move the fput() outside the region protected by
sbput_sem.

Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
fs/fuse/dev.c