Lines Matching refs:bdev
147 static bool scm_permit_request(struct scm_blk_dev *bdev, struct request *req)
149 return rq_data_dir(req) != WRITE || bdev->state != SCM_WR_PROHIBIT;
182 struct scm_blk_dev *bdev = scmrq->bdev;
183 struct scm_device *scmdev = bdev->gendisk->private_data;
219 static inline void scm_request_init(struct scm_blk_dev *bdev,
228 aobrq->scmdev = bdev->scmdev;
231 scmrq->bdev = bdev;
240 struct scm_blk_dev *bdev = scmrq->bdev;
246 atomic_dec(&bdev->queued_reqs);
248 blk_mq_kick_requeue_list(bdev->rq);
253 struct scm_blk_dev *bdev = scmrq->bdev;
264 atomic_dec(&bdev->queued_reqs);
270 struct scm_blk_dev *bdev = scmrq->bdev;
272 atomic_inc(&bdev->queued_reqs);
288 struct scm_blk_dev *bdev = dev_get_drvdata(&scmdev->dev);
294 if (!scm_permit_request(bdev, req)) {
307 scm_request_init(bdev, scmrq);
375 struct scm_blk_dev *bdev = scmrq->bdev;
384 spin_lock_irqsave(&bdev->lock, flags);
385 if (bdev->state != SCM_WR_PROHIBIT)
387 (unsigned long) bdev->scmdev->address);
388 bdev->state = SCM_WR_PROHIBIT;
389 spin_unlock_irqrestore(&bdev->lock, flags);
437 int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev)
450 bdev->scmdev = scmdev;
451 bdev->state = SCM_OPER;
452 spin_lock_init(&bdev->lock);
453 atomic_set(&bdev->queued_reqs, 0);
455 bdev->tag_set.ops = &scm_mq_ops;
456 bdev->tag_set.cmd_size = sizeof(blk_status_t);
457 bdev->tag_set.nr_hw_queues = nr_requests;
458 bdev->tag_set.queue_depth = nr_requests_per_io * nr_requests;
459 bdev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
460 bdev->tag_set.numa_node = NUMA_NO_NODE;
462 ret = blk_mq_alloc_tag_set(&bdev->tag_set);
466 rq = blk_mq_init_queue(&bdev->tag_set);
471 bdev->rq = rq;
481 bdev->gendisk = alloc_disk(SCM_NR_PARTS);
482 if (!bdev->gendisk) {
487 bdev->gendisk->private_data = scmdev;
488 bdev->gendisk->fops = &scm_blk_devops;
489 bdev->gendisk->queue = rq;
490 bdev->gendisk->major = scm_major;
491 bdev->gendisk->first_minor = devindex * SCM_NR_PARTS;
493 len = snprintf(bdev->gendisk->disk_name, DISK_NAME_LEN, "scm");
495 len += snprintf(bdev->gendisk->disk_name + len,
500 snprintf(bdev->gendisk->disk_name + len, DISK_NAME_LEN - len, "%c",
504 set_capacity(bdev->gendisk, scmdev->size >> 9);
505 device_add_disk(&scmdev->dev, bdev->gendisk, NULL);
511 blk_mq_free_tag_set(&bdev->tag_set);
517 void scm_blk_dev_cleanup(struct scm_blk_dev *bdev)
519 del_gendisk(bdev->gendisk);
520 blk_cleanup_queue(bdev->gendisk->queue);
521 blk_mq_free_tag_set(&bdev->tag_set);
522 put_disk(bdev->gendisk);
525 void scm_blk_set_available(struct scm_blk_dev *bdev)
529 spin_lock_irqsave(&bdev->lock, flags);
530 if (bdev->state == SCM_WR_PROHIBIT)
532 (unsigned long) bdev->scmdev->address);
533 bdev->state = SCM_OPER;
534 spin_unlock_irqrestore(&bdev->lock, flags);