lkml.org 
[lkml]   [2021]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v3 16/68] fscache: Add a function for a cache backend to note an I/O error
    From
    Date
    Add a function to the backend API to note an I/O error in a cache.

    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: linux-cachefs@redhat.com
    Link: https://lore.kernel.org/r/163819598741.215744.891281275151382095.stgit@warthog.procyon.org.uk/ # v1
    Link: https://lore.kernel.org/r/163906901316.143852.15225412215771586528.stgit@warthog.procyon.org.uk/ # v2
    ---

    fs/fscache/cache.c | 20 ++++++++++++++++++++
    include/linux/fscache-cache.h | 2 ++
    2 files changed, 22 insertions(+)

    diff --git a/fs/fscache/cache.c b/fs/fscache/cache.c
    index bbd102be91c4..25eac61f1c29 100644
    --- a/fs/fscache/cache.c
    +++ b/fs/fscache/cache.c
    @@ -321,6 +321,26 @@ void fscache_end_cache_access(struct fscache_cache *cache, enum fscache_access_t
    wake_up_var(&cache->n_accesses);
    }

    +/**
    + * fscache_io_error - Note a cache I/O error
    + * @cache: The record describing the cache
    + *
    + * Note that an I/O error occurred in a cache and that it should no longer be
    + * used for anything. This also reports the error into the kernel log.
    + *
    + * See Documentation/filesystems/caching/backend-api.rst for a complete
    + * description.
    + */
    +void fscache_io_error(struct fscache_cache *cache)
    +{
    + if (fscache_set_cache_state_maybe(cache,
    + FSCACHE_CACHE_IS_ACTIVE,
    + FSCACHE_CACHE_GOT_IOERROR))
    + pr_err("Cache '%s' stopped due to I/O error\n",
    + cache->name);
    +}
    +EXPORT_SYMBOL(fscache_io_error);
    +
    /**
    * fscache_withdraw_cache - Withdraw a cache from the active service
    * @cache: The cache cookie
    diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h
    index a10b66ca3544..936ef731bbc7 100644
    --- a/include/linux/fscache-cache.h
    +++ b/include/linux/fscache-cache.h
    @@ -73,6 +73,8 @@ extern int fscache_add_cache(struct fscache_cache *cache,
    extern void fscache_withdraw_cache(struct fscache_cache *cache);
    extern void fscache_withdraw_volume(struct fscache_volume *volume);

    +extern void fscache_io_error(struct fscache_cache *cache);
    +
    extern void fscache_end_volume_access(struct fscache_volume *volume,
    struct fscache_cookie *cookie,
    enum fscache_access_trace why);

    \
     
     \ /
      Last update: 2021-12-16 17:11    [W:5.139 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site