| .. | .. |
|---|
| 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) |
|---|