diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/device-mapper.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index d1f6cd8486f2..6f0e73b4a80d 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
| @@ -210,6 +210,12 @@ struct dm_target { | |||
| 210 | */ | 210 | */ |
| 211 | unsigned num_write_same_requests; | 211 | unsigned num_write_same_requests; |
| 212 | 212 | ||
| 213 | /* | ||
| 214 | * The minimum number of extra bytes allocated in each bio for the | ||
| 215 | * target to use. dm_per_bio_data returns the data location. | ||
| 216 | */ | ||
| 217 | unsigned per_bio_data_size; | ||
| 218 | |||
| 213 | /* target specific data */ | 219 | /* target specific data */ |
| 214 | void *private; | 220 | void *private; |
| 215 | 221 | ||
| @@ -246,6 +252,30 @@ struct dm_target_callbacks { | |||
| 246 | int (*congested_fn) (struct dm_target_callbacks *, int); | 252 | int (*congested_fn) (struct dm_target_callbacks *, int); |
| 247 | }; | 253 | }; |
| 248 | 254 | ||
| 255 | /* | ||
| 256 | * For bio-based dm. | ||
| 257 | * One of these is allocated for each bio. | ||
| 258 | * This structure shouldn't be touched directly by target drivers. | ||
| 259 | * It is here so that we can inline dm_per_bio_data and | ||
| 260 | * dm_bio_from_per_bio_data | ||
| 261 | */ | ||
| 262 | struct dm_target_io { | ||
| 263 | struct dm_io *io; | ||
| 264 | struct dm_target *ti; | ||
| 265 | union map_info info; | ||
| 266 | struct bio clone; | ||
| 267 | }; | ||
| 268 | |||
| 269 | static inline void *dm_per_bio_data(struct bio *bio, size_t data_size) | ||
| 270 | { | ||
| 271 | return (char *)bio - offsetof(struct dm_target_io, clone) - data_size; | ||
| 272 | } | ||
| 273 | |||
| 274 | static inline struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size) | ||
| 275 | { | ||
| 276 | return (struct bio *)((char *)data + data_size + offsetof(struct dm_target_io, clone)); | ||
| 277 | } | ||
| 278 | |||
| 249 | int dm_register_target(struct target_type *t); | 279 | int dm_register_target(struct target_type *t); |
| 250 | void dm_unregister_target(struct target_type *t); | 280 | void dm_unregister_target(struct target_type *t); |
| 251 | 281 | ||
