summaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-bufio.c
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2023-03-29 16:29:34 +0200
committerMike Snitzer <snitzer@kernel.org>2023-03-30 21:57:51 +0200
commit363b7fd76c91dc611a56d992e9550bb1ba070e1a (patch)
treea8871fafe3b50344d8ff12a4fc7403cfdfd9772a /drivers/md/dm-bufio.c
parentdm bio prison v1: intelligently size dm_bio_prison's prison_regions (diff)
downloadlinux-363b7fd76c91dc611a56d992e9550bb1ba070e1a.tar.xz
linux-363b7fd76c91dc611a56d992e9550bb1ba070e1a.zip
dm: improve hash_locks sizing and hash function
Both bufio and bio-prison-v1 use the identical model for splitting their respective locks and rbtrees. Improve dm_num_hash_locks() to distribute across more rbtrees to improve overall performance -- but the maximum number of locks/rbtrees is still 64. Also factor out a common hash function named dm_hash_locks_index(), the magic numbers used were determined to be best using this program: https://gist.github.com/jthornber/e05c47daa7b500c56dc339269c5467fc Signed-off-by: Joe Thornber <ejt@redhat.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'drivers/md/dm-bufio.c')
-rw-r--r--drivers/md/dm-bufio.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index c1126ad45bdb..8a448185662c 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -398,7 +398,7 @@ struct dm_buffer_cache {
static inline unsigned int cache_index(sector_t block, unsigned int num_locks)
{
- return block & (num_locks - 1);
+ return dm_hash_locks_index(block, num_locks);
}
static inline void cache_read_lock(struct dm_buffer_cache *bc, sector_t block)