From: Miklos Szeredi Date: Tue, 11 Apr 2006 19:14:26 +0000 (+0200) Subject: [fuse] fix deadlock between fuse_put_super() and request_end() X-Git-Tag: v2.6.17-rc2~73^2~3 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73ce8355c243a434524a34c05cc417dd0467996e;p=pandora-kernel.git [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 --- Reading git-diff-tree failed