sas transport sysfs write attributes bug fix
PATCH 1/1 sas transport sysfs write attributes bug fix
The SAS Transport Layers SySFS write attributes were recently broke when SETUP_OPTIONAL_PORT_ATTRIBUTE_WRONLY was added. This fix's the following write attributes:
/sys/class/sas_phy/phy-0:0/hard_reset /sys/class/sas_phy/phy-0:0/link_reset
drivers/scsi/scsi_transport_sas.c +9 -2
@@ -982,6 +982,13 @@if (test) \ count++ +#define SETUP_TEMPLATE_WRONLY (attrb, field, perm, test) \ + i->private_##attrb[count] = class_device_attr_##field; \ + i->private_##attrb[count].attr.mode = perm; \ + i->private_##attrb[count].show = NULL; \ + i->attrb[count] = &i->private_##attrb[count]; \ + if (test) \ + count++#define SETUP_RPORT_ATTRIBUTE (field) \ SETUP_TEMPLATE(rphy_attrs, field, S_IRUGO, 1)
@@ -996,10 +1003,10 @@ SETUP_TEMPLATE(phy_attrs, field, S_IRUGO, i->f->func)#define SETUP_PORT_ATTRIBUTE_WRONLY (field) \ - SETUP_TEMPLATE(phy_attrs, field, S_IWUGO, 1) + SETUP_TEMPLATE_WRONLY(phy_attrs, field, S_IWUGO, 1)#define SETUP_OPTIONAL_PORT_ATTRIBUTE_WRONLY (field, func) \ - SETUP_TEMPLATE(phy_attrs, field, S_IWUGO, i->f->func) + SETUP_TEMPLATE_WRONLY(phy_attrs, field, S_IWUGO, i->f->func)#define SETUP_END_DEV_ATTRIBUTE (field) \ SETUP_TEMPLATE(end_dev_attrs, field, S_IRUGO, 1)
Quoted 8 lines · Eric Moore
The SAS Transport Layers SySFS write attributes were recently broke when
SETUP_OPTIONAL_PORT_ATTRIBUTE_WRONLYwas added. This fix's the following write attributes:/sys/class/sas_phy/phy-0:0/hard_reset /sys/class/sas_phy/phy-0:0/link_resetSigned-off-by Eric Moore <[email protected]>
Heh, that's a bit of a screw up in the templates (cut and paste error, I think), but isn't this the simpler fix?
James
drivers/scsi/scsi_transport_sas.c +1 -2
@@ -974,10 +974,9 @@ static int sas_user_scan(struct Scsi_Hos* Setup / Teardown code */ -#define SETUP_TEMPLATE (attrb, field, perm, test) \ +#define SETUP_TEMPLATE (attrb, field, perm, test) \ i->private_##attrb[count] = class_device_attr_##field; \ i->private_##attrb[count].attr.mode = perm; \ - i->private_##attrb[count].store = NULL; \ i->attrb[count] = &i->private_##attrb[count]; \ if (test) \ count++
Quoted 35 lines
diff -uarN
b/drivers/scsi/scsi_transport_sas.ca/drivers/scsi/scsi_transport_sas.cdrivers/scsi/scsi_transport_sas.c +9
-3@@ -982,6 +982,13 @@if (test) \ count++ +#define SETUP_TEMPLATE_WRONLY (attrb, field, perm, test) \ + i->private_##attrb[count] = class_device_attr_##field; \ + i->private_##attrb[count].attr.mode = perm; \ + i->private_##attrb[count].show = NULL; \ + i->attrb[count] = &i->private_##attrb[count]; \ + if (test) \ + count++#define SETUP_RPORT_ATTRIBUTE (field) \ SETUP_TEMPLATE(rphy_attrs, field, S_IRUGO, 1)@@ -996,10 +1003,10 @@ SETUP_TEMPLATE(phy_attrs, field, S_IRUGO, i->f->func)#define SETUP_PORT_ATTRIBUTE_WRONLY (field) \ - SETUP_TEMPLATE(phy_attrs, field, S_IWUGO, 1) + SETUP_TEMPLATE_WRONLY(phy_attrs, field, S_IWUGO, 1)#define SETUP_OPTIONAL_PORT_ATTRIBUTE_WRONLY (field, func) \ - SETUP_TEMPLATE(phy_attrs, field, S_IWUGO, i->f->func) + SETUP_TEMPLATE_WRONLY(phy_attrs, field, S_IWUGO, i->f->func)#define SETUP_END_DEV_ATTRIBUTE (field) \ SETUP_TEMPLATE(end_dev_attrs, field, S_IRUGO, 1) -To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 3 lines · James Bottomley
Heh, that's a bit of a screw up in the templates (cut and paste error, I think), but isn't this the simpler fix?
Agreed.
Yes, it would be simpler if we didn't bother with the store and show pointer from SETUP_TEMPLATE. I'm sure the i struct would of been already initialized by now, and corresponding store/show fields would be set accordingly.
Regards,
Eric