aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_transport_srp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_transport_srp.c')
-rw-r--r--drivers/scsi/scsi_transport_srp.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
index 0d85f797141f..f379c7f3034c 100644
--- a/drivers/scsi/scsi_transport_srp.c
+++ b/drivers/scsi/scsi_transport_srp.c
@@ -38,7 +38,7 @@ struct srp_host_attrs {
38#define to_srp_host_attrs(host) ((struct srp_host_attrs *)(host)->shost_data) 38#define to_srp_host_attrs(host) ((struct srp_host_attrs *)(host)->shost_data)
39 39
40#define SRP_HOST_ATTRS 0 40#define SRP_HOST_ATTRS 0
41#define SRP_RPORT_ATTRS 2 41#define SRP_RPORT_ATTRS 3
42 42
43struct srp_internal { 43struct srp_internal {
44 struct scsi_transport_template t; 44 struct scsi_transport_template t;
@@ -116,6 +116,24 @@ show_srp_rport_roles(struct device *dev, struct device_attribute *attr,
116 116
117static DEVICE_ATTR(roles, S_IRUGO, show_srp_rport_roles, NULL); 117static DEVICE_ATTR(roles, S_IRUGO, show_srp_rport_roles, NULL);
118 118
119static ssize_t store_srp_rport_delete(struct device *dev,
120 struct device_attribute *attr,
121 const char *buf, size_t count)
122{
123 struct srp_rport *rport = transport_class_to_srp_rport(dev);
124 struct Scsi_Host *shost = dev_to_shost(dev);
125 struct srp_internal *i = to_srp_internal(shost->transportt);
126
127 if (i->f->rport_delete) {
128 i->f->rport_delete(rport);
129 return count;
130 } else {
131 return -ENOSYS;
132 }
133}
134
135static DEVICE_ATTR(delete, S_IWUSR, NULL, store_srp_rport_delete);
136
119static void srp_rport_release(struct device *dev) 137static void srp_rport_release(struct device *dev)
120{ 138{
121 struct srp_rport *rport = dev_to_rport(dev); 139 struct srp_rport *rport = dev_to_rport(dev);
@@ -309,6 +327,8 @@ srp_attach_transport(struct srp_function_template *ft)
309 count = 0; 327 count = 0;
310 i->rport_attrs[count++] = &dev_attr_port_id; 328 i->rport_attrs[count++] = &dev_attr_port_id;
311 i->rport_attrs[count++] = &dev_attr_roles; 329 i->rport_attrs[count++] = &dev_attr_roles;
330 if (ft->rport_delete)
331 i->rport_attrs[count++] = &dev_attr_delete;
312 i->rport_attrs[count++] = NULL; 332 i->rport_attrs[count++] = NULL;
313 BUG_ON(count > ARRAY_SIZE(i->rport_attrs)); 333 BUG_ON(count > ARRAY_SIZE(i->rport_attrs));
314 334