diff options
author | Bart Van Assche <[email protected]> | 2011-10-21 19:31:07 +0200 |
---|---|---|
committer | Roland Dreier <[email protected]> | 2012-11-30 17:40:33 -0800 |
commit | ac9be30e91cffe07f762bd91ca40de065bf257d7 (patch) | |
tree | 94f6a1ced9a91c53d3c626ab81929d25fea2caa3 | |
parent | a4605a93696ee0768e55e4bce1ff7f0ee39bcf79 (diff) |
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 <[email protected]>
Cc: FUJITA Tomonori <[email protected]>
Cc: Robert Jennings <[email protected]>
Acked-by: David Dillow <[email protected]>
Signed-off-by: Roland Dreier <[email protected]>
-rw-r--r-- | drivers/scsi/scsi_transport_srp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c index 21a045e0559f..07c4394624f1 100644 --- a/drivers/scsi/scsi_transport_srp.c +++ b/drivers/scsi/scsi_transport_srp.c @@ -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.class = &srp_rport_class.class; i->rport_attr_cont.ac.match = srp_rport_match; - transport_container_register(&i->rport_attr_cont); count = 0; SETUP_RPORT_ATTRIBUTE_RD(port_id); SETUP_RPORT_ATTRIBUTE_RD(roles); i->rport_attrs[count] = NULL; + transport_container_register(&i->rport_attr_cont); + i->f = ft; return &i->t; |