Lines Matching full:sc

56 	struct stripe_c *sc = container_of(work, struct stripe_c,  in trigger_event()  local
58 dm_table_event(sc->ti->table); in trigger_event()
64 static int get_stripe(struct dm_target *ti, struct stripe_c *sc, in get_stripe() argument
75 &sc->stripe[stripe].dev); in get_stripe()
79 sc->stripe[stripe].physical_start = start; in get_stripe()
90 struct stripe_c *sc; in stripe_ctr() local
132 sc = kmalloc(struct_size(sc, stripe, stripes), GFP_KERNEL); in stripe_ctr()
133 if (!sc) { in stripe_ctr()
138 INIT_WORK(&sc->trigger_event, trigger_event); in stripe_ctr()
141 sc->ti = ti; in stripe_ctr()
142 sc->stripes = stripes; in stripe_ctr()
143 sc->stripe_width = width; in stripe_ctr()
146 sc->stripes_shift = -1; in stripe_ctr()
148 sc->stripes_shift = __ffs(stripes); in stripe_ctr()
152 kfree(sc); in stripe_ctr()
162 sc->chunk_size = chunk_size; in stripe_ctr()
164 sc->chunk_size_shift = -1; in stripe_ctr()
166 sc->chunk_size_shift = __ffs(chunk_size); in stripe_ctr()
174 r = get_stripe(ti, sc, i, argv); in stripe_ctr()
178 dm_put_device(ti, sc->stripe[i].dev); in stripe_ctr()
179 kfree(sc); in stripe_ctr()
182 atomic_set(&(sc->stripe[i].error_count), 0); in stripe_ctr()
185 ti->private = sc; in stripe_ctr()
193 struct stripe_c *sc = ti->private; in stripe_dtr() local
195 for (i = 0; i < sc->stripes; i++) in stripe_dtr()
196 dm_put_device(ti, sc->stripe[i].dev); in stripe_dtr()
198 flush_work(&sc->trigger_event); in stripe_dtr()
199 kfree(sc); in stripe_dtr()
202 static void stripe_map_sector(struct stripe_c *sc, sector_t sector, in stripe_map_sector() argument
205 sector_t chunk = dm_target_offset(sc->ti, sector); in stripe_map_sector()
208 if (sc->chunk_size_shift < 0) in stripe_map_sector()
209 chunk_offset = sector_div(chunk, sc->chunk_size); in stripe_map_sector()
211 chunk_offset = chunk & (sc->chunk_size - 1); in stripe_map_sector()
212 chunk >>= sc->chunk_size_shift; in stripe_map_sector()
215 if (sc->stripes_shift < 0) in stripe_map_sector()
216 *stripe = sector_div(chunk, sc->stripes); in stripe_map_sector()
218 *stripe = chunk & (sc->stripes - 1); in stripe_map_sector()
219 chunk >>= sc->stripes_shift; in stripe_map_sector()
222 if (sc->chunk_size_shift < 0) in stripe_map_sector()
223 chunk *= sc->chunk_size; in stripe_map_sector()
225 chunk <<= sc->chunk_size_shift; in stripe_map_sector()
230 static void stripe_map_range_sector(struct stripe_c *sc, sector_t sector, in stripe_map_range_sector() argument
235 stripe_map_sector(sc, sector, &stripe, result); in stripe_map_range_sector()
241 if (sc->chunk_size_shift < 0) in stripe_map_range_sector()
242 *result -= sector_div(sector, sc->chunk_size); in stripe_map_range_sector()
244 *result = sector & ~(sector_t)(sc->chunk_size - 1); in stripe_map_range_sector()
247 *result += sc->chunk_size; /* next chunk */ in stripe_map_range_sector()
250 static int stripe_map_range(struct stripe_c *sc, struct bio *bio, in stripe_map_range() argument
255 stripe_map_range_sector(sc, bio->bi_iter.bi_sector, in stripe_map_range()
257 stripe_map_range_sector(sc, bio_end_sector(bio), in stripe_map_range()
260 bio_set_dev(bio, sc->stripe[target_stripe].dev->bdev); in stripe_map_range()
262 sc->stripe[target_stripe].physical_start; in stripe_map_range()
274 struct stripe_c *sc = ti->private; in stripe_map() local
280 BUG_ON(target_bio_nr >= sc->stripes); in stripe_map()
281 bio_set_dev(bio, sc->stripe[target_bio_nr].dev->bdev); in stripe_map()
288 BUG_ON(target_bio_nr >= sc->stripes); in stripe_map()
289 return stripe_map_range(sc, bio, target_bio_nr); in stripe_map()
292 stripe_map_sector(sc, bio->bi_iter.bi_sector, in stripe_map()
295 bio->bi_iter.bi_sector += sc->stripe[stripe].physical_start; in stripe_map()
296 bio_set_dev(bio, sc->stripe[stripe].dev->bdev); in stripe_map()
304 struct stripe_c *sc = ti->private; in stripe_dax_pgoff() local
309 stripe_map_sector(sc, *pgoff * PAGE_SECTORS, &stripe, &dev_sector); in stripe_dax_pgoff()
310 dev_sector += sc->stripe[stripe].physical_start; in stripe_dax_pgoff()
311 bdev = sc->stripe[stripe].dev->bdev; in stripe_dax_pgoff()
314 return sc->stripe[stripe].dev->dax_dev; in stripe_dax_pgoff()
364 struct stripe_c *sc = ti->private; in stripe_status() local
370 DMEMIT("%d ", sc->stripes); in stripe_status()
371 for (i = 0; i < sc->stripes; i++) in stripe_status()
372 DMEMIT("%s ", sc->stripe[i].dev->name); in stripe_status()
375 for (i = 0; i < sc->stripes; i++) in stripe_status()
376 DMEMIT("%c", atomic_read(&(sc->stripe[i].error_count)) ? 'D' : 'A'); in stripe_status()
380 DMEMIT("%d %llu", sc->stripes, in stripe_status()
381 (unsigned long long)sc->chunk_size); in stripe_status()
382 for (i = 0; i < sc->stripes; i++) in stripe_status()
383 DMEMIT(" %s %llu", sc->stripe[i].dev->name, in stripe_status()
384 (unsigned long long)sc->stripe[i].physical_start); in stripe_status()
389 DMEMIT(",stripes=%d,chunk_size=%llu", sc->stripes, in stripe_status()
390 (unsigned long long)sc->chunk_size); in stripe_status()
392 for (i = 0; i < sc->stripes; i++) { in stripe_status()
393 DMEMIT(",stripe_%d_device_name=%s", i, sc->stripe[i].dev->name); in stripe_status()
395 (unsigned long long)sc->stripe[i].physical_start); in stripe_status()
397 atomic_read(&(sc->stripe[i].error_count)) ? 'D' : 'A'); in stripe_status()
409 struct stripe_c *sc = ti->private; in stripe_end_io() local
429 for (i = 0; i < sc->stripes; i++) in stripe_end_io()
430 if (!strcmp(sc->stripe[i].dev->name, major_minor)) { in stripe_end_io()
431 atomic_inc(&(sc->stripe[i].error_count)); in stripe_end_io()
432 if (atomic_read(&(sc->stripe[i].error_count)) < in stripe_end_io()
434 queue_work(dm_stripe_wq, &sc->trigger_event); in stripe_end_io()
443 struct stripe_c *sc = ti->private; in stripe_iterate_devices() local
448 ret = fn(ti, sc->stripe[i].dev, in stripe_iterate_devices()
449 sc->stripe[i].physical_start, in stripe_iterate_devices()
450 sc->stripe_width, data); in stripe_iterate_devices()
451 } while (!ret && ++i < sc->stripes); in stripe_iterate_devices()
459 struct stripe_c *sc = ti->private; in stripe_io_hints() local
460 unsigned int chunk_size = sc->chunk_size << SECTOR_SHIFT; in stripe_io_hints()
463 limits->io_opt = chunk_size * sc->stripes; in stripe_io_hints()