[PATCH] aic7xxx: add back locking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tampering with the settings has to be done under the host lock ...
slave_alloc isn't called under any lock, so this has to be done
explicitly.

James

--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -645,7 +645,9 @@ ahc_linux_slave_alloc(struct scsi_device
 	struct ahc_linux_target *targ;
 	struct scsi_target *starget = device->sdev_target;
 	struct ahc_linux_device *dev;
-	u_int target_offset;
+	unsigned int target_offset;
+	unsigned long flags;
+	int retval = -ENOMEM;
 
 	target_offset = starget->id;
 	if (starget->channel != 0)
@@ -654,12 +656,14 @@ ahc_linux_slave_alloc(struct scsi_device
 	ahc = *((struct ahc_softc **)device->host->hostdata);
 	if (bootverbose)
 		printf("%s: Slave Alloc %d\n", ahc_name(ahc), device->id);
+	ahc_lock(ahc, &flags);
 	targ = ahc->platform_data->targets[target_offset];
 	if (targ == NULL) {
 		targ = ahc_linux_alloc_target(ahc, starget->channel, starget->id);
 		struct seeprom_config *sc = ahc->seep_config;
 		if (targ == NULL)
-			return -ENOMEM;
+			goto out;
+
 		if (sc) {
 			unsigned short scsirate;
 			struct ahc_devinfo devinfo;
@@ -701,10 +705,13 @@ ahc_linux_slave_alloc(struct scsi_device
 	if (dev == NULL) {
 		dev = ahc_linux_alloc_device(ahc, targ, device->lun);
 		if (dev == NULL)
-			return -ENOMEM;
+			goto out;
 	}
+	retval = 0;
 
-	return 0;
+ out:
+	ahc_unlock(ahc, &flags);
+	return retval;
 }
 
 static int


-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux