{                                                                        \
        struct scsi_device *sdev = to_scsi_device(dev);                  \
        struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);            \
-       struct zfcp_port *port = zfcp_sdev->port;                        \
                                                                         \
        return sprintf(buf, _format, _value);                            \
 }                                                                        \
 static DEVICE_ATTR(_name, S_IRUGO, zfcp_sysfs_scsi_##_name##_show, NULL);
 
 ZFCP_DEFINE_SCSI_ATTR(hba_id, "%s\n",
-                     dev_name(&port->adapter->ccw_device->dev));
+                     dev_name(&zfcp_sdev->port->adapter->ccw_device->dev));
 ZFCP_DEFINE_SCSI_ATTR(wwpn, "0x%016llx\n",
-                     (unsigned long long) port->wwpn);
+                     (unsigned long long) zfcp_sdev->port->wwpn);
 
 static ssize_t zfcp_sysfs_scsi_fcp_lun_show(struct device *dev,
                                            struct device_attribute *attr,
 }
 static DEVICE_ATTR(fcp_lun, S_IRUGO, zfcp_sysfs_scsi_fcp_lun_show, NULL);
 
+ZFCP_DEFINE_SCSI_ATTR(zfcp_access_denied, "%d\n",
+                     (atomic_read(&zfcp_sdev->status) &
+                      ZFCP_STATUS_COMMON_ACCESS_DENIED) != 0);
+
+static ssize_t zfcp_sysfs_scsi_zfcp_failed_show(struct device *dev,
+                                          struct device_attribute *attr,
+                                          char *buf)
+{
+       struct scsi_device *sdev = to_scsi_device(dev);
+       unsigned int status = atomic_read(&sdev_to_zfcp(sdev)->status);
+       unsigned int failed = status & ZFCP_STATUS_COMMON_ERP_FAILED ? 1 : 0;
+
+       return sprintf(buf, "%d\n", failed);
+}
+
+static ssize_t zfcp_sysfs_scsi_zfcp_failed_store(struct device *dev,
+                                           struct device_attribute *attr,
+                                           const char *buf, size_t count)
+{
+       struct scsi_device *sdev = to_scsi_device(dev);
+       unsigned long val;
+
+       if (kstrtoul(buf, 0, &val) || val != 0)
+               return -EINVAL;
+
+       zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING);
+       zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED,
+                           "syufai3");
+       zfcp_erp_wait(sdev_to_zfcp(sdev)->port->adapter);
+
+       return count;
+}
+static DEVICE_ATTR(zfcp_failed, S_IWUSR | S_IRUGO,
+                  zfcp_sysfs_scsi_zfcp_failed_show,
+                  zfcp_sysfs_scsi_zfcp_failed_store);
+
+ZFCP_DEFINE_SCSI_ATTR(zfcp_in_recovery, "%d\n",
+                     (atomic_read(&zfcp_sdev->status) &
+                      ZFCP_STATUS_COMMON_ERP_INUSE) != 0);
+
+ZFCP_DEFINE_SCSI_ATTR(zfcp_status, "0x%08x\n",
+                     atomic_read(&zfcp_sdev->status));
+
 struct device_attribute *zfcp_sysfs_sdev_attrs[] = {
        &dev_attr_fcp_lun,
        &dev_attr_wwpn,
        &dev_attr_read_latency,
        &dev_attr_write_latency,
        &dev_attr_cmd_latency,
+       &dev_attr_zfcp_access_denied,
+       &dev_attr_zfcp_failed,
+       &dev_attr_zfcp_in_recovery,
+       &dev_attr_zfcp_status,
        NULL
 };