|
@@ -7,6 +7,7 @@
|
|
|
#ifndef DM_CACHE_POLICY_INTERNAL_H
|
|
|
#define DM_CACHE_POLICY_INTERNAL_H
|
|
|
|
|
|
+#include <linux/vmalloc.h>
|
|
|
#include "dm-cache-policy.h"
|
|
|
|
|
|
/*----------------------------------------------------------------*/
|
|
@@ -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.
|
|
|
*/
|