]> git.baikalelectronics.ru Git - kernel.git/commit
[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)
commitc57791dcec053b89818170f38584dca761b2fa55
tree9be2938cea30b1f2ce93ed59b8806fdfac62fd1e
parent9eed9049549886f606548bd58f42261aaf96d7db
[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