'struct dm_block_validator' are not modified in these drivers.
Constifying this structure moves some data to a read-only section, so
increase overall security.
On a x86_64, with allmodconfig, as an example:
Before:
======
   text	   data	    bss	    dec	    hex	filename
  32047	    920	     16	  32983	   80d7	drivers/md/dm-cache-metadata.o
After:
=====
   text	   data	    bss	    dec	    hex	filename
  32075	    896	     16	  32987	   80db	drivers/md/dm-cache-metadata.o
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
  */
 #define SUPERBLOCK_CSUM_XOR 9031977
 
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t sb_block_size)
 {
        return 0;
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t sb_block_size)
 {
        return check_metadata_version(disk_super);
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
 
 /*
  * Superblock validation.
  */
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b, size_t sb_block_size)
 {
        struct superblock_disk *sb;
        sb->csum = cpu_to_le32(csum);
 }
 
-static int sb_check(struct dm_block_validator *v, struct dm_block *b,
+static int sb_check(const struct dm_block_validator *v, struct dm_block *b,
                    size_t sb_block_size)
 {
        struct superblock_disk *sb;
        return 0;
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
 
  * Superblock validation
  *--------------------------------------------------------------
  */
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t sb_block_size)
 {
        return 0;
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t sb_block_size)
 {
        return check_metadata_version(disk);
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
 
  */
 #define SUPERBLOCK_CSUM_XOR 160774
 
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t block_size)
 {
                                                      SUPERBLOCK_CSUM_XOR));
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t block_size)
 {
        return 0;
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
 
  */
 #define CSUM_XOR 595846735
 
-static void array_block_prepare_for_write(struct dm_block_validator *v,
+static void array_block_prepare_for_write(const struct dm_block_validator *v,
                                          struct dm_block *b,
                                          size_t size_of_block)
 {
                                                 CSUM_XOR));
 }
 
-static int array_block_check(struct dm_block_validator *v,
+static int array_block_check(const struct dm_block_validator *v,
                             struct dm_block *b,
                             size_t size_of_block)
 {
        return 0;
 }
 
-static struct dm_block_validator array_validator = {
+static const struct dm_block_validator array_validator = {
        .name = "array",
        .prepare_for_write = array_block_prepare_for_write,
        .check = array_block_check
 
 EXPORT_SYMBOL_GPL(dm_block_data);
 
 struct buffer_aux {
-       struct dm_block_validator *validator;
+       const struct dm_block_validator *validator;
        int write_locked;
 
 #ifdef CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING
 static int dm_bm_validate_buffer(struct dm_block_manager *bm,
                                 struct dm_buffer *buf,
                                 struct buffer_aux *aux,
-                                struct dm_block_validator *v)
+                                const struct dm_block_validator *v)
 {
        if (unlikely(!aux->validator)) {
                int r;
        return 0;
 }
 int dm_bm_read_lock(struct dm_block_manager *bm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result)
 {
        struct buffer_aux *aux;
 EXPORT_SYMBOL_GPL(dm_bm_read_lock);
 
 int dm_bm_write_lock(struct dm_block_manager *bm,
-                    dm_block_t b, struct dm_block_validator *v,
+                    dm_block_t b, const struct dm_block_validator *v,
                     struct dm_block **result)
 {
        struct buffer_aux *aux;
 EXPORT_SYMBOL_GPL(dm_bm_write_lock);
 
 int dm_bm_read_try_lock(struct dm_block_manager *bm,
-                       dm_block_t b, struct dm_block_validator *v,
+                       dm_block_t b, const struct dm_block_validator *v,
                        struct dm_block **result)
 {
        struct buffer_aux *aux;
 }
 
 int dm_bm_write_lock_zero(struct dm_block_manager *bm,
-                         dm_block_t b, struct dm_block_validator *v,
+                         dm_block_t b, const struct dm_block_validator *v,
                          struct dm_block **result)
 {
        int r;
 
  */
 struct dm_block_validator {
        const char *name;
-       void (*prepare_for_write)(struct dm_block_validator *v, struct dm_block *b, size_t block_size);
+       void (*prepare_for_write)(const struct dm_block_validator *v,
+                                 struct dm_block *b, size_t block_size);
 
        /*
         * Return 0 if the checksum is valid or < 0 on error.
         */
-       int (*check)(struct dm_block_validator *v, struct dm_block *b, size_t block_size);
+       int (*check)(const struct dm_block_validator *v,
+                    struct dm_block *b, size_t block_size);
 };
 
 /*----------------------------------------------------------------*/
  * written back to the disk sometime after dm_bm_unlock is called.
  */
 int dm_bm_read_lock(struct dm_block_manager *bm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 int dm_bm_write_lock(struct dm_block_manager *bm, dm_block_t b,
-                    struct dm_block_validator *v,
+                    const struct dm_block_validator *v,
                     struct dm_block **result);
 
 /*
  * available immediately.
  */
 int dm_bm_read_try_lock(struct dm_block_manager *bm, dm_block_t b,
-                       struct dm_block_validator *v,
+                       const struct dm_block_validator *v,
                        struct dm_block **result);
 
 /*
  * overwrite the block completely.  It saves a disk read.
  */
 int dm_bm_write_lock_zero(struct dm_block_manager *bm, dm_block_t b,
-                         struct dm_block_validator *v,
+                         const struct dm_block_validator *v,
                          struct dm_block **result);
 
 void dm_bm_unlock(struct dm_block *b);
 
  */
 int lower_bound(struct btree_node *n, uint64_t key);
 
-extern struct dm_block_validator btree_node_validator;
+extern const struct dm_block_validator btree_node_validator;
 
 /*
  * Value type for upper levels of multi-level btrees.
 
 
 #define BTREE_CSUM_XOR 121107
 
-static void node_prepare_for_write(struct dm_block_validator *v,
+static void node_prepare_for_write(const struct dm_block_validator *v,
                                   struct dm_block *b,
                                   size_t block_size)
 {
                                             BTREE_CSUM_XOR));
 }
 
-static int node_check(struct dm_block_validator *v,
+static int node_check(const struct dm_block_validator *v,
                      struct dm_block *b,
                      size_t block_size)
 {
        return 0;
 }
 
-struct dm_block_validator btree_node_validator = {
+const struct dm_block_validator btree_node_validator = {
        .name = "btree_node",
        .prepare_for_write = node_prepare_for_write,
        .check = node_check
 
  */
 #define INDEX_CSUM_XOR 160478
 
-static void index_prepare_for_write(struct dm_block_validator *v,
+static void index_prepare_for_write(const struct dm_block_validator *v,
                                    struct dm_block *b,
                                    size_t block_size)
 {
                                                 INDEX_CSUM_XOR));
 }
 
-static int index_check(struct dm_block_validator *v,
+static int index_check(const struct dm_block_validator *v,
                       struct dm_block *b,
                       size_t block_size)
 {
        return 0;
 }
 
-static struct dm_block_validator index_validator = {
+static const struct dm_block_validator index_validator = {
        .name = "index",
        .prepare_for_write = index_prepare_for_write,
        .check = index_check
  */
 #define BITMAP_CSUM_XOR 240779
 
-static void dm_bitmap_prepare_for_write(struct dm_block_validator *v,
+static void dm_bitmap_prepare_for_write(const struct dm_block_validator *v,
                                        struct dm_block *b,
                                        size_t block_size)
 {
                                                       BITMAP_CSUM_XOR));
 }
 
-static int dm_bitmap_check(struct dm_block_validator *v,
+static int dm_bitmap_check(const struct dm_block_validator *v,
                           struct dm_block *b,
                           size_t block_size)
 {
        return 0;
 }
 
-static struct dm_block_validator dm_sm_bitmap_validator = {
+static const struct dm_block_validator dm_sm_bitmap_validator = {
        .name = "sm_bitmap",
        .prepare_for_write = dm_bitmap_prepare_for_write,
        .check = dm_bitmap_check,
 
 EXPORT_SYMBOL_GPL(dm_tm_commit);
 
 int dm_tm_new_block(struct dm_transaction_manager *tm,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result)
 {
        int r;
 }
 
 static int __shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                         struct dm_block_validator *v,
+                         const struct dm_block_validator *v,
                          struct dm_block **result)
 {
        int r;
 }
 
 int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                      struct dm_block_validator *v, struct dm_block **result,
+                      const struct dm_block_validator *v, struct dm_block **result,
                       int *inc_children)
 {
        int r;
 EXPORT_SYMBOL_GPL(dm_tm_shadow_block);
 
 int dm_tm_read_lock(struct dm_transaction_manager *tm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **blk)
 {
        if (tm->is_clone) {
 
  * Zeroes the new block and returns with write lock held.
  */
 int dm_tm_new_block(struct dm_transaction_manager *tm,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 /*
  * it locked when you call this.
  */
 int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                      struct dm_block_validator *v,
+                      const struct dm_block_validator *v,
                       struct dm_block **result, int *inc_children);
 
 /*
  * on it outstanding then it'll block.
  */
 int dm_tm_read_lock(struct dm_transaction_manager *tm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 void dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b);