mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 16:58:53 +00:00
bonding: elminate bad refcount code
The "expected_refcount" stuff in bonding sysfs module is a mistake. Sysfs does proper refcounting, and it is okay to remove a bond device that has some user process holding the file open. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3d632c3f28
commit
6d7ab43ccc
@ -40,12 +40,6 @@
|
|||||||
#define to_dev(obj) container_of(obj, struct device, kobj)
|
#define to_dev(obj) container_of(obj, struct device, kobj)
|
||||||
#define to_bond(cd) ((struct bonding *)(netdev_priv(to_net_dev(cd))))
|
#define to_bond(cd) ((struct bonding *)(netdev_priv(to_net_dev(cd))))
|
||||||
|
|
||||||
/*---------------------------- Declarations -------------------------------*/
|
|
||||||
|
|
||||||
static int expected_refcount = -1;
|
|
||||||
|
|
||||||
/*------------------------------ Functions --------------------------------*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "show" function for the bond_masters attribute.
|
* "show" function for the bond_masters attribute.
|
||||||
* The class parameter is ignored.
|
* The class parameter is ignored.
|
||||||
@ -112,18 +106,6 @@ static ssize_t bonding_store_bonds(struct class *cls,
|
|||||||
|
|
||||||
list_for_each_entry(bond, &bond_dev_list, bond_list)
|
list_for_each_entry(bond, &bond_dev_list, bond_list)
|
||||||
if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
|
if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
|
||||||
/* check the ref count on the bond's kobject.
|
|
||||||
* If it's > expected, then there's a file open,
|
|
||||||
* and we have to fail.
|
|
||||||
*/
|
|
||||||
if (atomic_read(&bond->dev->dev.kobj.kref.refcount)
|
|
||||||
> expected_refcount){
|
|
||||||
pr_info(DRV_NAME
|
|
||||||
": Unable remove bond %s due to open references.\n",
|
|
||||||
ifname);
|
|
||||||
res = -EPERM;
|
|
||||||
goto out_unlock;
|
|
||||||
}
|
|
||||||
pr_info(DRV_NAME
|
pr_info(DRV_NAME
|
||||||
": %s is being deleted...\n",
|
": %s is being deleted...\n",
|
||||||
bond->dev->name);
|
bond->dev->name);
|
||||||
@ -1579,9 +1561,6 @@ int bond_create_sysfs_entry(struct bonding *bond)
|
|||||||
if (err)
|
if (err)
|
||||||
printk(KERN_EMERG "eek! didn't create group!\n");
|
printk(KERN_EMERG "eek! didn't create group!\n");
|
||||||
|
|
||||||
if (expected_refcount < 1)
|
|
||||||
expected_refcount = atomic_read(&bond->dev->dev.kobj.kref.refcount);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user