From: Chris Mason Date: Thu, 22 Oct 2015 01:21:40 +0000 (-0700) Subject: Merge branch 'cleanups/for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git... X-Git-Tag: v5.15~14549^2~70 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0d58e48db58801a0e764e9b9c87e1782d390fcb;p=platform%2Fkernel%2Flinux-starfive.git Merge branch 'cleanups/for-4.4' of git://git./linux/kernel/git/kdave/linux into for-linus-4.4 --- a0d58e48db58801a0e764e9b9c87e1782d390fcb diff --cc fs/btrfs/compression.c index 3a9317c,b524e02..97b049a --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@@ -821,30 -823,27 +823,30 @@@ again static void free_workspace(int type, struct list_head *workspace) { int idx = type - 1; - struct list_head *idle_workspace = &comp_idle_workspace[idx]; - spinlock_t *workspace_lock = &comp_workspace_lock[idx]; - atomic_t *alloc_workspace = &comp_alloc_workspace[idx]; - wait_queue_head_t *workspace_wait = &comp_workspace_wait[idx]; - int *num_workspace = &comp_num_workspace[idx]; - - spin_lock(workspace_lock); - if (*num_workspace < num_online_cpus()) { - list_add(workspace, idle_workspace); - (*num_workspace)++; - spin_unlock(workspace_lock); + struct list_head *idle_ws = &btrfs_comp_ws[idx].idle_ws; + spinlock_t *ws_lock = &btrfs_comp_ws[idx].ws_lock; + atomic_t *alloc_ws = &btrfs_comp_ws[idx].alloc_ws; + wait_queue_head_t *ws_wait = &btrfs_comp_ws[idx].ws_wait; + int *num_ws = &btrfs_comp_ws[idx].num_ws; + + spin_lock(ws_lock); + if (*num_ws < num_online_cpus()) { + list_add(workspace, idle_ws); + (*num_ws)++; + spin_unlock(ws_lock); goto wake; } - spin_unlock(workspace_lock); + spin_unlock(ws_lock); btrfs_compress_op[idx]->free_workspace(workspace); - atomic_dec(alloc_workspace); + atomic_dec(alloc_ws); wake: + /* + * Make sure counter is updated before we wake up waiters. + */ smp_mb(); - if (waitqueue_active(workspace_wait)) - wake_up(workspace_wait); + if (waitqueue_active(ws_wait)) + wake_up(ws_wait); } /*