diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fs-writeback.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 6bca6f8176f0..7eba7326b9b9 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -113,6 +113,7 @@ static void bdi_work_free(struct rcu_head *head) | |||
113 | static void wb_work_complete(struct bdi_work *work) | 113 | static void wb_work_complete(struct bdi_work *work) |
114 | { | 114 | { |
115 | const enum writeback_sync_modes sync_mode = work->args.sync_mode; | 115 | const enum writeback_sync_modes sync_mode = work->args.sync_mode; |
116 | int onstack = bdi_work_on_stack(work); | ||
116 | 117 | ||
117 | /* | 118 | /* |
118 | * For allocated work, we can clear the done/seen bit right here. | 119 | * For allocated work, we can clear the done/seen bit right here. |
@@ -120,9 +121,9 @@ static void wb_work_complete(struct bdi_work *work) | |||
120 | * to after the RCU grace period, since the stack could be invalidated | 121 | * to after the RCU grace period, since the stack could be invalidated |
121 | * as soon as bdi_work_clear() has done the wakeup. | 122 | * as soon as bdi_work_clear() has done the wakeup. |
122 | */ | 123 | */ |
123 | if (!bdi_work_on_stack(work)) | 124 | if (!onstack) |
124 | bdi_work_clear(work); | 125 | bdi_work_clear(work); |
125 | if (sync_mode == WB_SYNC_NONE || bdi_work_on_stack(work)) | 126 | if (sync_mode == WB_SYNC_NONE || onstack) |
126 | call_rcu(&work->rcu_head, bdi_work_free); | 127 | call_rcu(&work->rcu_head, bdi_work_free); |
127 | } | 128 | } |
128 | 129 | ||