@@ -133,7 +133,6 @@ struct mspro_devinfo {
133133
134134struct mspro_block_data {
135135 struct memstick_dev * card ;
136- unsigned int usage_count ;
137136 unsigned int caps ;
138137 struct gendisk * disk ;
139138 struct request_queue * queue ;
@@ -178,48 +177,16 @@ static int mspro_block_complete_req(struct memstick_dev *card, int error);
178177
179178/*** Block device ***/
180179
181- static int mspro_block_bd_open (struct block_device * bdev , fmode_t mode )
182- {
183- struct gendisk * disk = bdev -> bd_disk ;
184- struct mspro_block_data * msb = disk -> private_data ;
185- int rc = - ENXIO ;
186-
187- mutex_lock (& mspro_block_disk_lock );
188-
189- if (msb && msb -> card )
190- msb -> usage_count ++ ;
191-
192- mutex_unlock (& mspro_block_disk_lock );
193-
194- return rc ;
195- }
196-
197-
198- static void mspro_block_disk_release (struct gendisk * disk )
180+ static void mspro_block_bd_free_disk (struct gendisk * disk )
199181{
200182 struct mspro_block_data * msb = disk -> private_data ;
201183 int disk_id = MINOR (disk_devt (disk )) >> MSPRO_BLOCK_PART_SHIFT ;
202184
203185 mutex_lock (& mspro_block_disk_lock );
204-
205- if (msb ) {
206- if (msb -> usage_count )
207- msb -> usage_count -- ;
208-
209- if (!msb -> usage_count ) {
210- kfree (msb );
211- disk -> private_data = NULL ;
212- idr_remove (& mspro_block_disk_idr , disk_id );
213- put_disk (disk );
214- }
215- }
216-
186+ idr_remove (& mspro_block_disk_idr , disk_id );
217187 mutex_unlock (& mspro_block_disk_lock );
218- }
219188
220- static void mspro_block_bd_release (struct gendisk * disk , fmode_t mode )
221- {
222- mspro_block_disk_release (disk );
189+ kfree (msb );
223190}
224191
225192static int mspro_block_bd_getgeo (struct block_device * bdev ,
@@ -235,10 +202,9 @@ static int mspro_block_bd_getgeo(struct block_device *bdev,
235202}
236203
237204static const struct block_device_operations ms_block_bdops = {
238- .open = mspro_block_bd_open ,
239- .release = mspro_block_bd_release ,
240- .getgeo = mspro_block_bd_getgeo ,
241- .owner = THIS_MODULE
205+ .owner = THIS_MODULE ,
206+ .getgeo = mspro_block_bd_getgeo ,
207+ .free_disk = mspro_block_bd_free_disk ,
242208};
243209
244210/*** Information ***/
@@ -1221,7 +1187,6 @@ static int mspro_block_init_disk(struct memstick_dev *card)
12211187 msb -> disk -> first_minor = disk_id << MSPRO_BLOCK_PART_SHIFT ;
12221188 msb -> disk -> minors = 1 << MSPRO_BLOCK_PART_SHIFT ;
12231189 msb -> disk -> fops = & ms_block_bdops ;
1224- msb -> usage_count = 1 ;
12251190 msb -> disk -> private_data = msb ;
12261191
12271192 sprintf (msb -> disk -> disk_name , "mspblk%d" , disk_id );
@@ -1339,7 +1304,7 @@ static void mspro_block_remove(struct memstick_dev *card)
13391304 mspro_block_data_clear (msb );
13401305 mutex_unlock (& mspro_block_disk_lock );
13411306
1342- mspro_block_disk_release (msb -> disk );
1307+ put_disk (msb -> disk );
13431308 memstick_set_drvdata (card , NULL );
13441309}
13451310
0 commit comments