dm-stripe.c (fd7c092e711ebab55b2688d3859d95dfd0301f73) dm-stripe.c (55a62eef8d1b50ceff3b7bf46851103bdcc7e5b0)
1/*
2 * Copyright (C) 2001-2003 Sistina Software (UK) Limited.
3 *
4 * This file is released under the GPL.
5 */
6
7#include <linux/device-mapper.h>
8

--- 146 unchanged lines hidden (view full) ---

155 sc->stripes_shift = -1;
156 else
157 sc->stripes_shift = __ffs(stripes);
158
159 r = dm_set_target_max_io_len(ti, chunk_size);
160 if (r)
161 return r;
162
1/*
2 * Copyright (C) 2001-2003 Sistina Software (UK) Limited.
3 *
4 * This file is released under the GPL.
5 */
6
7#include <linux/device-mapper.h>
8

--- 146 unchanged lines hidden (view full) ---

155 sc->stripes_shift = -1;
156 else
157 sc->stripes_shift = __ffs(stripes);
158
159 r = dm_set_target_max_io_len(ti, chunk_size);
160 if (r)
161 return r;
162
163 ti->num_flush_requests = stripes;
164 ti->num_discard_requests = stripes;
165 ti->num_write_same_requests = stripes;
163 ti->num_flush_bios = stripes;
164 ti->num_discard_bios = stripes;
165 ti->num_write_same_bios = stripes;
166
167 sc->chunk_size = chunk_size;
168 if (chunk_size & (chunk_size - 1))
169 sc->chunk_size_shift = -1;
170 else
171 sc->chunk_size_shift = __ffs(chunk_size);
172
173 /*

--- 97 unchanged lines hidden (view full) ---

271 return DM_MAPIO_SUBMITTED;
272 }
273}
274
275static int stripe_map(struct dm_target *ti, struct bio *bio)
276{
277 struct stripe_c *sc = ti->private;
278 uint32_t stripe;
166
167 sc->chunk_size = chunk_size;
168 if (chunk_size & (chunk_size - 1))
169 sc->chunk_size_shift = -1;
170 else
171 sc->chunk_size_shift = __ffs(chunk_size);
172
173 /*

--- 97 unchanged lines hidden (view full) ---

271 return DM_MAPIO_SUBMITTED;
272 }
273}
274
275static int stripe_map(struct dm_target *ti, struct bio *bio)
276{
277 struct stripe_c *sc = ti->private;
278 uint32_t stripe;
279 unsigned target_request_nr;
279 unsigned target_bio_nr;
280
281 if (bio->bi_rw & REQ_FLUSH) {
280
281 if (bio->bi_rw & REQ_FLUSH) {
282 target_request_nr = dm_bio_get_target_request_nr(bio);
283 BUG_ON(target_request_nr >= sc->stripes);
284 bio->bi_bdev = sc->stripe[target_request_nr].dev->bdev;
282 target_bio_nr = dm_bio_get_target_bio_nr(bio);
283 BUG_ON(target_bio_nr >= sc->stripes);
284 bio->bi_bdev = sc->stripe[target_bio_nr].dev->bdev;
285 return DM_MAPIO_REMAPPED;
286 }
287 if (unlikely(bio->bi_rw & REQ_DISCARD) ||
288 unlikely(bio->bi_rw & REQ_WRITE_SAME)) {
285 return DM_MAPIO_REMAPPED;
286 }
287 if (unlikely(bio->bi_rw & REQ_DISCARD) ||
288 unlikely(bio->bi_rw & REQ_WRITE_SAME)) {
289 target_request_nr = dm_bio_get_target_request_nr(bio);
290 BUG_ON(target_request_nr >= sc->stripes);
291 return stripe_map_range(sc, bio, target_request_nr);
289 target_bio_nr = dm_bio_get_target_bio_nr(bio);
290 BUG_ON(target_bio_nr >= sc->stripes);
291 return stripe_map_range(sc, bio, target_bio_nr);
292 }
293
294 stripe_map_sector(sc, bio->bi_sector, &stripe, &bio->bi_sector);
295
296 bio->bi_sector += sc->stripe[stripe].physical_start;
297 bio->bi_bdev = sc->stripe[stripe].dev->bdev;
298
299 return DM_MAPIO_REMAPPED;

--- 159 unchanged lines hidden ---
292 }
293
294 stripe_map_sector(sc, bio->bi_sector, &stripe, &bio->bi_sector);
295
296 bio->bi_sector += sc->stripe[stripe].physical_start;
297 bio->bi_bdev = sc->stripe[stripe].dev->bdev;
298
299 return DM_MAPIO_REMAPPED;

--- 159 unchanged lines hidden ---