These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / md / persistent-data / dm-btree-spine.c
index 1b5e13e..b27b809 100644 (file)
@@ -117,9 +117,9 @@ int new_block(struct dm_btree_info *info, struct dm_block **result)
        return dm_tm_new_block(info->tm, &btree_node_validator, result);
 }
 
-int unlock_block(struct dm_btree_info *info, struct dm_block *b)
+void unlock_block(struct dm_btree_info *info, struct dm_block *b)
 {
-       return dm_tm_unlock(info->tm, b);
+       dm_tm_unlock(info->tm, b);
 }
 
 /*----------------------------------------------------------------*/
@@ -137,9 +137,7 @@ int exit_ro_spine(struct ro_spine *s)
        int r = 0, i;
 
        for (i = 0; i < s->count; i++) {
-               int r2 = unlock_block(s->info, s->nodes[i]);
-               if (r2 < 0)
-                       r = r2;
+               unlock_block(s->info, s->nodes[i]);
        }
 
        return r;
@@ -150,9 +148,7 @@ int ro_step(struct ro_spine *s, dm_block_t new_child)
        int r;
 
        if (s->count == 2) {
-               r = unlock_block(s->info, s->nodes[0]);
-               if (r < 0)
-                       return r;
+               unlock_block(s->info, s->nodes[0]);
                s->nodes[0] = s->nodes[1];
                s->count--;
        }
@@ -194,9 +190,7 @@ int exit_shadow_spine(struct shadow_spine *s)
        int r = 0, i;
 
        for (i = 0; i < s->count; i++) {
-               int r2 = unlock_block(s->info, s->nodes[i]);
-               if (r2 < 0)
-                       r = r2;
+               unlock_block(s->info, s->nodes[i]);
        }
 
        return r;
@@ -208,9 +202,7 @@ int shadow_step(struct shadow_spine *s, dm_block_t b,
        int r;
 
        if (s->count == 2) {
-               r = unlock_block(s->info, s->nodes[0]);
-               if (r < 0)
-                       return r;
+               unlock_block(s->info, s->nodes[0]);
                s->nodes[0] = s->nodes[1];
                s->count--;
        }
@@ -249,3 +241,40 @@ int shadow_root(struct shadow_spine *s)
 {
        return s->root;
 }
+
+static void le64_inc(void *context, const void *value_le)
+{
+       struct dm_transaction_manager *tm = context;
+       __le64 v_le;
+
+       memcpy(&v_le, value_le, sizeof(v_le));
+       dm_tm_inc(tm, le64_to_cpu(v_le));
+}
+
+static void le64_dec(void *context, const void *value_le)
+{
+       struct dm_transaction_manager *tm = context;
+       __le64 v_le;
+
+       memcpy(&v_le, value_le, sizeof(v_le));
+       dm_tm_dec(tm, le64_to_cpu(v_le));
+}
+
+static int le64_equal(void *context, const void *value1_le, const void *value2_le)
+{
+       __le64 v1_le, v2_le;
+
+       memcpy(&v1_le, value1_le, sizeof(v1_le));
+       memcpy(&v2_le, value2_le, sizeof(v2_le));
+       return v1_le == v2_le;
+}
+
+void init_le64_type(struct dm_transaction_manager *tm,
+                   struct dm_btree_value_type *vt)
+{
+       vt->context = tm;
+       vt->size = sizeof(__le64);
+       vt->inc = le64_inc;
+       vt->dec = le64_dec;
+       vt->equal = le64_equal;
+}