aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/fscache/object.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/fscache/object.c b/fs/fscache/object.c
index 1a1afa82f798..74bc562a2cbc 100644
--- a/fs/fscache/object.c
+++ b/fs/fscache/object.c
@@ -105,6 +105,7 @@ static inline void fscache_done_parent_op(struct fscache_object *object)
105static void fscache_object_state_machine(struct fscache_object *object) 105static void fscache_object_state_machine(struct fscache_object *object)
106{ 106{
107 enum fscache_object_state new_state; 107 enum fscache_object_state new_state;
108 struct fscache_cookie *cookie;
108 109
109 ASSERT(object != NULL); 110 ASSERT(object != NULL);
110 111
@@ -158,11 +159,17 @@ static void fscache_object_state_machine(struct fscache_object *object)
158 159
159 spin_lock(&object->lock); 160 spin_lock(&object->lock);
160 object->state = FSCACHE_OBJECT_DYING; 161 object->state = FSCACHE_OBJECT_DYING;
161 if (object->cookie && 162 cookie = object->cookie;
162 test_and_clear_bit(FSCACHE_COOKIE_CREATING, 163 if (cookie) {
163 &object->cookie->flags)) 164 if (test_and_clear_bit(FSCACHE_COOKIE_LOOKING_UP,
164 wake_up_bit(&object->cookie->flags, 165 &cookie->flags))
165 FSCACHE_COOKIE_CREATING); 166 wake_up_bit(&cookie->flags,
167 FSCACHE_COOKIE_LOOKING_UP);
168 if (test_and_clear_bit(FSCACHE_COOKIE_CREATING,
169 &cookie->flags))
170 wake_up_bit(&cookie->flags,
171 FSCACHE_COOKIE_CREATING);
172 }
166 spin_unlock(&object->lock); 173 spin_unlock(&object->lock);
167 174
168 fscache_done_parent_op(object); 175 fscache_done_parent_op(object);