Lines Matching refs:dev_info

126 	struct dcssblk_dev_info *dev_info;
129 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
130 list_for_each_entry_safe(entry, temp, &dev_info->seg_list, lh) {
134 kfree(dev_info);
145 dcssblk_assign_free_minor(struct dcssblk_dev_info *dev_info)
150 if (dev_info == NULL)
162 dev_info->gd->first_minor = minor;
192 struct dcssblk_dev_info *dev_info;
195 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
196 list_for_each_entry(entry, &dev_info->seg_list, lh) {
208 dcssblk_find_highest_addr(struct dcssblk_dev_info *dev_info)
214 list_for_each_entry(entry, &dev_info->seg_list, lh) {
225 dcssblk_find_lowest_addr(struct dcssblk_dev_info *dev_info)
233 list_for_each_entry(entry, &dev_info->seg_list, lh) {
249 dcssblk_is_continuous(struct dcssblk_dev_info *dev_info)
254 if (dev_info->num_of_segments <= 1)
257 sort_list = kcalloc(dev_info->num_of_segments,
263 list_for_each_entry(entry, &dev_info->seg_list, lh) {
269 for (i = 0; i < dev_info->num_of_segments; i++)
270 for (j = 0; j < dev_info->num_of_segments; j++)
281 for (i = 0; i < dev_info->num_of_segments - 1; i++) {
353 struct dcssblk_dev_info *dev_info;
355 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
356 return sprintf(buf, dev_info->is_shared ? "1\n" : "0\n");
362 struct dcssblk_dev_info *dev_info;
369 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
370 if (atomic_read(&dev_info->use_count)) {
376 list_for_each_entry(entry, &dev_info->seg_list, lh) {
385 dev_info->is_shared = 1;
386 switch (dev_info->segment_type) {
390 set_disk_ro(dev_info->gd, 1);
394 if (dev_info->segment_type == SEG_TYPE_SC) {
397 dev_info->segment_name);
401 list_for_each_entry(entry, &dev_info->seg_list, lh) {
410 dev_info->is_shared = 0;
411 set_disk_ro(dev_info->gd, 0);
421 "change\n", dev_info->segment_name);
423 list_for_each_entry(entry, &dev_info->seg_list, lh) {
427 list_del(&dev_info->lh);
429 kill_dax(dev_info->dax_dev);
430 put_dax(dev_info->dax_dev);
431 del_gendisk(dev_info->gd);
432 blk_cleanup_queue(dev_info->dcssblk_queue);
433 dev_info->gd->queue = NULL;
434 put_disk(dev_info->gd);
459 struct dcssblk_dev_info *dev_info;
461 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
462 return sprintf(buf, dev_info->save_pending ? "1\n" : "0\n");
468 struct dcssblk_dev_info *dev_info;
473 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
477 if (atomic_read(&dev_info->use_count) == 0) {
480 "saved\n", dev_info->segment_name);
481 list_for_each_entry(entry, &dev_info->seg_list, lh) {
495 dev_info->segment_name);
496 dev_info->save_pending = 1;
499 if (dev_info->save_pending) {
502 dev_info->save_pending = 0;
505 dev_info->segment_name);
526 struct dcssblk_dev_info *dev_info;
530 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
533 list_for_each_entry(entry, &dev_info->seg_list, lh) {
565 struct dcssblk_dev_info *dev_info;
570 dev_info = NULL;
611 dev_info = kzalloc(sizeof(struct dcssblk_dev_info),
613 if (dev_info == NULL) {
617 strcpy(dev_info->segment_name, local_buf);
618 dev_info->segment_type = seg_info->segment_type;
619 INIT_LIST_HEAD(&dev_info->seg_list);
621 list_add_tail(&seg_info->lh, &dev_info->seg_list);
635 dev_info->num_of_segments = num_of_segments;
636 rc = dcssblk_is_continuous(dev_info);
640 dev_info->start = dcssblk_find_lowest_addr(dev_info);
641 dev_info->end = dcssblk_find_highest_addr(dev_info);
643 dev_set_name(&dev_info->dev, "%s", dev_info->segment_name);
644 dev_info->dev.release = dcssblk_release_segment;
645 dev_info->dev.groups = dcssblk_dev_attr_groups;
646 INIT_LIST_HEAD(&dev_info->lh);
647 dev_info->gd = alloc_disk(DCSSBLK_MINORS_PER_DISK);
648 if (dev_info->gd == NULL) {
652 dev_info->gd->major = dcssblk_major;
653 dev_info->gd->fops = &dcssblk_devops;
654 dev_info->dcssblk_queue = blk_alloc_queue(NUMA_NO_NODE);
655 dev_info->gd->queue = dev_info->dcssblk_queue;
656 dev_info->gd->private_data = dev_info;
657 blk_queue_logical_block_size(dev_info->dcssblk_queue, 4096);
658 blk_queue_flag_set(QUEUE_FLAG_DAX, dev_info->dcssblk_queue);
660 seg_byte_size = (dev_info->end - dev_info->start + 1);
661 set_capacity(dev_info->gd, seg_byte_size >> 9); // size in sectors
665 dev_info->save_pending = 0;
666 dev_info->is_shared = 1;
667 dev_info->dev.parent = dcssblk_root_dev;
677 rc = dcssblk_assign_free_minor(dev_info);
680 sprintf(dev_info->gd->disk_name, "dcssblk%d",
681 dev_info->gd->first_minor);
682 list_add_tail(&dev_info->lh, &dcssblk_devices);
691 rc = device_register(&dev_info->dev);
695 dev_info->dax_dev = alloc_dax(dev_info, dev_info->gd->disk_name,
697 if (IS_ERR(dev_info->dax_dev)) {
698 rc = PTR_ERR(dev_info->dax_dev);
699 dev_info->dax_dev = NULL;
703 get_device(&dev_info->dev);
704 device_add_disk(&dev_info->dev, dev_info->gd, NULL);
706 switch (dev_info->segment_type) {
710 set_disk_ro(dev_info->gd,1);
713 set_disk_ro(dev_info->gd,0);
721 list_del(&dev_info->lh);
722 blk_cleanup_queue(dev_info->dcssblk_queue);
723 dev_info->gd->queue = NULL;
724 put_disk(dev_info->gd);
725 list_for_each_entry(seg_info, &dev_info->seg_list, lh) {
728 put_device(&dev_info->dev);
732 list_del(&dev_info->lh);
734 blk_cleanup_queue(dev_info->dcssblk_queue);
735 dev_info->gd->queue = NULL;
736 put_disk(dev_info->gd);
739 if (dev_info == NULL)
741 list_for_each_entry_safe(seg_info, temp, &dev_info->seg_list, lh) {
746 kfree(dev_info);
759 struct dcssblk_dev_info *dev_info;
784 dev_info = dcssblk_get_device_by_name(local_buf);
785 if (dev_info == NULL) {
792 if (atomic_read(&dev_info->use_count) != 0) {
800 list_del(&dev_info->lh);
801 kill_dax(dev_info->dax_dev);
802 put_dax(dev_info->dax_dev);
803 del_gendisk(dev_info->gd);
804 blk_cleanup_queue(dev_info->dcssblk_queue);
805 dev_info->gd->queue = NULL;
806 put_disk(dev_info->gd);
809 list_for_each_entry(entry, &dev_info->seg_list, lh)
814 device_unregister(&dev_info->dev);
815 put_device(&dev_info->dev);
826 struct dcssblk_dev_info *dev_info;
829 dev_info = bdev->bd_disk->private_data;
830 if (NULL == dev_info) {
834 atomic_inc(&dev_info->use_count);
843 struct dcssblk_dev_info *dev_info = disk->private_data;
846 if (!dev_info) {
851 if (atomic_dec_and_test(&dev_info->use_count)
852 && (dev_info->save_pending)) {
854 "now\n", dev_info->segment_name);
855 list_for_each_entry(entry, &dev_info->seg_list, lh) {
863 dev_info->save_pending = 0;
871 struct dcssblk_dev_info *dev_info;
882 dev_info = bio->bi_disk->private_data;
883 if (dev_info == NULL)
894 if (dev_info->is_shared) {
895 switch (dev_info->segment_type) {
902 dev_name(&dev_info->dev));
912 source_addr = dev_info->start + (index<<12) + bytes_done;
933 __dcssblk_direct_access(struct dcssblk_dev_info *dev_info, pgoff_t pgoff,
939 dev_sz = dev_info->end - dev_info->start + 1;
941 *kaddr = (void *) dev_info->start + offset;
943 *pfn = __pfn_to_pfn_t(PFN_DOWN(dev_info->start + offset),
953 struct dcssblk_dev_info *dev_info = dax_get_private(dax_dev);
955 return __dcssblk_direct_access(dev_info, pgoff, nr_pages, kaddr, pfn);
963 struct dcssblk_dev_info *dev_info;
982 dev_info = dcssblk_get_device_by_name(buf);
984 if (dev_info)
985 dcssblk_shared_store(&dev_info->dev,
1005 struct dcssblk_dev_info *dev_info;
1008 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
1009 switch (dev_info->segment_type) {
1013 if (!dev_info->is_shared)
1026 dev_info->segment_name);
1032 struct dcssblk_dev_info *dev_info;
1037 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
1038 list_for_each_entry(entry, &dev_info->seg_list, lh) {