Lines Matching refs:new
319 int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) in add_mtd_blktrans_dev() argument
321 struct mtd_blktrans_ops *tr = new->tr; in add_mtd_blktrans_dev()
334 if (new->devnum == -1) { in add_mtd_blktrans_dev()
338 new->devnum = last_devnum+1; in add_mtd_blktrans_dev()
339 list_add_tail(&new->list, &d->list); in add_mtd_blktrans_dev()
342 } else if (d->devnum == new->devnum) { in add_mtd_blktrans_dev()
346 } else if (d->devnum > new->devnum) { in add_mtd_blktrans_dev()
348 list_add_tail(&new->list, &d->list); in add_mtd_blktrans_dev()
355 if (new->devnum == -1) in add_mtd_blktrans_dev()
356 new->devnum = last_devnum+1; in add_mtd_blktrans_dev()
361 if (new->devnum > (MINORMASK >> tr->part_bits) || in add_mtd_blktrans_dev()
362 (tr->part_bits && new->devnum >= 27 * 26)) { in add_mtd_blktrans_dev()
367 list_add_tail(&new->list, &tr->devs); in add_mtd_blktrans_dev()
371 mutex_init(&new->lock); in add_mtd_blktrans_dev()
372 kref_init(&new->ref); in add_mtd_blktrans_dev()
374 new->readonly = 1; in add_mtd_blktrans_dev()
383 new->disk = gd; in add_mtd_blktrans_dev()
384 gd->private_data = new; in add_mtd_blktrans_dev()
386 gd->first_minor = (new->devnum) << tr->part_bits; in add_mtd_blktrans_dev()
390 if (new->devnum < 26) in add_mtd_blktrans_dev()
392 "%s%c", tr->name, 'a' + new->devnum); in add_mtd_blktrans_dev()
396 'a' - 1 + new->devnum / 26, in add_mtd_blktrans_dev()
397 'a' + new->devnum % 26); in add_mtd_blktrans_dev()
400 "%s%d", tr->name, new->devnum); in add_mtd_blktrans_dev()
402 set_capacity(gd, ((u64)new->size * tr->blksize) >> 9); in add_mtd_blktrans_dev()
405 spin_lock_init(&new->queue_lock); in add_mtd_blktrans_dev()
406 new->rq = blk_init_queue(mtd_blktrans_request, &new->queue_lock); in add_mtd_blktrans_dev()
408 if (!new->rq) in add_mtd_blktrans_dev()
412 blk_queue_flush(new->rq, REQ_FLUSH); in add_mtd_blktrans_dev()
414 new->rq->queuedata = new; in add_mtd_blktrans_dev()
415 blk_queue_logical_block_size(new->rq, tr->blksize); in add_mtd_blktrans_dev()
417 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, new->rq); in add_mtd_blktrans_dev()
418 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, new->rq); in add_mtd_blktrans_dev()
421 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, new->rq); in add_mtd_blktrans_dev()
422 blk_queue_max_discard_sectors(new->rq, UINT_MAX); in add_mtd_blktrans_dev()
425 gd->queue = new->rq; in add_mtd_blktrans_dev()
428 new->wq = alloc_workqueue("%s%d", 0, 0, in add_mtd_blktrans_dev()
429 tr->name, new->mtd->index); in add_mtd_blktrans_dev()
430 if (!new->wq) in add_mtd_blktrans_dev()
432 INIT_WORK(&new->work, mtd_blktrans_work); in add_mtd_blktrans_dev()
434 gd->driverfs_dev = &new->mtd->dev; in add_mtd_blktrans_dev()
436 if (new->readonly) in add_mtd_blktrans_dev()
441 if (new->disk_attributes) { in add_mtd_blktrans_dev()
443 new->disk_attributes); in add_mtd_blktrans_dev()
448 blk_cleanup_queue(new->rq); in add_mtd_blktrans_dev()
450 put_disk(new->disk); in add_mtd_blktrans_dev()
452 list_del(&new->list); in add_mtd_blktrans_dev()