dm: update target status functions to support IMA measurement
[linux-block.git] / drivers / md / dm-era-target.c
index d9ac7372108c98ea1719600aa219c41bab884838..2a78f687414317588da2d5f484e3557d0d82cc79 100644 (file)
@@ -363,28 +363,32 @@ static void ws_unpack(const struct writeset_disk *disk, struct writeset_metadata
        core->root = le64_to_cpu(disk->root);
 }
 
-static void ws_inc(void *context, const void *value)
+static void ws_inc(void *context, const void *value, unsigned count)
 {
        struct era_metadata *md = context;
        struct writeset_disk ws_d;
        dm_block_t b;
+       unsigned i;
 
-       memcpy(&ws_d, value, sizeof(ws_d));
-       b = le64_to_cpu(ws_d.root);
-
-       dm_tm_inc(md->tm, b);
+       for (i = 0; i < count; i++) {
+               memcpy(&ws_d, value + (i * sizeof(ws_d)), sizeof(ws_d));
+               b = le64_to_cpu(ws_d.root);
+               dm_tm_inc(md->tm, b);
+       }
 }
 
-static void ws_dec(void *context, const void *value)
+static void ws_dec(void *context, const void *value, unsigned count)
 {
        struct era_metadata *md = context;
        struct writeset_disk ws_d;
        dm_block_t b;
+       unsigned i;
 
-       memcpy(&ws_d, value, sizeof(ws_d));
-       b = le64_to_cpu(ws_d.root);
-
-       dm_bitset_del(&md->bitset_info, b);
+       for (i = 0; i < count; i++) {
+               memcpy(&ws_d, value + (i * sizeof(ws_d)), sizeof(ws_d));
+               b = le64_to_cpu(ws_d.root);
+               dm_bitset_del(&md->bitset_info, b);
+       }
 }
 
 static int ws_eq(void *context, const void *value1, const void *value2)
@@ -1640,6 +1644,10 @@ static void era_status(struct dm_target *ti, status_type_t type,
                format_dev_t(buf, era->origin_dev->bdev->bd_dev);
                DMEMIT("%s %u", buf, era->sectors_per_block);
                break;
+
+       case STATUSTYPE_IMA:
+               *result = '\0';
+               break;
        }
 
        return;