diff options
| author | Mikulas Patocka <mpatocka@redhat.com> | 2012-12-21 15:23:39 -0500 |
|---|---|---|
| committer | Alasdair G Kergon <agk@redhat.com> | 2012-12-21 15:23:39 -0500 |
| commit | ddbd658f6446a35e4d6ba84812fd71023320cae2 (patch) | |
| tree | 6c5bf9fd1cab10d20c21eb8582a5cc73f1bccc85 | |
| parent | 42bc954f2a4525c9034667dedc9bd1c342208013 (diff) | |
dm: move target request nr to dm_target_io
This patch moves target_request_nr from map_info to dm_target_io and
makes it accessible with dm_bio_get_target_request_nr.
This patch is a preparation for the next patch that removes map_info.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
| -rw-r--r-- | drivers/md/dm-snap.c | 2 | ||||
| -rw-r--r-- | drivers/md/dm-stripe.c | 4 | ||||
| -rw-r--r-- | drivers/md/dm.c | 3 | ||||
| -rw-r--r-- | include/linux/device-mapper.h | 14 |
4 files changed, 15 insertions, 8 deletions
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 5e88bc437be0..b7e179cdc5af 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
| @@ -1682,7 +1682,7 @@ static int snapshot_merge_map(struct dm_target *ti, struct bio *bio, | |||
| 1682 | chunk_t chunk; | 1682 | chunk_t chunk; |
| 1683 | 1683 | ||
| 1684 | if (bio->bi_rw & REQ_FLUSH) { | 1684 | if (bio->bi_rw & REQ_FLUSH) { |
| 1685 | if (!map_context->target_request_nr) | 1685 | if (!dm_bio_get_target_request_nr(bio)) |
| 1686 | bio->bi_bdev = s->origin->bdev; | 1686 | bio->bi_bdev = s->origin->bdev; |
| 1687 | else | 1687 | else |
| 1688 | bio->bi_bdev = s->cow->bdev; | 1688 | bio->bi_bdev = s->cow->bdev; |
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c index e2f876539743..4e7ba82146c0 100644 --- a/drivers/md/dm-stripe.c +++ b/drivers/md/dm-stripe.c | |||
| @@ -279,13 +279,13 @@ static int stripe_map(struct dm_target *ti, struct bio *bio, | |||
| 279 | unsigned target_request_nr; | 279 | unsigned target_request_nr; |
| 280 | 280 | ||
| 281 | if (bio->bi_rw & REQ_FLUSH) { | 281 | if (bio->bi_rw & REQ_FLUSH) { |
| 282 | target_request_nr = map_context->target_request_nr; | 282 | target_request_nr = dm_bio_get_target_request_nr(bio); |
| 283 | BUG_ON(target_request_nr >= sc->stripes); | 283 | BUG_ON(target_request_nr >= sc->stripes); |
| 284 | bio->bi_bdev = sc->stripe[target_request_nr].dev->bdev; | 284 | bio->bi_bdev = sc->stripe[target_request_nr].dev->bdev; |
| 285 | return DM_MAPIO_REMAPPED; | 285 | return DM_MAPIO_REMAPPED; |
| 286 | } | 286 | } |
| 287 | if (unlikely(bio->bi_rw & REQ_DISCARD)) { | 287 | if (unlikely(bio->bi_rw & REQ_DISCARD)) { |
| 288 | target_request_nr = map_context->target_request_nr; | 288 | target_request_nr = dm_bio_get_target_request_nr(bio); |
| 289 | BUG_ON(target_request_nr >= sc->stripes); | 289 | BUG_ON(target_request_nr >= sc->stripes); |
| 290 | return stripe_map_discard(sc, bio, target_request_nr); | 290 | return stripe_map_discard(sc, bio, target_request_nr); |
| 291 | } | 291 | } |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 2765cf2ba0ff..5ee580b4f330 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
| @@ -1099,6 +1099,7 @@ static struct dm_target_io *alloc_tio(struct clone_info *ci, | |||
| 1099 | tio->io = ci->io; | 1099 | tio->io = ci->io; |
| 1100 | tio->ti = ti; | 1100 | tio->ti = ti; |
| 1101 | memset(&tio->info, 0, sizeof(tio->info)); | 1101 | memset(&tio->info, 0, sizeof(tio->info)); |
| 1102 | tio->target_request_nr = 0; | ||
| 1102 | 1103 | ||
| 1103 | return tio; | 1104 | return tio; |
| 1104 | } | 1105 | } |
| @@ -1109,7 +1110,7 @@ static void __issue_target_request(struct clone_info *ci, struct dm_target *ti, | |||
| 1109 | struct dm_target_io *tio = alloc_tio(ci, ti, ci->bio->bi_max_vecs); | 1110 | struct dm_target_io *tio = alloc_tio(ci, ti, ci->bio->bi_max_vecs); |
| 1110 | struct bio *clone = &tio->clone; | 1111 | struct bio *clone = &tio->clone; |
| 1111 | 1112 | ||
| 1112 | tio->info.target_request_nr = request_nr; | 1113 | tio->target_request_nr = request_nr; |
| 1113 | 1114 | ||
| 1114 | /* | 1115 | /* |
| 1115 | * Discard requests require the bio's inline iovecs be initialized. | 1116 | * Discard requests require the bio's inline iovecs be initialized. |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 6f0e73b4a80d..eb96ef6fd8b7 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
| @@ -23,7 +23,6 @@ typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t; | |||
| 23 | union map_info { | 23 | union map_info { |
| 24 | void *ptr; | 24 | void *ptr; |
| 25 | unsigned long long ll; | 25 | unsigned long long ll; |
| 26 | unsigned target_request_nr; | ||
| 27 | }; | 26 | }; |
| 28 | 27 | ||
| 29 | /* | 28 | /* |
| @@ -193,20 +192,21 @@ struct dm_target { | |||
| 193 | * A number of zero-length barrier requests that will be submitted | 192 | * A number of zero-length barrier requests that will be submitted |
| 194 | * to the target for the purpose of flushing cache. | 193 | * to the target for the purpose of flushing cache. |
| 195 | * | 194 | * |
| 196 | * The request number will be placed in union map_info->target_request_nr. | 195 | * The request number can be accessed with dm_bio_get_target_request_nr. |
| 197 | * It is a responsibility of the target driver to remap these requests | 196 | * It is a responsibility of the target driver to remap these requests |
| 198 | * to the real underlying devices. | 197 | * to the real underlying devices. |
| 199 | */ | 198 | */ |
| 200 | unsigned num_flush_requests; | 199 | unsigned num_flush_requests; |
| 201 | 200 | ||
| 202 | /* | 201 | /* |
| 203 | * The number of discard requests that will be submitted to the | 202 | * The number of discard requests that will be submitted to the target. |
| 204 | * target. map_info->request_nr is used just like num_flush_requests. | 203 | * The request number can be accessed with dm_bio_get_target_request_nr. |
| 205 | */ | 204 | */ |
| 206 | unsigned num_discard_requests; | 205 | unsigned num_discard_requests; |
| 207 | 206 | ||
| 208 | /* | 207 | /* |
| 209 | * The number of WRITE SAME requests that will be submitted to the target. | 208 | * The number of WRITE SAME requests that will be submitted to the target. |
| 209 | * The request number can be accessed with dm_bio_get_target_request_nr. | ||
| 210 | */ | 210 | */ |
| 211 | unsigned num_write_same_requests; | 211 | unsigned num_write_same_requests; |
| 212 | 212 | ||
| @@ -263,6 +263,7 @@ struct dm_target_io { | |||
| 263 | struct dm_io *io; | 263 | struct dm_io *io; |
| 264 | struct dm_target *ti; | 264 | struct dm_target *ti; |
| 265 | union map_info info; | 265 | union map_info info; |
| 266 | unsigned target_request_nr; | ||
| 266 | struct bio clone; | 267 | struct bio clone; |
| 267 | }; | 268 | }; |
| 268 | 269 | ||
| @@ -276,6 +277,11 @@ static inline struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size) | |||
| 276 | return (struct bio *)((char *)data + data_size + offsetof(struct dm_target_io, clone)); | 277 | return (struct bio *)((char *)data + data_size + offsetof(struct dm_target_io, clone)); |
| 277 | } | 278 | } |
| 278 | 279 | ||
| 280 | static inline unsigned dm_bio_get_target_request_nr(const struct bio *bio) | ||
| 281 | { | ||
| 282 | return container_of(bio, struct dm_target_io, clone)->target_request_nr; | ||
| 283 | } | ||
| 284 | |||
| 279 | int dm_register_target(struct target_type *t); | 285 | int dm_register_target(struct target_type *t); |
| 280 | void dm_unregister_target(struct target_type *t); | 286 | void dm_unregister_target(struct target_type *t); |
| 281 | 287 | ||
