---
fs/fscache/object.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/fs/fscache/object.c b/fs/fscache/object.c
index d3b4539..186076b 100644
--- a/fs/fscache/object.c
+++ b/fs/fscache/object.c
@@ -925,6 +925,7 @@ static const struct fscache_state *_fscache_invalidate_object(struct fscache_obj
{
struct fscache_operation *op;
struct fscache_cookie *cookie = object->cookie;
+ bool wake_cookie = false;
_enter("{OBJ%x},%d", object->debug_id, event);
@@ -981,7 +982,10 @@ nomem:
submit_op_failed:
clear_bit(FSCACHE_OBJECT_IS_LIVE, &object->flags);
+ wake_cookie = __fscache_unuse_cookie(cookie);
spin_unlock(&cookie->lock);
+ if (wake_cookie)
+ __fscache_wake_unused_cookie(cookie);
kfree(op);
_leave(" [EIO]");
return transit_to(KILL_OBJECT);
--
1.7.9.5
Milosz Tanski <[email protected]> wrote:
> + wake_cookie = __fscache_unuse_cookie(cookie);
> spin_unlock(&cookie->lock);
> + if (wake_cookie)
> + __fscache_wake_unused_cookie(cookie);
Why do __fscache_unuse_cookie() with cookie->lock held?
David