linux/fs/fscache
David Howells 5d00e426f9 fscache: Implement simple cookie state machine
Implement a very simple cookie state machine to handle lookup,
invalidation, withdrawal, relinquishment and, to be added later, commit on
LRU discard.

Three cache methods are provided: ->lookup_cookie() to look up and, if
necessary, create a data storage object; ->withdraw_cookie() to free the
resources associated with that object and potentially delete it; and
->prepare_to_write(), to do prepare for changes to the cached data to be
modified locally.

Changes
=======
ver #3:
 - Fix a race between LRU discard and relinquishment whereby the former
   would override the latter and thus the latter would never happen[1].

ver #2:
 - Don't hold n_accesses elevated whilst cache is bound to a cookie, but
   rather add a flag that prevents the state machine from being queued when
   n_accesses reaches 0.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: linux-cachefs@redhat.com
Link: https://lore.kernel.org/r/599331.1639410068@warthog.procyon.org.uk/ [1]
Link: https://lore.kernel.org/r/163819599657.215744.15799615296912341745.stgit@warthog.procyon.org.uk/ # v1
Link: https://lore.kernel.org/r/163906903925.143852.1805855338154353867.stgit@warthog.procyon.org.uk/ # v2
Link: https://lore.kernel.org/r/163967105456.1823006.14730395299835841776.stgit@warthog.procyon.org.uk/ # v3
Link: https://lore.kernel.org/r/164021510706.640689.7961423370243272583.stgit@warthog.procyon.org.uk/ # v4
2022-01-07 09:22:19 +00:00
..
cache.c fscache: Add a function for a cache backend to note an I/O error 2022-01-07 09:22:19 +00:00
cookie.c fscache: Implement simple cookie state machine 2022-01-07 09:22:19 +00:00
internal.h fscache: Implement cookie-level access helpers 2022-01-07 09:22:19 +00:00
Kconfig fscache: Introduce new driver 2022-01-07 09:22:19 +00:00
main.c fscache: Implement cookie-level access helpers 2022-01-07 09:22:19 +00:00
Makefile fscache: Implement cookie registration 2022-01-07 09:22:19 +00:00
proc.c fscache: Implement cookie registration 2022-01-07 09:22:19 +00:00
stats.c fscache: Implement cookie registration 2022-01-07 09:22:19 +00:00
volume.c fscache: Provide and use cache methods to lookup/create/free a volume 2022-01-07 09:22:19 +00:00