Commit 3b6e8204 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
 "This is a set of five minor fixes (although, tecnhincally, the aicxxx
  fix is for a major problem in that the driver won't load without it,
  but I think the fact it's taken us since 4.10 to discover this
  indicates that the user base for these things has declined)"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: cxlflash: Prevent deadlock when adapter probe fails
  Revert "scsi: libfc: Add WARN_ON() when deleting rports"
  scsi: sd_zbc: Fix zone information messages
  scsi: target: make the pi_prot_format ConfigFS path readable
  scsi: aic94xx: fix module loading
parents 2e277fa0 bb61b843
...@@ -280,7 +280,7 @@ static ssize_t asd_show_dev_rev(struct device *dev, ...@@ -280,7 +280,7 @@ static ssize_t asd_show_dev_rev(struct device *dev,
return snprintf(buf, PAGE_SIZE, "%s\n", return snprintf(buf, PAGE_SIZE, "%s\n",
asd_dev_rev[asd_ha->revision_id]); asd_dev_rev[asd_ha->revision_id]);
} }
static DEVICE_ATTR(revision, S_IRUGO, asd_show_dev_rev, NULL); static DEVICE_ATTR(aic_revision, S_IRUGO, asd_show_dev_rev, NULL);
static ssize_t asd_show_dev_bios_build(struct device *dev, static ssize_t asd_show_dev_bios_build(struct device *dev,
struct device_attribute *attr,char *buf) struct device_attribute *attr,char *buf)
...@@ -477,7 +477,7 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) ...@@ -477,7 +477,7 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
{ {
int err; int err;
err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision); err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
if (err) if (err)
return err; return err;
...@@ -499,13 +499,13 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha) ...@@ -499,13 +499,13 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
err_biosb: err_biosb:
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
err_rev: err_rev:
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
return err; return err;
} }
static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha) static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha)
{ {
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
device_remove_file(&asd_ha->pcidev->dev, &dev_attr_update_bios); device_remove_file(&asd_ha->pcidev->dev, &dev_attr_update_bios);
......
...@@ -3687,6 +3687,7 @@ static int cxlflash_probe(struct pci_dev *pdev, ...@@ -3687,6 +3687,7 @@ static int cxlflash_probe(struct pci_dev *pdev,
host->max_cmd_len = CXLFLASH_MAX_CDB_LEN; host->max_cmd_len = CXLFLASH_MAX_CDB_LEN;
cfg = shost_priv(host); cfg = shost_priv(host);
cfg->state = STATE_PROBING;
cfg->host = host; cfg->host = host;
rc = alloc_mem(cfg); rc = alloc_mem(cfg);
if (rc) { if (rc) {
...@@ -3775,6 +3776,7 @@ static int cxlflash_probe(struct pci_dev *pdev, ...@@ -3775,6 +3776,7 @@ static int cxlflash_probe(struct pci_dev *pdev,
return rc; return rc;
out_remove: out_remove:
cfg->state = STATE_PROBED;
cxlflash_remove(pdev); cxlflash_remove(pdev);
goto out; goto out;
} }
......
...@@ -184,7 +184,6 @@ void fc_rport_destroy(struct kref *kref) ...@@ -184,7 +184,6 @@ void fc_rport_destroy(struct kref *kref)
struct fc_rport_priv *rdata; struct fc_rport_priv *rdata;
rdata = container_of(kref, struct fc_rport_priv, kref); rdata = container_of(kref, struct fc_rport_priv, kref);
WARN_ON(!list_empty(&rdata->peers));
kfree_rcu(rdata, rcu); kfree_rcu(rdata, rcu);
} }
EXPORT_SYMBOL(fc_rport_destroy); EXPORT_SYMBOL(fc_rport_destroy);
......
...@@ -462,12 +462,16 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf) ...@@ -462,12 +462,16 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
sdkp->device->use_10_for_rw = 0; sdkp->device->use_10_for_rw = 0;
/* /*
* If something changed, revalidate the disk zone bitmaps once we have * Revalidate the disk zone bitmaps once the block device capacity is
* the capacity, that is on the second revalidate execution during disk * set on the second revalidate execution during disk scan and if
* scan and always during normal revalidate. * something changed when executing a normal revalidate.
*/ */
if (sdkp->first_scan) if (sdkp->first_scan) {
sdkp->zone_blocks = zone_blocks;
sdkp->nr_zones = nr_zones;
return 0; return 0;
}
if (sdkp->zone_blocks != zone_blocks || if (sdkp->zone_blocks != zone_blocks ||
sdkp->nr_zones != nr_zones || sdkp->nr_zones != nr_zones ||
disk->queue->nr_zones != nr_zones) { disk->queue->nr_zones != nr_zones) {
......
...@@ -852,6 +852,12 @@ static ssize_t pi_prot_type_store(struct config_item *item, ...@@ -852,6 +852,12 @@ static ssize_t pi_prot_type_store(struct config_item *item,
return count; return count;
} }
/* always zero, but attr needs to remain RW to avoid userspace breakage */
static ssize_t pi_prot_format_show(struct config_item *item, char *page)
{
return snprintf(page, PAGE_SIZE, "0\n");
}
static ssize_t pi_prot_format_store(struct config_item *item, static ssize_t pi_prot_format_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
...@@ -1132,7 +1138,7 @@ CONFIGFS_ATTR(, emulate_3pc); ...@@ -1132,7 +1138,7 @@ CONFIGFS_ATTR(, emulate_3pc);
CONFIGFS_ATTR(, emulate_pr); CONFIGFS_ATTR(, emulate_pr);
CONFIGFS_ATTR(, pi_prot_type); CONFIGFS_ATTR(, pi_prot_type);
CONFIGFS_ATTR_RO(, hw_pi_prot_type); CONFIGFS_ATTR_RO(, hw_pi_prot_type);
CONFIGFS_ATTR_WO(, pi_prot_format); CONFIGFS_ATTR(, pi_prot_format);
CONFIGFS_ATTR(, pi_prot_verify); CONFIGFS_ATTR(, pi_prot_verify);
CONFIGFS_ATTR(, enforce_pr_isids); CONFIGFS_ATTR(, enforce_pr_isids);
CONFIGFS_ATTR(, is_nonrot); CONFIGFS_ATTR(, is_nonrot);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment