Lines Matching refs:dev
71 static void simdisk_transfer(struct simdisk *dev, unsigned long sector, in simdisk_transfer() argument
77 if (offset > dev->size || dev->size - offset < nbytes) { in simdisk_transfer()
83 spin_lock(&dev->lock); in simdisk_transfer()
87 simc_lseek(dev->fd, offset, SEEK_SET); in simdisk_transfer()
90 io = simc_write(dev->fd, buffer, nbytes); in simdisk_transfer()
92 io = simc_read(dev->fd, buffer, nbytes); in simdisk_transfer()
101 spin_unlock(&dev->lock); in simdisk_transfer()
106 struct simdisk *dev = bio->bi_bdev->bd_disk->private_data; in simdisk_submit_bio() local
115 simdisk_transfer(dev, sector, len, buffer, in simdisk_submit_bio()
126 struct simdisk *dev = disk->private_data; in simdisk_open() local
128 spin_lock(&dev->lock); in simdisk_open()
129 ++dev->users; in simdisk_open()
130 spin_unlock(&dev->lock); in simdisk_open()
136 struct simdisk *dev = disk->private_data; in simdisk_release() local
137 spin_lock(&dev->lock); in simdisk_release()
138 --dev->users; in simdisk_release()
139 spin_unlock(&dev->lock); in simdisk_release()
152 static int simdisk_attach(struct simdisk *dev, const char *filename) in simdisk_attach() argument
160 spin_lock(&dev->lock); in simdisk_attach()
162 if (dev->fd != -1) { in simdisk_attach()
166 dev->fd = simc_open(filename, O_RDWR, 0); in simdisk_attach()
167 if (dev->fd == -1) { in simdisk_attach()
172 dev->size = simc_lseek(dev->fd, 0, SEEK_END); in simdisk_attach()
173 set_capacity(dev->gd, dev->size >> SECTOR_SHIFT); in simdisk_attach()
174 dev->filename = filename; in simdisk_attach()
175 pr_info("SIMDISK: %s=%s\n", dev->gd->disk_name, dev->filename); in simdisk_attach()
179 spin_unlock(&dev->lock); in simdisk_attach()
184 static int simdisk_detach(struct simdisk *dev) in simdisk_detach() argument
188 spin_lock(&dev->lock); in simdisk_detach()
190 if (dev->users != 0) { in simdisk_detach()
192 } else if (dev->fd != -1) { in simdisk_detach()
193 if (simc_close(dev->fd)) { in simdisk_detach()
195 dev->filename, errno); in simdisk_detach()
199 dev->gd->disk_name, dev->filename); in simdisk_detach()
200 dev->fd = -1; in simdisk_detach()
201 kfree(dev->filename); in simdisk_detach()
202 dev->filename = NULL; in simdisk_detach()
205 spin_unlock(&dev->lock); in simdisk_detach()
212 struct simdisk *dev = pde_data(file_inode(file)); in proc_read_simdisk() local
213 const char *s = dev->filename; in proc_read_simdisk()
235 struct simdisk *dev = pde_data(file_inode(file)); in proc_write_simdisk() local
241 err = simdisk_detach(dev); in proc_write_simdisk()
249 err = simdisk_attach(dev, tmp); in proc_write_simdisk()
264 static int __init simdisk_setup(struct simdisk *dev, int which, in simdisk_setup() argument
273 dev->fd = -1; in simdisk_setup()
274 dev->filename = NULL; in simdisk_setup()
275 spin_lock_init(&dev->lock); in simdisk_setup()
276 dev->users = 0; in simdisk_setup()
278 dev->gd = blk_alloc_disk(&lim, NUMA_NO_NODE); in simdisk_setup()
279 if (IS_ERR(dev->gd)) { in simdisk_setup()
280 err = PTR_ERR(dev->gd); in simdisk_setup()
283 dev->gd->major = simdisk_major; in simdisk_setup()
284 dev->gd->first_minor = which; in simdisk_setup()
285 dev->gd->minors = SIMDISK_MINORS; in simdisk_setup()
286 dev->gd->fops = &simdisk_ops; in simdisk_setup()
287 dev->gd->private_data = dev; in simdisk_setup()
288 snprintf(dev->gd->disk_name, 32, "simdisk%d", which); in simdisk_setup()
289 set_capacity(dev->gd, 0); in simdisk_setup()
290 err = add_disk(dev->gd); in simdisk_setup()
294 dev->procfile = proc_create_data(tmp, 0644, procdir, &simdisk_proc_ops, dev); in simdisk_setup()
299 put_disk(dev->gd); in simdisk_setup()
345 static void simdisk_teardown(struct simdisk *dev, int which, in simdisk_teardown() argument
350 simdisk_detach(dev); in simdisk_teardown()
351 if (dev->gd) { in simdisk_teardown()
352 del_gendisk(dev->gd); in simdisk_teardown()
353 put_disk(dev->gd); in simdisk_teardown()