dm bufio: add dm_buffer_cache abstraction
authorJoe Thornber <ejt@redhat.com>
Fri, 10 Mar 2023 16:02:29 +0000 (16:02 +0000)
committerMike Snitzer <snitzer@kernel.org>
Thu, 30 Mar 2023 19:57:50 +0000 (15:57 -0400)
commit2cd7a6d41fe8ec85f82e1ca31bceb0dc0d849f60
tree3cd06895fa31e8fc6defa9cfb6339f6171b4136e
parentbe845babda1bb168d3f9f47c171f0a24a3312cba
dm bufio: add dm_buffer_cache abstraction

The buffer cache is responsible for managing the holder count,
tracking clean/dirty state, and choosing buffers via predicates.
Higher level code is responsible for allocation of buffers, IO and
eviction/cache sizing.

The buffer cache has thread safe methods for acquiring a reference
to an existing buffer. All other methods in buffer cache are _not_
threadsafe, and only contain enough locking to guarantee the safe
methods.

Rather than a single mutex, sharded rw_semaphores are used to allow
concurrent threads to 'get' buffers. Each rw_semaphore protects its
own rbtree of buffer entries.

Code that uses this new dm_buffer_cache abstraction will be introduced
in a following commit.

This commit moves the dm_buffer struct in preparation for finer grained
dm_buffer changes, in the next commit, to be more easily seen. It also
introduces temporary dm_buffer struct members to allow compilation of
this intermediate commit (they will be elided in the next commit).

This commit will cause "defined but not used" compiler warnings that
will be resolved by the next commit.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-bufio.c