Lines Matching refs:dev_info

101 	struct dcssblk_dev_info *dev_info;
104 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
105 list_for_each_entry_safe(entry, temp, &dev_info->seg_list, lh) {
109 kfree(dev_info);
120 dcssblk_assign_free_minor(struct dcssblk_dev_info *dev_info)
125 if (dev_info == NULL)
137 dev_info->gd->first_minor = minor;
167 struct dcssblk_dev_info *dev_info;
170 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
171 list_for_each_entry(entry, &dev_info->seg_list, lh) {
183 dcssblk_find_highest_addr(struct dcssblk_dev_info *dev_info)
189 list_for_each_entry(entry, &dev_info->seg_list, lh) {
200 dcssblk_find_lowest_addr(struct dcssblk_dev_info *dev_info)
208 list_for_each_entry(entry, &dev_info->seg_list, lh) {
224 dcssblk_is_continuous(struct dcssblk_dev_info *dev_info)
229 if (dev_info->num_of_segments <= 1)
233 sizeof(struct segment_info) * dev_info->num_of_segments,
238 list_for_each_entry(entry, &dev_info->seg_list, lh) {
244 for (i = 0; i < dev_info->num_of_segments; i++)
245 for (j = 0; j < dev_info->num_of_segments; j++)
256 for (i = 0; i < dev_info->num_of_segments - 1; i++) {
334 struct dcssblk_dev_info *dev_info;
336 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
337 return sprintf(buf, dev_info->is_shared ? "1\n" : "0\n");
343 struct dcssblk_dev_info *dev_info;
350 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
351 if (atomic_read(&dev_info->use_count)) {
357 list_for_each_entry(entry, &dev_info->seg_list, lh) {
366 dev_info->is_shared = 1;
367 switch (dev_info->segment_type) {
371 set_disk_ro(dev_info->gd, 1);
375 if (dev_info->segment_type == SEG_TYPE_SC) {
378 dev_info->segment_name);
382 list_for_each_entry(entry, &dev_info->seg_list, lh) {
391 dev_info->is_shared = 0;
392 set_disk_ro(dev_info->gd, 0);
402 "change\n", dev_info->segment_name);
404 list_for_each_entry(entry, &dev_info->seg_list, lh) {
408 list_del(&dev_info->lh);
410 del_gendisk(dev_info->gd);
411 blk_cleanup_queue(dev_info->dcssblk_queue);
412 dev_info->gd->queue = NULL;
413 put_disk(dev_info->gd);
430 struct dcssblk_dev_info *dev_info;
432 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
433 return sprintf(buf, dev_info->save_pending ? "1\n" : "0\n");
439 struct dcssblk_dev_info *dev_info;
444 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
448 if (atomic_read(&dev_info->use_count) == 0) {
451 "saved\n", dev_info->segment_name);
452 list_for_each_entry(entry, &dev_info->seg_list, lh) {
460 dev_info->segment_name);
461 dev_info->save_pending = 1;
464 if (dev_info->save_pending) {
467 dev_info->save_pending = 0;
470 dev_info->segment_name);
489 struct dcssblk_dev_info *dev_info;
493 dev_info = container_of(dev, struct dcssblk_dev_info, dev);
496 list_for_each_entry(entry, &dev_info->seg_list, lh) {
513 struct dcssblk_dev_info *dev_info;
518 dev_info = NULL;
559 dev_info = kzalloc(sizeof(struct dcssblk_dev_info),
561 if (dev_info == NULL) {
565 strcpy(dev_info->segment_name, local_buf);
566 dev_info->segment_type = seg_info->segment_type;
567 INIT_LIST_HEAD(&dev_info->seg_list);
569 list_add_tail(&seg_info->lh, &dev_info->seg_list);
583 dev_info->num_of_segments = num_of_segments;
584 rc = dcssblk_is_continuous(dev_info);
588 dev_info->start = dcssblk_find_lowest_addr(dev_info);
589 dev_info->end = dcssblk_find_highest_addr(dev_info);
591 dev_set_name(&dev_info->dev, dev_info->segment_name);
592 dev_info->dev.release = dcssblk_release_segment;
593 INIT_LIST_HEAD(&dev_info->lh);
594 dev_info->gd = alloc_disk(DCSSBLK_MINORS_PER_DISK);
595 if (dev_info->gd == NULL) {
599 dev_info->gd->major = dcssblk_major;
600 dev_info->gd->fops = &dcssblk_devops;
601 dev_info->dcssblk_queue = blk_alloc_queue(GFP_KERNEL);
602 dev_info->gd->queue = dev_info->dcssblk_queue;
603 dev_info->gd->private_data = dev_info;
604 dev_info->gd->driverfs_dev = &dev_info->dev;
605 blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
606 blk_queue_logical_block_size(dev_info->dcssblk_queue, 4096);
608 seg_byte_size = (dev_info->end - dev_info->start + 1);
609 set_capacity(dev_info->gd, seg_byte_size >> 9); // size in sectors
613 dev_info->save_pending = 0;
614 dev_info->is_shared = 1;
615 dev_info->dev.parent = dcssblk_root_dev;
625 rc = dcssblk_assign_free_minor(dev_info);
628 sprintf(dev_info->gd->disk_name, "dcssblk%d",
629 dev_info->gd->first_minor);
630 list_add_tail(&dev_info->lh, &dcssblk_devices);
639 rc = device_register(&dev_info->dev);
644 get_device(&dev_info->dev);
645 rc = device_create_file(&dev_info->dev, &dev_attr_shared);
648 rc = device_create_file(&dev_info->dev, &dev_attr_save);
651 rc = device_create_file(&dev_info->dev, &dev_attr_seglist);
655 add_disk(dev_info->gd);
657 switch (dev_info->segment_type) {
661 set_disk_ro(dev_info->gd,1);
664 set_disk_ro(dev_info->gd,0);
672 list_del(&dev_info->lh);
673 blk_cleanup_queue(dev_info->dcssblk_queue);
674 dev_info->gd->queue = NULL;
675 put_disk(dev_info->gd);
676 device_unregister(&dev_info->dev);
677 list_for_each_entry(seg_info, &dev_info->seg_list, lh) {
680 put_device(&dev_info->dev);
684 list_del(&dev_info->lh);
686 blk_cleanup_queue(dev_info->dcssblk_queue);
687 dev_info->gd->queue = NULL;
688 put_disk(dev_info->gd);
691 if (dev_info == NULL)
693 list_for_each_entry_safe(seg_info, temp, &dev_info->seg_list, lh) {
698 kfree(dev_info);
711 struct dcssblk_dev_info *dev_info;
736 dev_info = dcssblk_get_device_by_name(local_buf);
737 if (dev_info == NULL) {
744 if (atomic_read(&dev_info->use_count) != 0) {
752 list_del(&dev_info->lh);
753 del_gendisk(dev_info->gd);
754 blk_cleanup_queue(dev_info->dcssblk_queue);
755 dev_info->gd->queue = NULL;
756 put_disk(dev_info->gd);
757 device_unregister(&dev_info->dev);
760 list_for_each_entry(entry, &dev_info->seg_list, lh)
763 put_device(&dev_info->dev);
775 struct dcssblk_dev_info *dev_info;
778 dev_info = bdev->bd_disk->private_data;
779 if (NULL == dev_info) {
783 atomic_inc(&dev_info->use_count);
793 struct dcssblk_dev_info *dev_info = disk->private_data;
797 if (!dev_info) {
802 if (atomic_dec_and_test(&dev_info->use_count)
803 && (dev_info->save_pending)) {
805 "now\n", dev_info->segment_name);
806 list_for_each_entry(entry, &dev_info->seg_list, lh) {
809 dev_info->save_pending = 0;
820 struct dcssblk_dev_info *dev_info;
829 dev_info = bio->bi_bdev->bd_disk->private_data;
830 if (dev_info == NULL)
841 if (dev_info->is_shared) {
842 switch (dev_info->segment_type) {
850 dev_name(&dev_info->dev));
860 source_addr = dev_info->start + (index<<12) + bytes_done;
883 struct dcssblk_dev_info *dev_info;
886 dev_info = bdev->bd_disk->private_data;
887 if (!dev_info)
892 if ((pgoff+1)*PAGE_SIZE-1 > dev_info->end - dev_info->start)
894 *kaddr = (void *) (dev_info->start+pgoff*PAGE_SIZE);
905 struct dcssblk_dev_info *dev_info;
924 dev_info = dcssblk_get_device_by_name(buf);
926 if (dev_info)
927 dcssblk_shared_store(&dev_info->dev,
947 struct dcssblk_dev_info *dev_info;
950 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
951 switch (dev_info->segment_type) {
955 if (!dev_info->is_shared)
968 dev_info->segment_name);
974 struct dcssblk_dev_info *dev_info;
979 list_for_each_entry(dev_info, &dcssblk_devices, lh) {
980 list_for_each_entry(entry, &dev_info->seg_list, lh) {