Lines Matching defs:sc

56 	struct stripe_c *sc = container_of(work, struct stripe_c,
58 dm_table_event(sc->ti->table);
64 static int get_stripe(struct dm_target *ti, struct stripe_c *sc,
75 &sc->stripe[stripe].dev);
79 sc->stripe[stripe].physical_start = start;
90 struct stripe_c *sc;
132 sc = kmalloc(struct_size(sc, stripe, stripes), GFP_KERNEL);
133 if (!sc) {
138 INIT_WORK(&sc->trigger_event, trigger_event);
141 sc->ti = ti;
142 sc->stripes = stripes;
143 sc->stripe_width = width;
146 sc->stripes_shift = -1;
148 sc->stripes_shift = __ffs(stripes);
152 kfree(sc);
161 sc->chunk_size = chunk_size;
163 sc->chunk_size_shift = -1;
165 sc->chunk_size_shift = __ffs(chunk_size);
173 r = get_stripe(ti, sc, i, argv);
177 dm_put_device(ti, sc->stripe[i].dev);
178 kfree(sc);
181 atomic_set(&(sc->stripe[i].error_count), 0);
184 ti->private = sc;
192 struct stripe_c *sc = ti->private;
194 for (i = 0; i < sc->stripes; i++)
195 dm_put_device(ti, sc->stripe[i].dev);
197 flush_work(&sc->trigger_event);
198 kfree(sc);
201 static void stripe_map_sector(struct stripe_c *sc, sector_t sector,
204 sector_t chunk = dm_target_offset(sc->ti, sector);
207 if (sc->chunk_size_shift < 0)
208 chunk_offset = sector_div(chunk, sc->chunk_size);
210 chunk_offset = chunk & (sc->chunk_size - 1);
211 chunk >>= sc->chunk_size_shift;
214 if (sc->stripes_shift < 0)
215 *stripe = sector_div(chunk, sc->stripes);
217 *stripe = chunk & (sc->stripes - 1);
218 chunk >>= sc->stripes_shift;
221 if (sc->chunk_size_shift < 0)
222 chunk *= sc->chunk_size;
224 chunk <<= sc->chunk_size_shift;
229 static void stripe_map_range_sector(struct stripe_c *sc, sector_t sector,
234 stripe_map_sector(sc, sector, &stripe, result);
240 if (sc->chunk_size_shift < 0)
241 *result -= sector_div(sector, sc->chunk_size);
243 *result = sector & ~(sector_t)(sc->chunk_size - 1);
246 *result += sc->chunk_size; /* next chunk */
249 static int stripe_map_range(struct stripe_c *sc, struct bio *bio,
254 stripe_map_range_sector(sc, bio->bi_iter.bi_sector,
256 stripe_map_range_sector(sc, bio_end_sector(bio),
259 bio_set_dev(bio, sc->stripe[target_stripe].dev->bdev);
261 sc->stripe[target_stripe].physical_start;
273 struct stripe_c *sc = ti->private;
279 BUG_ON(target_bio_nr >= sc->stripes);
280 bio_set_dev(bio, sc->stripe[target_bio_nr].dev->bdev);
287 BUG_ON(target_bio_nr >= sc->stripes);
288 return stripe_map_range(sc, bio, target_bio_nr);
291 stripe_map_sector(sc, bio->bi_iter.bi_sector,
294 bio->bi_iter.bi_sector += sc->stripe[stripe].physical_start;
295 bio_set_dev(bio, sc->stripe[stripe].dev->bdev);
303 struct stripe_c *sc = ti->private;
308 stripe_map_sector(sc, *pgoff * PAGE_SECTORS, &stripe, &dev_sector);
309 dev_sector += sc->stripe[stripe].physical_start;
310 bdev = sc->stripe[stripe].dev->bdev;
313 return sc->stripe[stripe].dev->dax_dev;
363 struct stripe_c *sc = ti->private;
369 DMEMIT("%d ", sc->stripes);
370 for (i = 0; i < sc->stripes; i++)
371 DMEMIT("%s ", sc->stripe[i].dev->name);
374 for (i = 0; i < sc->stripes; i++)
375 DMEMIT("%c", atomic_read(&(sc->stripe[i].error_count)) ? 'D' : 'A');
379 DMEMIT("%d %llu", sc->stripes,
380 (unsigned long long)sc->chunk_size);
381 for (i = 0; i < sc->stripes; i++)
382 DMEMIT(" %s %llu", sc->stripe[i].dev->name,
383 (unsigned long long)sc->stripe[i].physical_start);
388 DMEMIT(",stripes=%d,chunk_size=%llu", sc->stripes,
389 (unsigned long long)sc->chunk_size);
391 for (i = 0; i < sc->stripes; i++) {
392 DMEMIT(",stripe_%d_device_name=%s", i, sc->stripe[i].dev->name);
394 (unsigned long long)sc->stripe[i].physical_start);
396 atomic_read(&(sc->stripe[i].error_count)) ? 'D' : 'A');
408 struct stripe_c *sc = ti->private;
428 for (i = 0; i < sc->stripes; i++)
429 if (!strcmp(sc->stripe[i].dev->name, major_minor)) {
430 atomic_inc(&(sc->stripe[i].error_count));
431 if (atomic_read(&(sc->stripe[i].error_count)) <
433 queue_work(dm_stripe_wq, &sc->trigger_event);
442 struct stripe_c *sc = ti->private;
447 ret = fn(ti, sc->stripe[i].dev,
448 sc->stripe[i].physical_start,
449 sc->stripe_width, data);
450 } while (!ret && ++i < sc->stripes);
458 struct stripe_c *sc = ti->private;
459 unsigned int chunk_size = sc->chunk_size << SECTOR_SHIFT;
462 blk_limits_io_opt(limits, chunk_size * sc->stripes);