mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-03 11:13:56 +08:00
[SCSI] fcoe: Remove reference counting on 'stuct fcoe_interface'
The reference counting was necessary on these instances because it was possible for NPIV ports to be destroyed after the N_Port. A previous patch ensures that all NPIV ports are destroyed before the N_Port making the need to track references on the interface unnecessary. Signed-off-by: Robert Love <robert.w.love@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
ccefd23ed2
commit
1a8ef414d9
@ -384,7 +384,6 @@ static struct fcoe_interface *fcoe_interface_create(struct net_device *netdev,
|
||||
}
|
||||
|
||||
dev_hold(netdev);
|
||||
kref_init(&fcoe->kref);
|
||||
|
||||
/*
|
||||
* Initialize FIP.
|
||||
@ -411,42 +410,6 @@ out:
|
||||
return fcoe;
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_interface_release() - fcoe_port kref release function
|
||||
* @kref: Embedded reference count in an fcoe_interface struct
|
||||
*/
|
||||
static void fcoe_interface_release(struct kref *kref)
|
||||
{
|
||||
struct fcoe_interface *fcoe;
|
||||
struct net_device *netdev;
|
||||
|
||||
fcoe = container_of(kref, struct fcoe_interface, kref);
|
||||
netdev = fcoe->netdev;
|
||||
/* tear-down the FCoE controller */
|
||||
fcoe_ctlr_destroy(&fcoe->ctlr);
|
||||
kfree(fcoe);
|
||||
dev_put(netdev);
|
||||
module_put(THIS_MODULE);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_interface_get() - Get a reference to a FCoE interface
|
||||
* @fcoe: The FCoE interface to be held
|
||||
*/
|
||||
static inline void fcoe_interface_get(struct fcoe_interface *fcoe)
|
||||
{
|
||||
kref_get(&fcoe->kref);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_interface_put() - Put a reference to a FCoE interface
|
||||
* @fcoe: The FCoE interface to be released
|
||||
*/
|
||||
static inline void fcoe_interface_put(struct fcoe_interface *fcoe)
|
||||
{
|
||||
kref_put(&fcoe->kref, fcoe_interface_release);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_interface_cleanup() - Clean up a FCoE interface
|
||||
* @fcoe: The FCoE interface to be cleaned up
|
||||
@ -494,7 +457,11 @@ static void fcoe_interface_cleanup(struct fcoe_interface *fcoe)
|
||||
rtnl_unlock();
|
||||
|
||||
/* Release the self-reference taken during fcoe_interface_create() */
|
||||
fcoe_interface_put(fcoe);
|
||||
/* tear-down the FCoE controller */
|
||||
fcoe_ctlr_destroy(fip);
|
||||
kfree(fcoe);
|
||||
dev_put(netdev);
|
||||
module_put(THIS_MODULE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -976,9 +943,6 @@ static void fcoe_if_destroy(struct fc_lport *lport)
|
||||
dev_uc_del(netdev, port->data_src_addr);
|
||||
rtnl_unlock();
|
||||
|
||||
/* Release reference held in fcoe_if_create() */
|
||||
fcoe_interface_put(fcoe);
|
||||
|
||||
/* Free queued packets for the per-CPU receive threads */
|
||||
fcoe_percpu_clean(lport);
|
||||
|
||||
@ -1168,7 +1132,6 @@ static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
|
||||
goto out_lp_destroy;
|
||||
}
|
||||
|
||||
fcoe_interface_get(fcoe);
|
||||
return lport;
|
||||
|
||||
out_lp_destroy:
|
||||
@ -2113,7 +2076,6 @@ static void fcoe_destroy_work(struct work_struct *work)
|
||||
|
||||
fcoe = port->priv;
|
||||
fcoe_if_destroy(port->lport);
|
||||
|
||||
fcoe_interface_cleanup(fcoe);
|
||||
|
||||
mutex_unlock(&fcoe_config_mutex);
|
||||
|
@ -71,8 +71,6 @@ do { \
|
||||
* @ctlr: The FCoE controller (for FIP)
|
||||
* @oem: The offload exchange manager for all local port
|
||||
* instances associated with this port
|
||||
* @kref: The kernel reference
|
||||
*
|
||||
* This structure is 1:1 with a net devive.
|
||||
*/
|
||||
struct fcoe_interface {
|
||||
@ -83,7 +81,6 @@ struct fcoe_interface {
|
||||
struct packet_type fip_packet_type;
|
||||
struct fcoe_ctlr ctlr;
|
||||
struct fc_exch_mgr *oem;
|
||||
struct kref kref;
|
||||
};
|
||||
|
||||
#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
|
||||
|
Loading…
Reference in New Issue
Block a user