@@ -1487,28 +1487,28 @@ static int mpi3mr_bsg_request(struct bsg_job *job)
1487
1487
*/
1488
1488
void mpi3mr_bsg_exit (struct mpi3mr_ioc * mrioc )
1489
1489
{
1490
+ struct device * bsg_dev = & mrioc -> bsg_dev ;
1490
1491
if (!mrioc -> bsg_queue )
1491
1492
return ;
1492
1493
1493
1494
bsg_remove_queue (mrioc -> bsg_queue );
1494
1495
mrioc -> bsg_queue = NULL ;
1495
1496
1496
- device_del (mrioc -> bsg_dev );
1497
- put_device (mrioc -> bsg_dev );
1498
- kfree (mrioc -> bsg_dev );
1497
+ device_del (bsg_dev );
1498
+ put_device (bsg_dev );
1499
1499
}
1500
1500
1501
1501
/**
1502
1502
* mpi3mr_bsg_node_release -release bsg device node
1503
1503
* @dev: bsg device node
1504
1504
*
1505
- * decrements bsg dev reference count
1505
+ * decrements bsg dev parent reference count
1506
1506
*
1507
1507
* Return:Nothing
1508
1508
*/
1509
1509
static void mpi3mr_bsg_node_release (struct device * dev )
1510
1510
{
1511
- put_device (dev );
1511
+ put_device (dev -> parent );
1512
1512
}
1513
1513
1514
1514
/**
@@ -1521,41 +1521,37 @@ static void mpi3mr_bsg_node_release(struct device *dev)
1521
1521
*/
1522
1522
void mpi3mr_bsg_init (struct mpi3mr_ioc * mrioc )
1523
1523
{
1524
- mrioc -> bsg_dev = kzalloc (sizeof (struct device ), GFP_KERNEL );
1525
- if (!mrioc -> bsg_dev ) {
1526
- ioc_err (mrioc , "bsg device mem allocation failed\n" );
1527
- return ;
1528
- }
1524
+ struct device * bsg_dev = & mrioc -> bsg_dev ;
1525
+ struct device * parent = & mrioc -> shost -> shost_gendev ;
1526
+
1527
+ device_initialize (bsg_dev );
1528
+
1529
+ bsg_dev -> parent = get_device (parent );
1530
+ bsg_dev -> release = mpi3mr_bsg_node_release ;
1529
1531
1530
- device_initialize (mrioc -> bsg_dev );
1531
- dev_set_name (mrioc -> bsg_dev , "mpi3mrctl%u" , mrioc -> id );
1532
+ dev_set_name (bsg_dev , "mpi3mrctl%u" , mrioc -> id );
1532
1533
1533
- if (device_add (mrioc -> bsg_dev )) {
1534
+ if (device_add (bsg_dev )) {
1534
1535
ioc_err (mrioc , "%s: bsg device add failed\n" ,
1535
- dev_name (mrioc -> bsg_dev ));
1536
- goto err_device_add ;
1536
+ dev_name (bsg_dev ));
1537
+ put_device (bsg_dev );
1538
+ return ;
1537
1539
}
1538
1540
1539
- mrioc -> bsg_dev -> release = mpi3mr_bsg_node_release ;
1540
-
1541
- mrioc -> bsg_queue = bsg_setup_queue (mrioc -> bsg_dev , dev_name (mrioc -> bsg_dev ),
1541
+ mrioc -> bsg_queue = bsg_setup_queue (bsg_dev , dev_name (bsg_dev ),
1542
1542
mpi3mr_bsg_request , NULL , 0 );
1543
1543
if (IS_ERR (mrioc -> bsg_queue )) {
1544
1544
ioc_err (mrioc , "%s: bsg registration failed\n" ,
1545
- dev_name (mrioc -> bsg_dev ));
1546
- goto err_setup_queue ;
1545
+ dev_name (bsg_dev ));
1546
+ device_del (bsg_dev );
1547
+ put_device (bsg_dev );
1548
+ return ;
1547
1549
}
1548
1550
1549
1551
blk_queue_max_segments (mrioc -> bsg_queue , MPI3MR_MAX_APP_XFER_SEGMENTS );
1550
1552
blk_queue_max_hw_sectors (mrioc -> bsg_queue , MPI3MR_MAX_APP_XFER_SECTORS );
1551
1553
1552
1554
return ;
1553
-
1554
- err_setup_queue :
1555
- device_del (mrioc -> bsg_dev );
1556
- put_device (mrioc -> bsg_dev );
1557
- err_device_add :
1558
- kfree (mrioc -> bsg_dev );
1559
1555
}
1560
1556
1561
1557
/**
0 commit comments