Merge branch 'for_linus' of git://cavan.codon.org.uk/platform-drivers-x86
[firefly-linux-kernel-4.4.55.git] / include / linux / device-mapper.h
index a5cda3ea6b88fa015ec173b6ebc9c1d5b32b2bc6..1e483fa7afb41b681ba802061d4ae5ab4ad4676a 100644 (file)
@@ -175,6 +175,14 @@ struct target_type {
 #define DM_TARGET_IMMUTABLE            0x00000004
 #define dm_target_is_immutable(type)   ((type)->features & DM_TARGET_IMMUTABLE)
 
+/*
+ * Some targets need to be sent the same WRITE bio severals times so
+ * that they can send copies of it to different devices.  This function
+ * examines any supplied bio and returns the number of copies of it the
+ * target requires.
+ */
+typedef unsigned (*dm_num_write_bios_fn) (struct dm_target *ti, struct bio *bio);
+
 struct dm_target {
        struct dm_table *table;
        struct target_type *type;
@@ -187,26 +195,26 @@ struct dm_target {
        uint32_t max_io_len;
 
        /*
-        * A number of zero-length barrier requests that will be submitted
+        * A number of zero-length barrier bios that will be submitted
         * to the target for the purpose of flushing cache.
         *
-        * The request number can be accessed with dm_bio_get_target_request_nr.
-        * It is a responsibility of the target driver to remap these requests
+        * The bio number can be accessed with dm_bio_get_target_bio_nr.
+        * It is a responsibility of the target driver to remap these bios
         * to the real underlying devices.
         */
-       unsigned num_flush_requests;
+       unsigned num_flush_bios;
 
        /*
-        * The number of discard requests that will be submitted to the target.
-        * The request number can be accessed with dm_bio_get_target_request_nr.
+        * The number of discard bios that will be submitted to the target.
+        * The bio number can be accessed with dm_bio_get_target_bio_nr.
         */
-       unsigned num_discard_requests;
+       unsigned num_discard_bios;
 
        /*
-        * The number of WRITE SAME requests that will be submitted to the target.
-        * The request number can be accessed with dm_bio_get_target_request_nr.
+        * The number of WRITE SAME bios that will be submitted to the target.
+        * The bio number can be accessed with dm_bio_get_target_bio_nr.
         */
-       unsigned num_write_same_requests;
+       unsigned num_write_same_bios;
 
        /*
         * The minimum number of extra bytes allocated in each bio for the
@@ -214,6 +222,13 @@ struct dm_target {
         */
        unsigned per_bio_data_size;
 
+       /*
+        * If defined, this function is called to find out how many
+        * duplicate bios should be sent to the target when writing
+        * data.
+        */
+       dm_num_write_bios_fn num_write_bios;
+
        /* target specific data */
        void *private;
 
@@ -233,10 +248,10 @@ struct dm_target {
        bool discards_supported:1;
 
        /*
-        * Set if the target required discard request to be split
+        * Set if the target required discard bios to be split
         * on max_io_len boundary.
         */
-       bool split_discard_requests:1;
+       bool split_discard_bios:1;
 
        /*
         * Set if this target does not return zeroes on discarded blocks.
@@ -261,7 +276,7 @@ struct dm_target_io {
        struct dm_io *io;
        struct dm_target *ti;
        union map_info info;
-       unsigned target_request_nr;
+       unsigned target_bio_nr;
        struct bio clone;
 };
 
@@ -275,9 +290,9 @@ static inline struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size)
        return (struct bio *)((char *)data + data_size + offsetof(struct dm_target_io, clone));
 }
 
-static inline unsigned dm_bio_get_target_request_nr(const struct bio *bio)
+static inline unsigned dm_bio_get_target_bio_nr(const struct bio *bio)
 {
-       return container_of(bio, struct dm_target_io, clone)->target_request_nr;
+       return container_of(bio, struct dm_target_io, clone)->target_bio_nr;
 }
 
 int dm_register_target(struct target_type *t);