diff options
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r-- | fs/fs-writeback.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 8aaa7eec7b74..e88421d9a48d 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -164,8 +164,13 @@ static void finish_writeback_work(struct bdi_writeback *wb, | |||
164 | 164 | ||
165 | if (work->auto_free) | 165 | if (work->auto_free) |
166 | kfree(work); | 166 | kfree(work); |
167 | if (done && atomic_dec_and_test(&done->cnt)) | 167 | if (done) { |
168 | wake_up_all(done->waitq); | 168 | wait_queue_head_t *waitq = done->waitq; |
169 | |||
170 | /* @done can't be accessed after the following dec */ | ||
171 | if (atomic_dec_and_test(&done->cnt)) | ||
172 | wake_up_all(waitq); | ||
173 | } | ||
169 | } | 174 | } |
170 | 175 | ||
171 | static void wb_queue_work(struct bdi_writeback *wb, | 176 | static void wb_queue_work(struct bdi_writeback *wb, |