Lines Matching refs:nullb

32 struct nullb {  struct
301 static struct nullb_queue *nullb_to_queue(struct nullb *nullb) in nullb_to_queue() argument
305 if (nullb->nr_queues != 1) in nullb_to_queue()
306 index = raw_smp_processor_id() / ((nr_cpu_ids + nullb->nr_queues - 1) / nullb->nr_queues); in nullb_to_queue()
308 return &nullb->queues[index]; in nullb_to_queue()
313 struct nullb *nullb = q->queuedata; in null_queue_bio() local
314 struct nullb_queue *nq = nullb_to_queue(nullb); in null_queue_bio()
326 struct nullb *nullb = q->queuedata; in null_rq_prep_fn() local
327 struct nullb_queue *nq = nullb_to_queue(nullb); in null_rq_prep_fn()
372 static void null_init_queue(struct nullb *nullb, struct nullb_queue *nq) in null_init_queue() argument
374 BUG_ON(!nullb); in null_init_queue()
378 nq->queue_depth = nullb->queue_depth; in null_init_queue()
384 struct nullb *nullb = data; in null_init_hctx() local
385 struct nullb_queue *nq = &nullb->queues[index]; in null_init_hctx()
388 null_init_queue(nullb, nq); in null_init_hctx()
389 nullb->nr_queues++; in null_init_hctx()
407 static void cleanup_queues(struct nullb *nullb) in cleanup_queues() argument
411 for (i = 0; i < nullb->nr_queues; i++) in cleanup_queues()
412 cleanup_queue(&nullb->queues[i]); in cleanup_queues()
414 kfree(nullb->queues); in cleanup_queues()
417 static void null_del_dev(struct nullb *nullb) in null_del_dev() argument
419 list_del_init(&nullb->list); in null_del_dev()
422 nvm_unregister(nullb->disk_name); in null_del_dev()
424 del_gendisk(nullb->disk); in null_del_dev()
425 blk_cleanup_queue(nullb->q); in null_del_dev()
427 blk_mq_free_tag_set(&nullb->tag_set); in null_del_dev()
429 put_disk(nullb->disk); in null_del_dev()
430 cleanup_queues(nullb); in null_del_dev()
431 kfree(nullb); in null_del_dev()
613 static int setup_queues(struct nullb *nullb) in setup_queues() argument
615 nullb->queues = kzalloc(submit_queues * sizeof(struct nullb_queue), in setup_queues()
617 if (!nullb->queues) in setup_queues()
620 nullb->nr_queues = 0; in setup_queues()
621 nullb->queue_depth = hw_queue_depth; in setup_queues()
626 static int init_driver_queues(struct nullb *nullb) in init_driver_queues() argument
632 nq = &nullb->queues[i]; in init_driver_queues()
634 null_init_queue(nullb, nq); in init_driver_queues()
639 nullb->nr_queues++; in init_driver_queues()
647 struct nullb *nullb; in null_add_dev() local
651 nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, home_node); in null_add_dev()
652 if (!nullb) { in null_add_dev()
657 spin_lock_init(&nullb->lock); in null_add_dev()
662 rv = setup_queues(nullb); in null_add_dev()
667 nullb->tag_set.ops = &null_mq_ops; in null_add_dev()
668 nullb->tag_set.nr_hw_queues = submit_queues; in null_add_dev()
669 nullb->tag_set.queue_depth = hw_queue_depth; in null_add_dev()
670 nullb->tag_set.numa_node = home_node; in null_add_dev()
671 nullb->tag_set.cmd_size = sizeof(struct nullb_cmd); in null_add_dev()
672 nullb->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; in null_add_dev()
673 nullb->tag_set.driver_data = nullb; in null_add_dev()
675 rv = blk_mq_alloc_tag_set(&nullb->tag_set); in null_add_dev()
679 nullb->q = blk_mq_init_queue(&nullb->tag_set); in null_add_dev()
680 if (IS_ERR(nullb->q)) { in null_add_dev()
685 nullb->q = blk_alloc_queue_node(GFP_KERNEL, home_node); in null_add_dev()
686 if (!nullb->q) { in null_add_dev()
690 blk_queue_make_request(nullb->q, null_queue_bio); in null_add_dev()
691 rv = init_driver_queues(nullb); in null_add_dev()
695 nullb->q = blk_init_queue_node(null_request_fn, &nullb->lock, home_node); in null_add_dev()
696 if (!nullb->q) { in null_add_dev()
700 blk_queue_prep_rq(nullb->q, null_rq_prep_fn); in null_add_dev()
701 blk_queue_softirq_done(nullb->q, null_softirq_done_fn); in null_add_dev()
702 rv = init_driver_queues(nullb); in null_add_dev()
707 nullb->q->queuedata = nullb; in null_add_dev()
708 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, nullb->q); in null_add_dev()
709 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, nullb->q); in null_add_dev()
713 list_add_tail(&nullb->list, &nullb_list); in null_add_dev()
714 nullb->index = nullb_indexes++; in null_add_dev()
717 blk_queue_logical_block_size(nullb->q, bs); in null_add_dev()
718 blk_queue_physical_block_size(nullb->q, bs); in null_add_dev()
720 sprintf(nullb->disk_name, "nullb%d", nullb->index); in null_add_dev()
723 rv = nvm_register(nullb->q, nullb->disk_name, in null_add_dev()
730 disk = nullb->disk = alloc_disk_node(1, home_node); in null_add_dev()
740 disk->first_minor = nullb->index; in null_add_dev()
742 disk->private_data = nullb; in null_add_dev()
743 disk->queue = nullb->q; in null_add_dev()
744 strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN); in null_add_dev()
752 nvm_unregister(nullb->disk_name); in null_add_dev()
754 blk_cleanup_queue(nullb->q); in null_add_dev()
757 blk_mq_free_tag_set(&nullb->tag_set); in null_add_dev()
759 cleanup_queues(nullb); in null_add_dev()
761 kfree(nullb); in null_add_dev()
770 struct nullb *nullb; in null_init() local
828 nullb = list_entry(nullb_list.next, struct nullb, list); in null_init()
829 null_del_dev(nullb); in null_init()
839 struct nullb *nullb; in null_exit() local
845 nullb = list_entry(nullb_list.next, struct nullb, list); in null_exit()
846 null_del_dev(nullb); in null_exit()