lkml.org 
[lkml]   [2020]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[RFC PATCH 18/61] fscache: Temporarily disable fscache_invalidate()
    From
    Date
    Temporarily disable the fscache side of fscache_invalidate() so that the
    operation managing code can be removed.

    Signed-off-by: David Howells <dhowells@redhat.com>
    ---

    fs/cachefiles/interface.c | 9 ++---
    fs/fscache/cookie.c | 4 +-
    fs/fscache/object.c | 78 +----------------------------------------
    include/linux/fscache-cache.h | 2 +
    4 files changed, 7 insertions(+), 86 deletions(-)

    diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c
    index 81322e3acadd..99f42d216ef7 100644
    --- a/fs/cachefiles/interface.c
    +++ b/fs/cachefiles/interface.c
    @@ -388,7 +388,7 @@ static int cachefiles_attr_changed(struct cachefiles_object *object)
    /*
    * Invalidate an object
    */
    -static void cachefiles_invalidate_object(struct fscache_operation *op)
    +static void cachefiles_invalidate_object(struct fscache_object *_object)
    {
    struct cachefiles_object *object;
    struct cachefiles_cache *cache;
    @@ -397,14 +397,14 @@ static void cachefiles_invalidate_object(struct fscache_operation *op)
    uint64_t ni_size;
    int ret;

    - object = container_of(op->object, struct cachefiles_object, fscache);
    + object = container_of(_object, struct cachefiles_object, fscache);
    cache = container_of(object->fscache.cache,
    struct cachefiles_cache, cache);

    - ni_size = op->object->cookie->object_size;
    + ni_size = object->fscache.cookie->object_size;

    _enter("{OBJ%x},[%llu]",
    - op->object->debug_id, (unsigned long long)ni_size);
    + object->fscache.debug_id, (unsigned long long)ni_size);

    if (object->backer) {
    ASSERT(d_is_reg(object->backer));
    @@ -425,7 +425,6 @@ static void cachefiles_invalidate_object(struct fscache_operation *op)
    }
    }

    - fscache_op_complete(op, true);
    _leave("");
    }

    diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c
    index cd2e166d5f29..cd105227cb83 100644
    --- a/fs/fscache/cookie.c
    +++ b/fs/fscache/cookie.c
    @@ -653,9 +653,7 @@ void __fscache_invalidate(struct fscache_cookie *cookie)
    object = hlist_entry(cookie->backing_objects.first,
    struct fscache_object,
    cookie_link);
    - if (fscache_object_is_live(object))
    - fscache_raise_event(
    - object, FSCACHE_OBJECT_EV_INVALIDATE);
    + /* TODO: Do invalidation */
    }

    spin_unlock(&cookie->lock);
    diff --git a/fs/fscache/object.c b/fs/fscache/object.c
    index a90451cdbdde..73231fdf565c 100644
    --- a/fs/fscache/object.c
    +++ b/fs/fscache/object.c
    @@ -908,86 +908,10 @@ static void fscache_dequeue_object(struct fscache_object *object)
    _leave("");
    }

    -/*
    - * Asynchronously invalidate an object.
    - */
    -static const struct fscache_state *_fscache_invalidate_object(struct fscache_object *object,
    - int event)
    -{
    - struct fscache_operation *op;
    - struct fscache_cookie *cookie = object->cookie;
    -
    - _enter("{OBJ%x},%d", object->debug_id, event);
    -
    - /* We're going to need the cookie. If the cookie is not available then
    - * retire the object instead.
    - */
    - if (!fscache_use_cookie(object)) {
    - set_bit(FSCACHE_OBJECT_RETIRED, &object->flags);
    - _leave(" [no cookie]");
    - return transit_to(KILL_OBJECT);
    - }
    -
    - /* Reject any new read/write ops and abort any that are pending. */
    - clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags);
    - fscache_cancel_all_ops(object);
    -
    - /* Now we have to wait for in-progress reads and writes */
    - op = kzalloc(sizeof(*op), GFP_KERNEL);
    - if (!op)
    - goto nomem;
    -
    - fscache_operation_init(cookie, op, object->cache->ops->invalidate_object,
    - NULL, NULL);
    - op->flags = FSCACHE_OP_ASYNC |
    - (1 << FSCACHE_OP_EXCLUSIVE) |
    - (1 << FSCACHE_OP_UNUSE_COOKIE);
    -
    - spin_lock(&cookie->lock);
    - if (fscache_submit_exclusive_op(object, op) < 0)
    - goto submit_op_failed;
    - spin_unlock(&cookie->lock);
    - fscache_put_operation(op);
    -
    - /* Once we've completed the invalidation, we know there will be no data
    - * stored in the cache and thus we can reinstate the data-check-skip
    - * optimisation.
    - */
    - set_bit(FSCACHE_COOKIE_NO_DATA_YET, &cookie->flags);
    -
    - /* We can allow read and write requests to come in once again. They'll
    - * queue up behind our exclusive invalidation operation.
    - */
    - if (test_and_clear_bit(FSCACHE_COOKIE_INVALIDATING, &cookie->flags))
    - wake_up_bit(&cookie->flags, FSCACHE_COOKIE_INVALIDATING);
    - _leave(" [ok]");
    - return transit_to(UPDATE_OBJECT);
    -
    -nomem:
    - fscache_mark_object_dead(object);
    - fscache_unuse_cookie(object);
    - _leave(" [ENOMEM]");
    - return transit_to(KILL_OBJECT);
    -
    -submit_op_failed:
    - fscache_mark_object_dead(object);
    - spin_unlock(&cookie->lock);
    - fscache_unuse_cookie(object);
    - kfree(op);
    - _leave(" [EIO]");
    - return transit_to(KILL_OBJECT);
    -}
    -
    static const struct fscache_state *fscache_invalidate_object(struct fscache_object *object,
    int event)
    {
    - const struct fscache_state *s;
    -
    - fscache_stat(&fscache_n_invalidates_run);
    - fscache_stat(&fscache_n_cop_invalidate_object);
    - s = _fscache_invalidate_object(object, event);
    - fscache_stat_d(&fscache_n_cop_invalidate_object);
    - return s;
    + return transit_to(UPDATE_OBJECT);
    }

    /*
    diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h
    index 627e1ab7123d..3c543f8ac663 100644
    --- a/include/linux/fscache-cache.h
    +++ b/include/linux/fscache-cache.h
    @@ -171,7 +171,7 @@ struct fscache_cache_ops {
    void (*update_object)(struct fscache_object *object);

    /* Invalidate an object */
    - void (*invalidate_object)(struct fscache_operation *op);
    + void (*invalidate_object)(struct fscache_object *object);

    /* discard the resources pinned by an object and effect retirement if
    * necessary */

    \
     
     \ /
      Last update: 2020-05-04 19:11    [W:2.677 / U:1.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site