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