.. | .. |
---|
101 | 101 | spin_unlock(&dev->lock); |
---|
102 | 102 | } |
---|
103 | 103 | |
---|
104 | | -static blk_qc_t simdisk_make_request(struct request_queue *q, struct bio *bio) |
---|
| 104 | +static blk_qc_t simdisk_submit_bio(struct bio *bio) |
---|
105 | 105 | { |
---|
106 | | - struct simdisk *dev = q->queuedata; |
---|
| 106 | + struct simdisk *dev = bio->bi_disk->private_data; |
---|
107 | 107 | struct bio_vec bvec; |
---|
108 | 108 | struct bvec_iter iter; |
---|
109 | 109 | sector_t sector = bio->bi_iter.bi_sector; |
---|
.. | .. |
---|
127 | 127 | struct simdisk *dev = bdev->bd_disk->private_data; |
---|
128 | 128 | |
---|
129 | 129 | spin_lock(&dev->lock); |
---|
130 | | - if (!dev->users) |
---|
131 | | - check_disk_change(bdev); |
---|
132 | 130 | ++dev->users; |
---|
133 | 131 | spin_unlock(&dev->lock); |
---|
134 | 132 | return 0; |
---|
.. | .. |
---|
144 | 142 | |
---|
145 | 143 | static const struct block_device_operations simdisk_ops = { |
---|
146 | 144 | .owner = THIS_MODULE, |
---|
| 145 | + .submit_bio = simdisk_submit_bio, |
---|
147 | 146 | .open = simdisk_open, |
---|
148 | 147 | .release = simdisk_release, |
---|
149 | 148 | }; |
---|
.. | .. |
---|
214 | 213 | struct simdisk *dev = PDE_DATA(file_inode(file)); |
---|
215 | 214 | const char *s = dev->filename; |
---|
216 | 215 | if (s) { |
---|
217 | | - ssize_t n = simple_read_from_buffer(buf, size, ppos, |
---|
218 | | - s, strlen(s)); |
---|
219 | | - if (n < 0) |
---|
220 | | - return n; |
---|
221 | | - buf += n; |
---|
222 | | - size -= n; |
---|
| 216 | + ssize_t len = strlen(s); |
---|
| 217 | + char *temp = kmalloc(len + 2, GFP_KERNEL); |
---|
| 218 | + |
---|
| 219 | + if (!temp) |
---|
| 220 | + return -ENOMEM; |
---|
| 221 | + |
---|
| 222 | + len = scnprintf(temp, len + 2, "%s\n", s); |
---|
| 223 | + len = simple_read_from_buffer(buf, size, ppos, |
---|
| 224 | + temp, len); |
---|
| 225 | + |
---|
| 226 | + kfree(temp); |
---|
| 227 | + return len; |
---|
223 | 228 | } |
---|
224 | 229 | return simple_read_from_buffer(buf, size, ppos, "\n", 1); |
---|
225 | 230 | } |
---|
.. | .. |
---|
251 | 256 | return err; |
---|
252 | 257 | } |
---|
253 | 258 | |
---|
254 | | -static const struct file_operations fops = { |
---|
255 | | - .read = proc_read_simdisk, |
---|
256 | | - .write = proc_write_simdisk, |
---|
257 | | - .llseek = default_llseek, |
---|
| 259 | +static const struct proc_ops simdisk_proc_ops = { |
---|
| 260 | + .proc_read = proc_read_simdisk, |
---|
| 261 | + .proc_write = proc_write_simdisk, |
---|
| 262 | + .proc_lseek = default_llseek, |
---|
258 | 263 | }; |
---|
259 | 264 | |
---|
260 | 265 | static int __init simdisk_setup(struct simdisk *dev, int which, |
---|
.. | .. |
---|
267 | 272 | spin_lock_init(&dev->lock); |
---|
268 | 273 | dev->users = 0; |
---|
269 | 274 | |
---|
270 | | - dev->queue = blk_alloc_queue(GFP_KERNEL); |
---|
| 275 | + dev->queue = blk_alloc_queue(NUMA_NO_NODE); |
---|
271 | 276 | if (dev->queue == NULL) { |
---|
272 | 277 | pr_err("blk_alloc_queue failed\n"); |
---|
273 | 278 | goto out_alloc_queue; |
---|
274 | 279 | } |
---|
275 | | - |
---|
276 | | - blk_queue_make_request(dev->queue, simdisk_make_request); |
---|
277 | | - dev->queue->queuedata = dev; |
---|
278 | 280 | |
---|
279 | 281 | dev->gd = alloc_disk(SIMDISK_MINORS); |
---|
280 | 282 | if (dev->gd == NULL) { |
---|
.. | .. |
---|
290 | 292 | set_capacity(dev->gd, 0); |
---|
291 | 293 | add_disk(dev->gd); |
---|
292 | 294 | |
---|
293 | | - dev->procfile = proc_create_data(tmp, 0644, procdir, &fops, dev); |
---|
| 295 | + dev->procfile = proc_create_data(tmp, 0644, procdir, &simdisk_proc_ops, dev); |
---|
294 | 296 | return 0; |
---|
295 | 297 | |
---|
296 | 298 | out_alloc_disk: |
---|
297 | 299 | blk_cleanup_queue(dev->queue); |
---|
298 | 300 | dev->queue = NULL; |
---|
299 | 301 | out_alloc_queue: |
---|
300 | | - simc_close(dev->fd); |
---|
301 | | - return -EIO; |
---|
| 302 | + return -ENOMEM; |
---|
302 | 303 | } |
---|
303 | 304 | |
---|
304 | 305 | static int __init simdisk_init(void) |
---|