Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb3089df authored by James Bottomley 's avatar James Bottomley Committed by James Bottomley
Browse files

[SCSI] aic7xxx: add back locking



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.

Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent c7525233
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -645,7 +645,9 @@ ahc_linux_slave_alloc(struct scsi_device *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 *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 *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