hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/xtensa/platforms/iss/simdisk.c
....@@ -101,9 +101,9 @@
101101 spin_unlock(&dev->lock);
102102 }
103103
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)
105105 {
106
- struct simdisk *dev = q->queuedata;
106
+ struct simdisk *dev = bio->bi_disk->private_data;
107107 struct bio_vec bvec;
108108 struct bvec_iter iter;
109109 sector_t sector = bio->bi_iter.bi_sector;
....@@ -127,8 +127,6 @@
127127 struct simdisk *dev = bdev->bd_disk->private_data;
128128
129129 spin_lock(&dev->lock);
130
- if (!dev->users)
131
- check_disk_change(bdev);
132130 ++dev->users;
133131 spin_unlock(&dev->lock);
134132 return 0;
....@@ -144,6 +142,7 @@
144142
145143 static const struct block_device_operations simdisk_ops = {
146144 .owner = THIS_MODULE,
145
+ .submit_bio = simdisk_submit_bio,
147146 .open = simdisk_open,
148147 .release = simdisk_release,
149148 };
....@@ -214,12 +213,18 @@
214213 struct simdisk *dev = PDE_DATA(file_inode(file));
215214 const char *s = dev->filename;
216215 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;
223228 }
224229 return simple_read_from_buffer(buf, size, ppos, "\n", 1);
225230 }
....@@ -251,10 +256,10 @@
251256 return err;
252257 }
253258
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,
258263 };
259264
260265 static int __init simdisk_setup(struct simdisk *dev, int which,
....@@ -267,14 +272,11 @@
267272 spin_lock_init(&dev->lock);
268273 dev->users = 0;
269274
270
- dev->queue = blk_alloc_queue(GFP_KERNEL);
275
+ dev->queue = blk_alloc_queue(NUMA_NO_NODE);
271276 if (dev->queue == NULL) {
272277 pr_err("blk_alloc_queue failed\n");
273278 goto out_alloc_queue;
274279 }
275
-
276
- blk_queue_make_request(dev->queue, simdisk_make_request);
277
- dev->queue->queuedata = dev;
278280
279281 dev->gd = alloc_disk(SIMDISK_MINORS);
280282 if (dev->gd == NULL) {
....@@ -290,15 +292,14 @@
290292 set_capacity(dev->gd, 0);
291293 add_disk(dev->gd);
292294
293
- dev->procfile = proc_create_data(tmp, 0644, procdir, &fops, dev);
295
+ dev->procfile = proc_create_data(tmp, 0644, procdir, &simdisk_proc_ops, dev);
294296 return 0;
295297
296298 out_alloc_disk:
297299 blk_cleanup_queue(dev->queue);
298300 dev->queue = NULL;
299301 out_alloc_queue:
300
- simc_close(dev->fd);
301
- return -EIO;
302
+ return -ENOMEM;
302303 }
303304
304305 static int __init simdisk_init(void)