changes to ieee1394/sbp2 outside of linux1394.org

Stefan Richter
2005-07-09T12:38:09Z

Hi linux-scsi people and linux1394 people,

there are a few changes to sbp2 in linux-2.6.13 (-rc2) that were not
merged back into the linux1394.org repository (and were not tested by
linux1394 maintainers as far as I have heard). Most of these changes
deal with TYPE_RBC devices.

Previous discussion:
- "TYPE_RBC cache fixes (sbp2.c affected)"
http://marc.theaimsgroup.com/?t=111620896500001

- "Problems with Firewire and -mm kernels"
http://marc.theaimsgroup.com/?t=111994463000003
http://marc.theaimsgroup.com/?t=112027470800001
http://marc.theaimsgroup.com/?t=112029841400001

I have one question for now: Is the following part of the diff related
to the TYPE_RBC issue, or is it unrelated? As you can see, locking is
removed from sbp2scsi_complete_command() but added to sbp2scsi_reset():

--- ieee1394_linux1394.org/sbp2.c 2005-07-03 12:29:55.000000000 +0200
+++ linux-2.6.13-rc2/drivers/ieee1394/sbp2.c 2005-07-06 05:46:33.000000000 +0200
@@ -2580,8 +2454,6 @@ static void sbp2scsi_complete_command(st
u32 scsi_status, struct scsi_cmnd *SCpnt,
void (*done)(struct scsi_cmnd *))
{
- unsigned long flags;
-
SBP2_DEBUG("sbp2scsi_complete_command");

/*
@@ -2680,11 +2552,7 @@ static void sbp2scsi_complete_command(st
/*
* Tell scsi stack that we're done with this command
*/
- spin_lock_irqsave(scsi_id->scsi_host->host_lock,flags);
done (SCpnt);
- spin_unlock_irqrestore(scsi_id->scsi_host->host_lock,flags);
-
- return;
}

@@ -2747,7 +2616,7 @@ static int sbp2scsi_abort(struct scsi_cm
/*
* Called by scsi stack when something has really gone wrong.
*/
-static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
+static int __sbp2scsi_reset(struct scsi_cmnd *SCpnt)
{
struct scsi_id_instance_data *scsi_id =
(struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
@@ -2762,6 +2631,18 @@ static int sbp2scsi_reset(struct scsi_cm
return(SUCCESS);
}

+static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
+{
+ unsigned long flags;
+ int rc;
+
+ spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
+ rc = __sbp2scsi_reset(SCpnt);
+ spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
+
+ return rc;
+}
+
static const char *sbp2scsi_info (struct Scsi_Host *host)
{
return "SCSI emulation for IEEE-1394 SBP-2 Devices";

Thanks in advance for clarification.
--
Stefan Richter
-=====-=-=-= -=== -=--=