srp_transport: Fix attribute registration
Register transport attributes after the attribute array has been set up instead of before. The current code can trigger a race condition because the code reading the attribute array can run on another thread than the code that initialized that array. Make sure that any code reading the attribute array will see all values written into that array. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Cc: Robert Jennings <rcj@linux.vnet.ibm.com> Acked-by: David Dillow <dillowda@ornl.gov> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
a4605a9369
commit
ac9be30e91
1 changed files with 2 additions and 1 deletions
|
@ -324,13 +324,14 @@ srp_attach_transport(struct srp_function_template *ft)
|
||||||
i->rport_attr_cont.ac.attrs = &i->rport_attrs[0];
|
i->rport_attr_cont.ac.attrs = &i->rport_attrs[0];
|
||||||
i->rport_attr_cont.ac.class = &srp_rport_class.class;
|
i->rport_attr_cont.ac.class = &srp_rport_class.class;
|
||||||
i->rport_attr_cont.ac.match = srp_rport_match;
|
i->rport_attr_cont.ac.match = srp_rport_match;
|
||||||
transport_container_register(&i->rport_attr_cont);
|
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
SETUP_RPORT_ATTRIBUTE_RD(port_id);
|
SETUP_RPORT_ATTRIBUTE_RD(port_id);
|
||||||
SETUP_RPORT_ATTRIBUTE_RD(roles);
|
SETUP_RPORT_ATTRIBUTE_RD(roles);
|
||||||
i->rport_attrs[count] = NULL;
|
i->rport_attrs[count] = NULL;
|
||||||
|
|
||||||
|
transport_container_register(&i->rport_attr_cont);
|
||||||
|
|
||||||
i->f = ft;
|
i->f = ft;
|
||||||
|
|
||||||
return &i->t;
|
return &i->t;
|
||||||
|
|
Loading…
Reference in a new issue