Lines Matching refs:tr
65 static blk_status_t do_blktrans_request(struct mtd_blktrans_ops *tr,
72 block = blk_rq_pos(req) << 9 >> tr->blkshift;
73 nsect = blk_rq_cur_bytes(req) >> tr->blkshift;
76 if (tr->flush(dev))
87 if (tr->discard(dev, block, nsect))
92 for (; nsect > 0; nsect--, block++, buf += tr->blksize) {
93 if (tr->readsect(dev, block, buf)) {
102 if (!tr->writesect)
107 for (; nsect > 0; nsect--, block++, buf += tr->blksize) {
108 if (tr->writesect(dev, block, buf)) {
144 struct mtd_blktrans_ops *tr = dev->tr;
153 if (tr->background && !background_done) {
156 tr->background(dev);
172 res = do_blktrans_request(dev->tr, dev, req);
219 __module_get(dev->tr->owner);
224 if (dev->tr->open) {
225 ret = dev->tr->open(dev);
243 if (dev->tr->release)
244 dev->tr->release(dev);
246 module_put(dev->tr->owner);
268 module_put(dev->tr->owner);
271 if (dev->tr->release)
272 dev->tr->release(dev);
294 ret = dev->tr->getgeo ? dev->tr->getgeo(dev, geo) : -ENOTTY;
317 ret = dev->tr->flush ? dev->tr->flush(dev) : 0;
342 struct mtd_blktrans_ops *tr = new->tr;
351 list_for_each_entry(d, &tr->devs, list) {
379 if (new->devnum > (MINORMASK >> tr->part_bits) ||
380 (tr->part_bits && new->devnum >= 27 * 26)) {
385 list_add_tail(&new->list, &tr->devs);
391 if (!tr->writesect)
396 gd = alloc_disk(1 << tr->part_bits);
403 gd->major = tr->major;
404 gd->first_minor = (new->devnum) << tr->part_bits;
407 if (tr->part_bits)
410 "%s%c", tr->name, 'a' + new->devnum);
413 "%s%c%c", tr->name,
418 "%s%d", tr->name, new->devnum);
420 set_capacity(gd, ((u64)new->size * tr->blksize) >> 9);
438 if (tr->flush)
442 blk_queue_logical_block_size(new->rq, tr->blksize);
447 if (tr->discard) {
450 new->rq->limits.discard_granularity = tr->blksize;
503 if (old->tr->release)
504 old->tr->release(old);
517 struct mtd_blktrans_ops *tr;
520 list_for_each_entry(tr, &blktrans_majors, list)
521 list_for_each_entry_safe(dev, next, &tr->devs, list)
523 tr->remove_dev(dev);
528 struct mtd_blktrans_ops *tr;
533 list_for_each_entry(tr, &blktrans_majors, list)
534 tr->add_mtd(tr, mtd);
542 int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
556 ret = register_blkdev(tr->major, tr->name);
559 tr->name, tr->major, ret);
565 tr->major = ret;
567 tr->blkshift = ffs(tr->blksize) - 1;
569 INIT_LIST_HEAD(&tr->devs);
570 list_add(&tr->list, &blktrans_majors);
574 tr->add_mtd(tr, mtd);
580 int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr)
587 list_del(&tr->list);
589 list_for_each_entry_safe(dev, next, &tr->devs, list)
590 tr->remove_dev(dev);
592 unregister_blkdev(tr->major, tr->name);
595 BUG_ON(!list_empty(&tr->devs));