mirror of https://gitee.com/openkylin/linux.git
IB/srpt: Update sport->port_guid with each port refresh
If port_guid is set with the default subnet_prefix, then we get a change event and run a port refresh, we don't update the port_guid. As a result, attempts to create a target device that uses the new subnet_prefix in the wwn will fail to find a match and be rejected by the ib_srpt driver. This makes it impossible to configure a port if it was initialized with a default subnet_prefix and later changed to any non-default subnet-prefix. Updating the port refresh task to always update the wwn based upon the current subnext_prefix solves this problem. Cc: Bart Van Assche <bart.vanassche@sandisk.com> Cc: nab@linux-iscsi.org Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
3c199b4523
commit
716b076ba4
|
@ -522,6 +522,11 @@ static int srpt_refresh_port(struct srpt_port *sport)
|
|||
if (ret)
|
||||
goto err_query_port;
|
||||
|
||||
snprintf(sport->port_guid, sizeof(sport->port_guid),
|
||||
"0x%016llx%016llx",
|
||||
be64_to_cpu(sport->gid.global.subnet_prefix),
|
||||
be64_to_cpu(sport->gid.global.interface_id));
|
||||
|
||||
if (!sport->mad_agent) {
|
||||
memset(®_req, 0, sizeof(reg_req));
|
||||
reg_req.mgmt_class = IB_MGMT_CLASS_DEVICE_MGMT;
|
||||
|
@ -2548,10 +2553,6 @@ static void srpt_add_one(struct ib_device *device)
|
|||
sdev->device->name, i);
|
||||
goto err_ring;
|
||||
}
|
||||
snprintf(sport->port_guid, sizeof(sport->port_guid),
|
||||
"0x%016llx%016llx",
|
||||
be64_to_cpu(sport->gid.global.subnet_prefix),
|
||||
be64_to_cpu(sport->gid.global.interface_id));
|
||||
}
|
||||
|
||||
spin_lock(&srpt_dev_lock);
|
||||
|
|
Loading…
Reference in New Issue