@@ -1943,22 +1943,6 @@ static void msb_io_work(struct work_struct *work)
19431943static DEFINE_IDR (msb_disk_idr ); /*set of used disk numbers */
19441944static DEFINE_MUTEX (msb_disk_lock ); /* protects against races in open/release */
19451945
1946- static int msb_bd_open (struct block_device * bdev , fmode_t mode )
1947- {
1948- struct gendisk * disk = bdev -> bd_disk ;
1949- struct msb_data * msb = disk -> private_data ;
1950-
1951- dbg_verbose ("block device open" );
1952-
1953- mutex_lock (& msb_disk_lock );
1954-
1955- if (msb && msb -> card )
1956- msb -> usage_count ++ ;
1957-
1958- mutex_unlock (& msb_disk_lock );
1959- return 0 ;
1960- }
1961-
19621946static void msb_data_clear (struct msb_data * msb )
19631947{
19641948 kfree (msb -> boot_page );
@@ -1968,33 +1952,6 @@ static void msb_data_clear(struct msb_data *msb)
19681952 msb -> card = NULL ;
19691953}
19701954
1971- static int msb_disk_release (struct gendisk * disk )
1972- {
1973- struct msb_data * msb = disk -> private_data ;
1974-
1975- dbg_verbose ("block device release" );
1976- mutex_lock (& msb_disk_lock );
1977-
1978- if (msb ) {
1979- if (msb -> usage_count )
1980- msb -> usage_count -- ;
1981-
1982- if (!msb -> usage_count ) {
1983- disk -> private_data = NULL ;
1984- idr_remove (& msb_disk_idr , msb -> disk_id );
1985- put_disk (disk );
1986- kfree (msb );
1987- }
1988- }
1989- mutex_unlock (& msb_disk_lock );
1990- return 0 ;
1991- }
1992-
1993- static void msb_bd_release (struct gendisk * disk , fmode_t mode )
1994- {
1995- msb_disk_release (disk );
1996- }
1997-
19981955static int msb_bd_getgeo (struct block_device * bdev ,
19991956 struct hd_geometry * geo )
20001957{
@@ -2003,6 +1960,17 @@ static int msb_bd_getgeo(struct block_device *bdev,
20031960 return 0 ;
20041961}
20051962
1963+ static void msb_bd_free_disk (struct gendisk * disk )
1964+ {
1965+ struct msb_data * msb = disk -> private_data ;
1966+
1967+ mutex_lock (& msb_disk_lock );
1968+ idr_remove (& msb_disk_idr , msb -> disk_id );
1969+ mutex_unlock (& msb_disk_lock );
1970+
1971+ kfree (msb );
1972+ }
1973+
20061974static blk_status_t msb_queue_rq (struct blk_mq_hw_ctx * hctx ,
20071975 const struct blk_mq_queue_data * bd )
20081976{
@@ -2096,10 +2064,9 @@ static void msb_start(struct memstick_dev *card)
20962064}
20972065
20982066static const struct block_device_operations msb_bdops = {
2099- .open = msb_bd_open ,
2100- .release = msb_bd_release ,
2101- .getgeo = msb_bd_getgeo ,
2102- .owner = THIS_MODULE
2067+ .owner = THIS_MODULE ,
2068+ .getgeo = msb_bd_getgeo ,
2069+ .free_disk = msb_bd_free_disk ,
21032070};
21042071
21052072static const struct blk_mq_ops msb_mq_ops = {
@@ -2147,7 +2114,6 @@ static int msb_init_disk(struct memstick_dev *card)
21472114 set_capacity (msb -> disk , capacity );
21482115 dbg ("Set total disk size to %lu sectors" , capacity );
21492116
2150- msb -> usage_count = 1 ;
21512117 msb -> io_queue = alloc_ordered_workqueue ("ms_block" , WQ_MEM_RECLAIM );
21522118 INIT_WORK (& msb -> io_work , msb_io_work );
21532119 sg_init_table (msb -> prealloc_sg , MS_BLOCK_MAX_SEGS + 1 );
@@ -2229,7 +2195,7 @@ static void msb_remove(struct memstick_dev *card)
22292195 msb_data_clear (msb );
22302196 mutex_unlock (& msb_disk_lock );
22312197
2232- msb_disk_release (msb -> disk );
2198+ put_disk (msb -> disk );
22332199 memstick_set_drvdata (card , NULL );
22342200}
22352201
0 commit comments