@@ -1213,6 +1213,9 @@ static struct ib_port *setup_port(struct ib_core_device *coredev, int port_num,
12131213 p -> port_num = port_num ;
12141214 kobject_init (& p -> kobj , & port_type );
12151215
1216+ if (device -> port_data && is_full_dev )
1217+ device -> port_data [port_num ].sysfs = p ;
1218+
12161219 cur_group = p -> groups_list ;
12171220 ret = alloc_port_table_group ("gids" , & p -> groups [0 ], p -> attrs_list ,
12181221 attr -> gid_tbl_len , show_port_gid );
@@ -1258,16 +1261,15 @@ static struct ib_port *setup_port(struct ib_core_device *coredev, int port_num,
12581261 }
12591262
12601263 list_add_tail (& p -> kobj .entry , & coredev -> port_list );
1261- if (device -> port_data && is_full_dev )
1262- device -> port_data [port_num ].sysfs = p ;
1263-
12641264 return p ;
12651265
12661266err_groups :
12671267 sysfs_remove_groups (& p -> kobj , p -> groups_list );
12681268err_del :
12691269 kobject_del (& p -> kobj );
12701270err_put :
1271+ if (device -> port_data && is_full_dev )
1272+ device -> port_data [port_num ].sysfs = NULL ;
12711273 kobject_put (& p -> kobj );
12721274 return ERR_PTR (ret );
12731275}
@@ -1276,14 +1278,17 @@ static void destroy_port(struct ib_core_device *coredev, struct ib_port *port)
12761278{
12771279 bool is_full_dev = & port -> ibdev -> coredev == coredev ;
12781280
1279- if (port -> ibdev -> port_data &&
1280- port -> ibdev -> port_data [port -> port_num ].sysfs == port )
1281- port -> ibdev -> port_data [port -> port_num ].sysfs = NULL ;
12821281 list_del (& port -> kobj .entry );
12831282 if (is_full_dev )
12841283 sysfs_remove_groups (& port -> kobj , port -> ibdev -> ops .port_groups );
1284+
12851285 sysfs_remove_groups (& port -> kobj , port -> groups_list );
12861286 kobject_del (& port -> kobj );
1287+
1288+ if (port -> ibdev -> port_data &&
1289+ port -> ibdev -> port_data [port -> port_num ].sysfs == port )
1290+ port -> ibdev -> port_data [port -> port_num ].sysfs = NULL ;
1291+
12871292 kobject_put (& port -> kobj );
12881293}
12891294
0 commit comments