Miklos Szeredi 73ce8355c2 [fuse] fix deadlock between fuse_put_super() and request_end()
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 chosen soltuion is to get rid of sbput_sem, and instead use the
spinlock to ensure the referenced inodes/file are released only once.
Since the actual release may sleep, defer these outside the locked
region, but using local variables instead of the structure members.

This is a much more rubust solution.

Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
2006-04-11 21:14:26 +02:00
..
2006-04-11 06:18:41 -07:00
2006-03-31 12:18:51 -08:00
2006-04-01 01:15:35 +02:00
2006-03-26 08:56:55 -08:00
2006-03-31 12:18:55 -08:00
2006-03-24 07:33:19 -08:00
2006-03-29 13:24:50 +11:00
2006-04-01 01:16:26 +02:00
2006-04-02 13:39:21 +02:00
2006-04-02 13:40:13 +02:00
2006-03-31 12:18:55 -08:00
2006-01-11 18:42:13 -08:00
2006-01-10 08:01:25 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2006-04-02 13:36:13 +02:00
2006-01-08 20:12:40 -08:00
2006-04-02 13:37:19 +02:00
2006-04-11 13:53:33 +02:00
2005-10-30 17:37:32 -08:00
2006-04-02 13:38:18 +02:00
2006-01-11 18:42:13 -08:00
2006-01-11 18:42:13 -08:00
2006-03-31 12:18:54 -08:00
2006-03-28 09:16:08 -08:00
2006-03-24 07:33:19 -08:00
2006-03-24 07:33:24 -08:00
2005-11-07 18:18:11 -08:00
2005-04-16 15:20:36 -07:00
2006-03-23 07:38:11 -08:00
2006-03-23 07:38:11 -08:00
2006-03-23 07:38:12 -08:00
2006-04-11 13:57:21 +02:00
2006-02-11 21:41:10 -08:00
2006-03-26 08:56:55 -08:00
2005-04-16 15:20:36 -07:00