Add a couple of macros to report I/O errors and to tell fscache that the cache is in trouble. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> cc: linux-cachefs@xxxxxxxxxx --- fs/cachefiles/internal.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h index d615213a2fa1..230a1a2bf01d 100644 --- a/fs/cachefiles/internal.h +++ b/fs/cachefiles/internal.h @@ -153,6 +153,26 @@ static inline int cachefiles_inject_remove_error(void) return cachefiles_error_injection_state & 2 ? -EIO : 0; } +/* + * error handling + */ + +#define cachefiles_io_error(___cache, FMT, ...) \ +do { \ + pr_err("I/O Error: " FMT"\n", ##__VA_ARGS__); \ + fscache_io_error((___cache)->cache); \ + set_bit(CACHEFILES_DEAD, &(___cache)->flags); \ +} while (0) + +#define cachefiles_io_error_obj(object, FMT, ...) \ +do { \ + struct cachefiles_cache *___cache; \ + \ + ___cache = (object)->volume->cache; \ + cachefiles_io_error(___cache, FMT " [o=%08x]", ##__VA_ARGS__, \ + (object)->debug_id); \ +} while (0) + /* * debug tracing