Commit 451b9e00 authored by Joe Thornber's avatar Joe Thornber Committed by Mike Snitzer

dm cache: pull out some bitset utility functions for reuse

Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 20f6814b
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#ifndef DM_CACHE_POLICY_INTERNAL_H #ifndef DM_CACHE_POLICY_INTERNAL_H
#define DM_CACHE_POLICY_INTERNAL_H #define DM_CACHE_POLICY_INTERNAL_H
#include <linux/vmalloc.h>
#include "dm-cache-policy.h" #include "dm-cache-policy.h"
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
...@@ -106,6 +107,33 @@ static inline int policy_set_config_value(struct dm_cache_policy *p, ...@@ -106,6 +107,33 @@ static inline int policy_set_config_value(struct dm_cache_policy *p,
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
/*
* Some utility functions commonly used by policies and the core target.
*/
static inline size_t bitset_size_in_bytes(unsigned nr_entries)
{
return sizeof(unsigned long) * dm_div_up(nr_entries, BITS_PER_LONG);
}
static inline unsigned long *alloc_bitset(unsigned nr_entries)
{
size_t s = bitset_size_in_bytes(nr_entries);
return vzalloc(s);
}
static inline void clear_bitset(void *bitset, unsigned nr_entries)
{
size_t s = bitset_size_in_bytes(nr_entries);
memset(bitset, 0, s);
}
static inline void free_bitset(unsigned long *bits)
{
vfree(bits);
}
/*----------------------------------------------------------------*/
/* /*
* Creates a new cache policy given a policy name, a cache size, an origin size and the block size. * Creates a new cache policy given a policy name, a cache size, an origin size and the block size.
*/ */
......
...@@ -111,30 +111,6 @@ static void iot_io_end(struct io_tracker *iot, sector_t len) ...@@ -111,30 +111,6 @@ static void iot_io_end(struct io_tracker *iot, sector_t len)
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
static size_t bitset_size_in_bytes(unsigned nr_entries)
{
return sizeof(unsigned long) * dm_div_up(nr_entries, BITS_PER_LONG);
}
static unsigned long *alloc_bitset(unsigned nr_entries)
{
size_t s = bitset_size_in_bytes(nr_entries);
return vzalloc(s);
}
static void clear_bitset(void *bitset, unsigned nr_entries)
{
size_t s = bitset_size_in_bytes(nr_entries);
memset(bitset, 0, s);
}
static void free_bitset(unsigned long *bits)
{
vfree(bits);
}
/*----------------------------------------------------------------*/
/* /*
* There are a couple of places where we let a bio run, but want to do some * There are a couple of places where we let a bio run, but want to do some
* work before calling its endio function. We do this by temporarily * work before calling its endio function. We do this by temporarily
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment