|
@@ -38,7 +38,7 @@ struct srp_host_attrs {
|
|
|
#define to_srp_host_attrs(host) ((struct srp_host_attrs *)(host)->shost_data)
|
|
|
|
|
|
#define SRP_HOST_ATTRS 0
|
|
|
-#define SRP_RPORT_ATTRS 2
|
|
|
+#define SRP_RPORT_ATTRS 3
|
|
|
|
|
|
struct srp_internal {
|
|
|
struct scsi_transport_template t;
|
|
@@ -116,6 +116,24 @@ show_srp_rport_roles(struct device *dev, struct device_attribute *attr,
|
|
|
|
|
|
static DEVICE_ATTR(roles, S_IRUGO, show_srp_rport_roles, NULL);
|
|
|
|
|
|
+static ssize_t store_srp_rport_delete(struct device *dev,
|
|
|
+ struct device_attribute *attr,
|
|
|
+ const char *buf, size_t count)
|
|
|
+{
|
|
|
+ struct srp_rport *rport = transport_class_to_srp_rport(dev);
|
|
|
+ struct Scsi_Host *shost = dev_to_shost(dev);
|
|
|
+ struct srp_internal *i = to_srp_internal(shost->transportt);
|
|
|
+
|
|
|
+ if (i->f->rport_delete) {
|
|
|
+ i->f->rport_delete(rport);
|
|
|
+ return count;
|
|
|
+ } else {
|
|
|
+ return -ENOSYS;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static DEVICE_ATTR(delete, S_IWUSR, NULL, store_srp_rport_delete);
|
|
|
+
|
|
|
static void srp_rport_release(struct device *dev)
|
|
|
{
|
|
|
struct srp_rport *rport = dev_to_rport(dev);
|
|
@@ -309,6 +327,8 @@ srp_attach_transport(struct srp_function_template *ft)
|
|
|
count = 0;
|
|
|
i->rport_attrs[count++] = &dev_attr_port_id;
|
|
|
i->rport_attrs[count++] = &dev_attr_roles;
|
|
|
+ if (ft->rport_delete)
|
|
|
+ i->rport_attrs[count++] = &dev_attr_delete;
|
|
|
i->rport_attrs[count++] = NULL;
|
|
|
BUG_ON(count > ARRAY_SIZE(i->rport_attrs));
|
|
|
|