Lines Matching refs:dev_info
87 struct dcssblk_dev_info *dev_info; in dcssblk_release_segment() local
90 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_release_segment()
91 list_for_each_entry_safe(entry, temp, &dev_info->seg_list, lh) { in dcssblk_release_segment()
95 kfree(dev_info); in dcssblk_release_segment()
106 dcssblk_assign_free_minor(struct dcssblk_dev_info *dev_info) in dcssblk_assign_free_minor() argument
111 if (dev_info == NULL) in dcssblk_assign_free_minor()
123 dev_info->gd->first_minor = minor; in dcssblk_assign_free_minor()
153 struct dcssblk_dev_info *dev_info; in dcssblk_get_segment_by_name() local
156 list_for_each_entry(dev_info, &dcssblk_devices, lh) { in dcssblk_get_segment_by_name()
157 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_get_segment_by_name()
169 dcssblk_find_highest_addr(struct dcssblk_dev_info *dev_info) in dcssblk_find_highest_addr() argument
175 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_find_highest_addr()
186 dcssblk_find_lowest_addr(struct dcssblk_dev_info *dev_info) in dcssblk_find_lowest_addr() argument
194 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_find_lowest_addr()
210 dcssblk_is_continuous(struct dcssblk_dev_info *dev_info) in dcssblk_is_continuous() argument
215 if (dev_info->num_of_segments <= 1) in dcssblk_is_continuous()
219 sizeof(struct segment_info) * dev_info->num_of_segments, in dcssblk_is_continuous()
224 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_is_continuous()
230 for (i = 0; i < dev_info->num_of_segments; i++) in dcssblk_is_continuous()
231 for (j = 0; j < dev_info->num_of_segments; j++) in dcssblk_is_continuous()
242 for (i = 0; i < dev_info->num_of_segments - 1; i++) { in dcssblk_is_continuous()
314 struct dcssblk_dev_info *dev_info; in dcssblk_shared_show() local
316 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_shared_show()
317 return sprintf(buf, dev_info->is_shared ? "1\n" : "0\n"); in dcssblk_shared_show()
323 struct dcssblk_dev_info *dev_info; in dcssblk_shared_store() local
330 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_shared_store()
331 if (atomic_read(&dev_info->use_count)) { in dcssblk_shared_store()
337 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_shared_store()
346 dev_info->is_shared = 1; in dcssblk_shared_store()
347 switch (dev_info->segment_type) { in dcssblk_shared_store()
351 set_disk_ro(dev_info->gd, 1); in dcssblk_shared_store()
355 if (dev_info->segment_type == SEG_TYPE_SC) { in dcssblk_shared_store()
358 dev_info->segment_name); in dcssblk_shared_store()
362 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_shared_store()
371 dev_info->is_shared = 0; in dcssblk_shared_store()
372 set_disk_ro(dev_info->gd, 0); in dcssblk_shared_store()
382 "change\n", dev_info->segment_name); in dcssblk_shared_store()
384 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_shared_store()
388 list_del(&dev_info->lh); in dcssblk_shared_store()
390 del_gendisk(dev_info->gd); in dcssblk_shared_store()
391 blk_cleanup_queue(dev_info->dcssblk_queue); in dcssblk_shared_store()
392 dev_info->gd->queue = NULL; in dcssblk_shared_store()
393 put_disk(dev_info->gd); in dcssblk_shared_store()
418 struct dcssblk_dev_info *dev_info; in dcssblk_save_show() local
420 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_save_show()
421 return sprintf(buf, dev_info->save_pending ? "1\n" : "0\n"); in dcssblk_save_show()
427 struct dcssblk_dev_info *dev_info; in dcssblk_save_store() local
432 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_save_store()
436 if (atomic_read(&dev_info->use_count) == 0) { in dcssblk_save_store()
439 "saved\n", dev_info->segment_name); in dcssblk_save_store()
440 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_save_store()
454 dev_info->segment_name); in dcssblk_save_store()
455 dev_info->save_pending = 1; in dcssblk_save_store()
458 if (dev_info->save_pending) { in dcssblk_save_store()
461 dev_info->save_pending = 0; in dcssblk_save_store()
464 dev_info->segment_name); in dcssblk_save_store()
485 struct dcssblk_dev_info *dev_info; in dcssblk_seglist_show() local
489 dev_info = container_of(dev, struct dcssblk_dev_info, dev); in dcssblk_seglist_show()
492 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_seglist_show()
524 struct dcssblk_dev_info *dev_info; in dcssblk_add_store() local
529 dev_info = NULL; in dcssblk_add_store()
570 dev_info = kzalloc(sizeof(struct dcssblk_dev_info), in dcssblk_add_store()
572 if (dev_info == NULL) { in dcssblk_add_store()
576 strcpy(dev_info->segment_name, local_buf); in dcssblk_add_store()
577 dev_info->segment_type = seg_info->segment_type; in dcssblk_add_store()
578 INIT_LIST_HEAD(&dev_info->seg_list); in dcssblk_add_store()
580 list_add_tail(&seg_info->lh, &dev_info->seg_list); in dcssblk_add_store()
594 dev_info->num_of_segments = num_of_segments; in dcssblk_add_store()
595 rc = dcssblk_is_continuous(dev_info); in dcssblk_add_store()
599 dev_info->start = dcssblk_find_lowest_addr(dev_info); in dcssblk_add_store()
600 dev_info->end = dcssblk_find_highest_addr(dev_info); in dcssblk_add_store()
602 dev_set_name(&dev_info->dev, "%s", dev_info->segment_name); in dcssblk_add_store()
603 dev_info->dev.release = dcssblk_release_segment; in dcssblk_add_store()
604 dev_info->dev.groups = dcssblk_dev_attr_groups; in dcssblk_add_store()
605 INIT_LIST_HEAD(&dev_info->lh); in dcssblk_add_store()
606 dev_info->gd = alloc_disk(DCSSBLK_MINORS_PER_DISK); in dcssblk_add_store()
607 if (dev_info->gd == NULL) { in dcssblk_add_store()
611 dev_info->gd->major = dcssblk_major; in dcssblk_add_store()
612 dev_info->gd->fops = &dcssblk_devops; in dcssblk_add_store()
613 dev_info->dcssblk_queue = blk_alloc_queue(GFP_KERNEL); in dcssblk_add_store()
614 dev_info->gd->queue = dev_info->dcssblk_queue; in dcssblk_add_store()
615 dev_info->gd->private_data = dev_info; in dcssblk_add_store()
616 dev_info->gd->driverfs_dev = &dev_info->dev; in dcssblk_add_store()
617 blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request); in dcssblk_add_store()
618 blk_queue_logical_block_size(dev_info->dcssblk_queue, 4096); in dcssblk_add_store()
620 seg_byte_size = (dev_info->end - dev_info->start + 1); in dcssblk_add_store()
621 set_capacity(dev_info->gd, seg_byte_size >> 9); // size in sectors in dcssblk_add_store()
625 dev_info->save_pending = 0; in dcssblk_add_store()
626 dev_info->is_shared = 1; in dcssblk_add_store()
627 dev_info->dev.parent = dcssblk_root_dev; in dcssblk_add_store()
637 rc = dcssblk_assign_free_minor(dev_info); in dcssblk_add_store()
640 sprintf(dev_info->gd->disk_name, "dcssblk%d", in dcssblk_add_store()
641 dev_info->gd->first_minor); in dcssblk_add_store()
642 list_add_tail(&dev_info->lh, &dcssblk_devices); in dcssblk_add_store()
651 rc = device_register(&dev_info->dev); in dcssblk_add_store()
655 get_device(&dev_info->dev); in dcssblk_add_store()
656 add_disk(dev_info->gd); in dcssblk_add_store()
658 switch (dev_info->segment_type) { in dcssblk_add_store()
662 set_disk_ro(dev_info->gd,1); in dcssblk_add_store()
665 set_disk_ro(dev_info->gd,0); in dcssblk_add_store()
673 list_del(&dev_info->lh); in dcssblk_add_store()
674 blk_cleanup_queue(dev_info->dcssblk_queue); in dcssblk_add_store()
675 dev_info->gd->queue = NULL; in dcssblk_add_store()
676 put_disk(dev_info->gd); in dcssblk_add_store()
677 list_for_each_entry(seg_info, &dev_info->seg_list, lh) { in dcssblk_add_store()
680 put_device(&dev_info->dev); in dcssblk_add_store()
684 list_del(&dev_info->lh); in dcssblk_add_store()
686 blk_cleanup_queue(dev_info->dcssblk_queue); in dcssblk_add_store()
687 dev_info->gd->queue = NULL; in dcssblk_add_store()
688 put_disk(dev_info->gd); in dcssblk_add_store()
691 if (dev_info == NULL) in dcssblk_add_store()
693 list_for_each_entry_safe(seg_info, temp, &dev_info->seg_list, lh) { in dcssblk_add_store()
698 kfree(dev_info); in dcssblk_add_store()
711 struct dcssblk_dev_info *dev_info; in dcssblk_remove_store() local
736 dev_info = dcssblk_get_device_by_name(local_buf); in dcssblk_remove_store()
737 if (dev_info == NULL) { in dcssblk_remove_store()
744 if (atomic_read(&dev_info->use_count) != 0) { in dcssblk_remove_store()
752 list_del(&dev_info->lh); in dcssblk_remove_store()
753 del_gendisk(dev_info->gd); in dcssblk_remove_store()
754 blk_cleanup_queue(dev_info->dcssblk_queue); in dcssblk_remove_store()
755 dev_info->gd->queue = NULL; in dcssblk_remove_store()
756 put_disk(dev_info->gd); in dcssblk_remove_store()
757 device_unregister(&dev_info->dev); in dcssblk_remove_store()
760 list_for_each_entry(entry, &dev_info->seg_list, lh) in dcssblk_remove_store()
763 put_device(&dev_info->dev); in dcssblk_remove_store()
775 struct dcssblk_dev_info *dev_info; in dcssblk_open() local
778 dev_info = bdev->bd_disk->private_data; in dcssblk_open()
779 if (NULL == dev_info) { in dcssblk_open()
783 atomic_inc(&dev_info->use_count); in dcssblk_open()
793 struct dcssblk_dev_info *dev_info = disk->private_data; in dcssblk_release() local
796 if (!dev_info) { in dcssblk_release()
801 if (atomic_dec_and_test(&dev_info->use_count) in dcssblk_release()
802 && (dev_info->save_pending)) { in dcssblk_release()
804 "now\n", dev_info->segment_name); in dcssblk_release()
805 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_release()
813 dev_info->save_pending = 0; in dcssblk_release()
821 struct dcssblk_dev_info *dev_info; in dcssblk_make_request() local
830 dev_info = bio->bi_bdev->bd_disk->private_data; in dcssblk_make_request()
831 if (dev_info == NULL) in dcssblk_make_request()
842 if (dev_info->is_shared) { in dcssblk_make_request()
843 switch (dev_info->segment_type) { in dcssblk_make_request()
851 dev_name(&dev_info->dev)); in dcssblk_make_request()
861 source_addr = dev_info->start + (index<<12) + bytes_done; in dcssblk_make_request()
884 struct dcssblk_dev_info *dev_info; in dcssblk_direct_access() local
887 dev_info = bdev->bd_disk->private_data; in dcssblk_direct_access()
888 if (!dev_info) in dcssblk_direct_access()
890 dev_sz = dev_info->end - dev_info->start; in dcssblk_direct_access()
892 *kaddr = (void *) (dev_info->start + offset); in dcssblk_direct_access()
903 struct dcssblk_dev_info *dev_info; in dcssblk_check_params() local
922 dev_info = dcssblk_get_device_by_name(buf); in dcssblk_check_params()
924 if (dev_info) in dcssblk_check_params()
925 dcssblk_shared_store(&dev_info->dev, in dcssblk_check_params()
945 struct dcssblk_dev_info *dev_info; in dcssblk_freeze() local
948 list_for_each_entry(dev_info, &dcssblk_devices, lh) { in dcssblk_freeze()
949 switch (dev_info->segment_type) { in dcssblk_freeze()
953 if (!dev_info->is_shared) in dcssblk_freeze()
966 dev_info->segment_name); in dcssblk_freeze()
972 struct dcssblk_dev_info *dev_info; in dcssblk_restore() local
977 list_for_each_entry(dev_info, &dcssblk_devices, lh) { in dcssblk_restore()
978 list_for_each_entry(entry, &dev_info->seg_list, lh) { in dcssblk_restore()