diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c index 07cbd447861ec0d394fa5d7d07b15d76d7baa6c0..01979a3f51214175dea87a35db995e4da925c27a 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c @@ -130,7 +130,7 @@ static void cachefiles_mark_object_buried(struct cachefiles_cache *cache, fscache_object_states[object->fscache.state], dentry); - if (object->fscache.state < FSCACHE_OBJECT_DYING) { + if (fscache_object_is_live(&object->fscache)) { printk(KERN_ERR "\n"); printk(KERN_ERR "CacheFiles: Error:" " Can't preemptively bury live object\n"); @@ -192,7 +192,7 @@ static int cachefiles_mark_object_active(struct cachefiles_cache *cache, /* an old object from a previous incarnation is hogging the slot - we * need to wait for it to be destroyed */ wait_for_old_object: - if (xobject->fscache.state < FSCACHE_OBJECT_DYING) { + if (fscache_object_is_live(&object->fscache)) { printk(KERN_ERR "\n"); printk(KERN_ERR "CacheFiles: Error:" " Unexpected object collision\n"); diff --git a/fs/fscache/cache.c b/fs/fscache/cache.c index b52aed1dca97fc5769d43a34f8e51de2e28fd653..129ea537f02396f6fbbd078e06b1d73a3d38bd1c 100644 --- a/fs/fscache/cache.c +++ b/fs/fscache/cache.c @@ -115,7 +115,7 @@ struct fscache_cache *fscache_select_cache_for_object( struct fscache_object, cookie_link); cache = object->cache; - if (object->state >= FSCACHE_OBJECT_DYING || + if (fscache_object_is_dying(object) || test_bit(FSCACHE_IOERROR, &cache->flags)) cache = NULL; diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c index e2cba1f60c21217e5c28e7e1a3d096a75fcb3be8..a5f36c921e9111081aa487932360086b87f1bb30 100644 --- a/fs/fscache/cookie.c +++ b/fs/fscache/cookie.c @@ -285,7 +285,7 @@ static int fscache_alloc_object(struct fscache_cache *cache, object_already_extant: ret = -ENOBUFS; - if (object->state >= FSCACHE_OBJECT_DYING) { + if (fscache_object_is_dead(object)) { spin_unlock(&cookie->lock); goto error; } @@ -321,7 +321,7 @@ static int fscache_attach_object(struct fscache_cookie *cookie, ret = -EEXIST; hlist_for_each_entry(p, &cookie->backing_objects, cookie_link) { if (p->cache == object->cache) { - if (p->state >= FSCACHE_OBJECT_DYING) + if (fscache_object_is_dying(p)) ret = -ENOBUFS; goto cant_attach_object; } @@ -332,7 +332,7 @@ static int fscache_attach_object(struct fscache_cookie *cookie, hlist_for_each_entry(p, &cookie->parent->backing_objects, cookie_link) { if (p->cache == object->cache) { - if (p->state >= FSCACHE_OBJECT_DYING) { + if (fscache_object_is_dying(p)) { ret = -ENOBUFS; spin_unlock(&cookie->parent->lock); goto cant_attach_object; @@ -400,7 +400,7 @@ void __fscache_invalidate(struct fscache_cookie *cookie) object = hlist_entry(cookie->backing_objects.first, struct fscache_object, cookie_link); - if (object->state < FSCACHE_OBJECT_DYING) + if (fscache_object_is_live(object)) fscache_raise_event( object, FSCACHE_OBJECT_EV_INVALIDATE); } diff --git a/fs/fscache/object.c b/fs/fscache/object.c index 0133699f74ee9b0949c44ea7f37da35fc33689a3..863f6873c0f035cb723e59c2a75fd929ed66c53a 100644 --- a/fs/fscache/object.c +++ b/fs/fscache/object.c @@ -457,10 +457,10 @@ static void fscache_initialise_object(struct fscache_object *object) spin_lock_nested(&parent->lock, 1); _debug("parent %s", fscache_object_states[parent->state]); - if (parent->state >= FSCACHE_OBJECT_DYING) { + if (fscache_object_is_dying(parent)) { _debug("bad parent"); set_bit(FSCACHE_OBJECT_EV_WITHDRAW, &object->events); - } else if (parent->state < FSCACHE_OBJECT_AVAILABLE) { + } else if (!fscache_object_is_available(parent)) { _debug("wait"); /* we may get woken up in this state by child objects @@ -517,9 +517,9 @@ static void fscache_lookup_object(struct fscache_object *object) ASSERTCMP(parent->n_obj_ops, >, 0); /* make sure the parent is still available */ - ASSERTCMP(parent->state, >=, FSCACHE_OBJECT_AVAILABLE); + ASSERT(fscache_object_is_available(parent)); - if (parent->state >= FSCACHE_OBJECT_DYING || + if (fscache_object_is_dying(parent) || test_bit(FSCACHE_IOERROR, &object->cache->flags)) { _debug("unavailable"); set_bit(FSCACHE_OBJECT_EV_WITHDRAW, &object->events); diff --git a/fs/fscache/operation.c b/fs/fscache/operation.c index 762a9ec4ffa4739686e41cd3f8521765ca6e9719..ccf02194e7a686e9c16933eca99bea45044a093c 100644 --- a/fs/fscache/operation.c +++ b/fs/fscache/operation.c @@ -35,7 +35,7 @@ void fscache_enqueue_operation(struct fscache_operation *op) ASSERT(list_empty(&op->pend_link)); ASSERT(op->processor != NULL); - ASSERTCMP(op->object->state, >=, FSCACHE_OBJECT_AVAILABLE); + ASSERT(fscache_object_is_available(op->object)); ASSERTCMP(atomic_read(&op->usage), >, 0); ASSERTCMP(op->state, ==, FSCACHE_OP_ST_IN_PROGRESS); diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h index 9b9c1de4a4601c11a64743fe27750bd287fa5b09..c5f92347cbf8ca165cf1d50b3445b777c86fb4f0 100644 --- a/include/linux/fscache-cache.h +++ b/include/linux/fscache-cache.h @@ -417,15 +417,6 @@ struct fscache_object { extern const char *fscache_object_states[]; -#define fscache_object_is_active(obj) \ - (!test_bit(FSCACHE_IOERROR, &(obj)->cache->flags) && \ - (obj)->state >= FSCACHE_OBJECT_AVAILABLE && \ - (obj)->state < FSCACHE_OBJECT_DYING) - -#define fscache_object_is_dead(obj) \ - (test_bit(FSCACHE_IOERROR, &(obj)->cache->flags) && \ - (obj)->state >= FSCACHE_OBJECT_DYING) - extern void fscache_object_init(struct fscache_object *, struct fscache_cookie *, struct fscache_cache *); @@ -438,6 +429,34 @@ extern void fscache_object_destroy(struct fscache_object *object); #define fscache_object_destroy(object) do {} while(0) #endif +static inline bool fscache_object_is_live(struct fscache_object *object) +{ + return object->state < FSCACHE_OBJECT_DYING; +} + +static inline bool fscache_object_is_dying(struct fscache_object *object) +{ + return !fscache_object_is_live(object); +} + +static inline bool fscache_object_is_available(struct fscache_object *object) +{ + return object->state >= FSCACHE_OBJECT_AVAILABLE; +} + +static inline bool fscache_object_is_active(struct fscache_object *object) +{ + return fscache_object_is_available(object) && + fscache_object_is_live(object) && + !test_bit(FSCACHE_IOERROR, &object->cache->flags); +} + +static inline bool fscache_object_is_dead(struct fscache_object *object) +{ + return fscache_object_is_dying(object) && + test_bit(FSCACHE_IOERROR, &object->cache->flags); +} + /** * fscache_object_destroyed - Note destruction of an object in a cache * @cache: The cache from which the object came