X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fdp_sysfs_dp.c;h=587b8bc2d5e40c17e379979e5ab71ef6b22b0260;hb=76f1c218bd84e44666c5a0ae54d543dbce42c376;hp=4abe4fb6338f58c4942e675da2da19f82f6d4ebe;hpb=dfffaef1eb2c0156432a3cf203fd8348651da912;p=openvswitch diff --git a/datapath/dp_sysfs_dp.c b/datapath/dp_sysfs_dp.c index 4abe4fb6..587b8bc2 100644 --- a/datapath/dp_sysfs_dp.c +++ b/datapath/dp_sysfs_dp.c @@ -43,19 +43,10 @@ #define DEV_ATTR(NAME) dev_attr_##NAME #endif -struct datapath *sysfs_get_dp(struct net_device *netdev) +static struct datapath *sysfs_get_dp(struct net_device *netdev) { struct vport *vport = internal_dev_get_vport(netdev); - struct dp_port *dp_port; - - if (!vport) - return NULL; - - dp_port = vport_get_dp_port(vport); - if (!dp_port) - return NULL; - - return dp_port->dp; + return vport ? vport->dp : NULL; } /* * Common code for storing bridge parameters. @@ -359,7 +350,8 @@ static struct attribute_group bridge_group = { */ int dp_sysfs_add_dp(struct datapath *dp) { - struct kobject *kobj = vport_get_kobj(dp->ports[ODPP_LOCAL]->vport); + struct kobject *kobj = + vport_get_kobj(rtnl_dereference(dp->ports[ODPP_LOCAL])); int err; /* Create /sys/class/net//bridge directory. */ @@ -388,7 +380,8 @@ int dp_sysfs_add_dp(struct datapath *dp) int dp_sysfs_del_dp(struct datapath *dp) { - struct kobject *kobj = vport_get_kobj(dp->ports[ODPP_LOCAL]->vport); + struct kobject *kobj = + vport_get_kobj(rtnl_dereference(dp->ports[ODPP_LOCAL])); kobject_del(&dp->ifobj); sysfs_remove_group(kobj, &bridge_group); @@ -398,6 +391,6 @@ int dp_sysfs_del_dp(struct datapath *dp) #else /* !CONFIG_SYSFS */ int dp_sysfs_add_dp(struct datapath *dp) { return 0; } int dp_sysfs_del_dp(struct datapath *dp) { return 0; } -int dp_sysfs_add_if(struct dp_port *p) { return 0; } -int dp_sysfs_del_if(struct dp_port *p) { return 0; } +int dp_sysfs_add_if(struct vport *p) { return 0; } +int dp_sysfs_del_if(struct vport *p) { return 0; } #endif /* !CONFIG_SYSFS */