Lines Matching refs:new

276 int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
278 struct mtd_blktrans_ops *tr = new->tr;
287 if (new->devnum == -1) {
291 new->devnum = last_devnum+1;
292 list_add_tail(&new->list, &d->list);
295 } else if (d->devnum == new->devnum) {
298 } else if (d->devnum > new->devnum) {
300 list_add_tail(&new->list, &d->list);
307 if (new->devnum == -1)
308 new->devnum = last_devnum+1;
313 if (new->devnum > (MINORMASK >> tr->part_bits) ||
314 (tr->part_bits && new->devnum >= 27 * 26))
317 list_add_tail(&new->list, &tr->devs);
320 mutex_init(&new->lock);
321 kref_init(&new->ref);
323 new->readonly = 1;
326 new->tag_set = kzalloc(sizeof(*new->tag_set), GFP_KERNEL);
327 if (!new->tag_set)
330 ret = blk_mq_alloc_sq_tag_set(new->tag_set, &mtd_mq_ops, 2,
336 gd = blk_mq_alloc_disk(new->tag_set, new);
342 new->disk = gd;
343 new->rq = new->disk->queue;
344 gd->private_data = new;
346 gd->first_minor = (new->devnum) << tr->part_bits;
351 if (new->devnum < 26)
353 "%s%c", tr->name, 'a' + new->devnum);
357 'a' - 1 + new->devnum / 26,
358 'a' + new->devnum % 26);
361 "%s%d", tr->name, new->devnum);
365 set_capacity(gd, ((u64)new->size * tr->blksize) >> 9);
368 spin_lock_init(&new->queue_lock);
369 INIT_LIST_HEAD(&new->rq_list);
372 blk_queue_write_cache(new->rq, true, false);
374 blk_queue_logical_block_size(new->rq, tr->blksize);
376 blk_queue_flag_set(QUEUE_FLAG_NONROT, new->rq);
377 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, new->rq);
380 blk_queue_max_discard_sectors(new->rq, UINT_MAX);
381 new->rq->limits.discard_granularity = tr->blksize;
384 gd->queue = new->rq;
386 if (new->readonly)
389 ret = device_add_disk(&new->mtd->dev, gd, NULL);
393 if (new->disk_attributes) {
395 new->disk_attributes);
401 put_disk(new->disk);
403 blk_mq_free_tag_set(new->tag_set);
405 kfree(new->tag_set);
407 list_del(&new->list);
421 /* Stop new requests to arrive */