.. | .. |
---|
76 | 76 | gdp->queue = block->request_queue; |
---|
77 | 77 | block->gdp = gdp; |
---|
78 | 78 | set_capacity(block->gdp, 0); |
---|
79 | | - device_add_disk(&base->cdev->dev, block->gdp); |
---|
| 79 | + device_add_disk(&base->cdev->dev, block->gdp, NULL); |
---|
80 | 80 | return 0; |
---|
81 | 81 | } |
---|
82 | 82 | |
---|
.. | .. |
---|
101 | 101 | struct block_device *bdev; |
---|
102 | 102 | int rc; |
---|
103 | 103 | |
---|
104 | | - bdev = bdget_disk(block->gdp, 0); |
---|
105 | | - if (!bdev) { |
---|
106 | | - DBF_DEV_EVENT(DBF_ERR, block->base, "%s", |
---|
107 | | - "scan partitions error, bdget returned NULL"); |
---|
108 | | - return -ENODEV; |
---|
109 | | - } |
---|
110 | | - |
---|
111 | | - rc = blkdev_get(bdev, FMODE_READ, NULL); |
---|
112 | | - if (rc < 0) { |
---|
| 104 | + bdev = blkdev_get_by_dev(disk_devt(block->gdp), FMODE_READ, NULL); |
---|
| 105 | + if (IS_ERR(bdev)) { |
---|
113 | 106 | DBF_DEV_EVENT(DBF_ERR, block->base, |
---|
114 | | - "scan partitions error, blkdev_get returned %d", |
---|
115 | | - rc); |
---|
| 107 | + "scan partitions error, blkdev_get returned %ld", |
---|
| 108 | + PTR_ERR(bdev)); |
---|
116 | 109 | return -ENODEV; |
---|
117 | 110 | } |
---|
118 | 111 | |
---|
119 | | - rc = blkdev_reread_part(bdev); |
---|
| 112 | + mutex_lock(&bdev->bd_mutex); |
---|
| 113 | + rc = bdev_disk_changed(bdev, false); |
---|
| 114 | + mutex_unlock(&bdev->bd_mutex); |
---|
120 | 115 | if (rc) |
---|
121 | 116 | DBF_DEV_EVENT(DBF_ERR, block->base, |
---|
122 | 117 | "scan partitions error, rc %d", rc); |
---|
.. | .. |
---|
141 | 136 | */ |
---|
142 | 137 | void dasd_destroy_partitions(struct dasd_block *block) |
---|
143 | 138 | { |
---|
144 | | - /* The two structs have 168/176 byte on 31/64 bit. */ |
---|
145 | | - struct blkpg_partition bpart; |
---|
146 | | - struct blkpg_ioctl_arg barg; |
---|
147 | 139 | struct block_device *bdev; |
---|
148 | 140 | |
---|
149 | 141 | /* |
---|
.. | .. |
---|
153 | 145 | bdev = block->bdev; |
---|
154 | 146 | block->bdev = NULL; |
---|
155 | 147 | |
---|
156 | | - /* |
---|
157 | | - * See fs/partition/check.c:delete_partition |
---|
158 | | - * Can't call delete_partitions directly. Use ioctl. |
---|
159 | | - * The ioctl also does locking and invalidation. |
---|
160 | | - */ |
---|
161 | | - memset(&bpart, 0, sizeof(struct blkpg_partition)); |
---|
162 | | - memset(&barg, 0, sizeof(struct blkpg_ioctl_arg)); |
---|
163 | | - barg.data = (void __force __user *) &bpart; |
---|
164 | | - barg.op = BLKPG_DEL_PARTITION; |
---|
165 | | - for (bpart.pno = block->gdp->minors - 1; bpart.pno > 0; bpart.pno--) |
---|
166 | | - ioctl_by_bdev(bdev, BLKPG, (unsigned long) &barg); |
---|
| 148 | + mutex_lock(&bdev->bd_mutex); |
---|
| 149 | + blk_drop_partitions(bdev); |
---|
| 150 | + mutex_unlock(&bdev->bd_mutex); |
---|
167 | 151 | |
---|
168 | | - invalidate_partition(block->gdp, 0); |
---|
169 | 152 | /* Matching blkdev_put to the blkdev_get in dasd_scan_partitions. */ |
---|
170 | 153 | blkdev_put(bdev, FMODE_READ); |
---|
171 | 154 | set_capacity(block->gdp, 0); |
---|