.. | .. |
---|
59 | 59 | struct gendisk *disk; |
---|
60 | 60 | }; |
---|
61 | 61 | |
---|
62 | | -static blk_qc_t nfhd_make_request(struct request_queue *queue, struct bio *bio) |
---|
| 62 | +static blk_qc_t nfhd_submit_bio(struct bio *bio) |
---|
63 | 63 | { |
---|
64 | | - struct nfhd_device *dev = queue->queuedata; |
---|
| 64 | + struct nfhd_device *dev = bio->bi_disk->private_data; |
---|
65 | 65 | struct bio_vec bvec; |
---|
66 | 66 | struct bvec_iter iter; |
---|
67 | 67 | int dir, len, shift; |
---|
.. | .. |
---|
73 | 73 | len = bvec.bv_len; |
---|
74 | 74 | len >>= 9; |
---|
75 | 75 | nfhd_read_write(dev->id, 0, dir, sec >> shift, len >> shift, |
---|
76 | | - bvec_to_phys(&bvec)); |
---|
| 76 | + page_to_phys(bvec.bv_page) + bvec.bv_offset); |
---|
77 | 77 | sec += len; |
---|
78 | 78 | } |
---|
79 | 79 | bio_endio(bio); |
---|
.. | .. |
---|
93 | 93 | |
---|
94 | 94 | static const struct block_device_operations nfhd_ops = { |
---|
95 | 95 | .owner = THIS_MODULE, |
---|
| 96 | + .submit_bio = nfhd_submit_bio, |
---|
96 | 97 | .getgeo = nfhd_getgeo, |
---|
97 | 98 | }; |
---|
98 | 99 | |
---|
.. | .. |
---|
118 | 119 | dev->bsize = bsize; |
---|
119 | 120 | dev->bshift = ffs(bsize) - 10; |
---|
120 | 121 | |
---|
121 | | - dev->queue = blk_alloc_queue(GFP_KERNEL); |
---|
| 122 | + dev->queue = blk_alloc_queue(NUMA_NO_NODE); |
---|
122 | 123 | if (dev->queue == NULL) |
---|
123 | 124 | goto free_dev; |
---|
124 | 125 | |
---|
125 | | - dev->queue->queuedata = dev; |
---|
126 | | - blk_queue_make_request(dev->queue, nfhd_make_request); |
---|
127 | 126 | blk_queue_logical_block_size(dev->queue, bsize); |
---|
128 | 127 | |
---|
129 | 128 | dev->disk = alloc_disk(16); |
---|
.. | .. |
---|
155 | 154 | static int __init nfhd_init(void) |
---|
156 | 155 | { |
---|
157 | 156 | u32 blocks, bsize; |
---|
| 157 | + int ret; |
---|
158 | 158 | int i; |
---|
159 | 159 | |
---|
160 | 160 | nfhd_id = nf_get_id("XHDI"); |
---|
161 | 161 | if (!nfhd_id) |
---|
162 | 162 | return -ENODEV; |
---|
163 | 163 | |
---|
164 | | - major_num = register_blkdev(major_num, "nfhd"); |
---|
165 | | - if (major_num <= 0) { |
---|
| 164 | + ret = register_blkdev(major_num, "nfhd"); |
---|
| 165 | + if (ret < 0) { |
---|
166 | 166 | pr_warn("nfhd: unable to get major number\n"); |
---|
167 | | - return major_num; |
---|
| 167 | + return ret; |
---|
168 | 168 | } |
---|
169 | 169 | |
---|
| 170 | + if (!major_num) |
---|
| 171 | + major_num = ret; |
---|
| 172 | + |
---|
170 | 173 | for (i = NFHD_DEV_OFFSET; i < 24; i++) { |
---|
171 | 174 | if (nfhd_get_capacity(i, 0, &blocks, &bsize)) |
---|
172 | 175 | continue; |
---|