Skip to contentSkip to conversation

sas transport sysfs write attributes bug fix

PATCH In review Eric Moore 2 participants 3 messages Apr 25, 2006 – Apr 26, 2006 SCSI

lore
Share & tools
lore

Eric Moore

author
#0 lore raw

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
diff -uarN b/drivers/scsi/scsi_transport_sas.c a/drivers/scsi/scsi_transport_sas.c
@@ -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)
#1 lore raw
Quoted 8 lines · Eric Moore

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

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
index 8b6d65e..40bef6c 100644
@@ -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.c a/drivers/scsi/scsi_transport_sas.c

drivers/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

#2 lore raw
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