btrfs: make find_workspace always succeed
authorDavid Sterba <dsterba@suse.com>
Wed, 27 Apr 2016 00:41:17 +0000 (02:41 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 10 May 2016 07:46:13 +0000 (09:46 +0200)
commite721e49dd1681d45d71919f0561f5e978a34153c
treef74acacc029a10df8ba68cf1e2c0d40564a6949e
parentf77dd0d6b2f0f2cf290cacbd48f5eee18586e52b
btrfs: make find_workspace always succeed

With just one preallocated workspace we can guarantee forward progress
even if there's no memory available for new workspaces. The cost is more
waiting but we also get rid of several error paths.

On average, there will be several idle workspaces, so the waiting
penalty won't be so bad.

In the worst case, all cpus will compete for one workspace until there's
some memory. Attempts to allocate a new one are done each time the
waiters are woken up.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c