From c8570a068e28dc92c5c59c2847ce7234e77df7c1 Mon Sep 17 00:00:00 2001 From: James Bottomley Date: Mon, 23 Jun 2008 14:52:09 -0500 Subject: [PATCH] --- yaml --- r: 98599 b: refs/heads/master c: ec5e69f6d3f4350681d6f7eaae515cf014be9276 h: refs/heads/master i: 98597: d01a644eec08a6e85fa177b906acf57783ef945c 98595: 746ef0ceb920ac2b708ecec204bc3eee00c80ea1 98591: cd2a8d4b2557a98acc83dea4090304a9375315a3 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/esp_scsi.c | 30 ++++++++++++++++++++---------- trunk/drivers/scsi/esp_scsi.h | 1 - 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 59d96a4e08d9..4e7992731692 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: eadc49b1a8d09480f14caea292142f103a89c77a +refs/heads/master: ec5e69f6d3f4350681d6f7eaae515cf014be9276 diff --git a/trunk/drivers/scsi/esp_scsi.c b/trunk/drivers/scsi/esp_scsi.c index 305eddef5ca1..59fbef08d690 100644 --- a/trunk/drivers/scsi/esp_scsi.c +++ b/trunk/drivers/scsi/esp_scsi.c @@ -2359,6 +2359,24 @@ void scsi_esp_unregister(struct esp *esp) } EXPORT_SYMBOL(scsi_esp_unregister); +static int esp_target_alloc(struct scsi_target *starget) +{ + struct esp *esp = shost_priv(dev_to_shost(&starget->dev)); + struct esp_target_data *tp = &esp->target[starget->id]; + + tp->starget = starget; + + return 0; +} + +static void esp_target_destroy(struct scsi_target *starget) +{ + struct esp *esp = shost_priv(dev_to_shost(&starget->dev)); + struct esp_target_data *tp = &esp->target[starget->id]; + + tp->starget = NULL; +} + static int esp_slave_alloc(struct scsi_device *dev) { struct esp *esp = shost_priv(dev->host); @@ -2370,9 +2388,6 @@ static int esp_slave_alloc(struct scsi_device *dev) return -ENOMEM; dev->hostdata = lp; - tp->starget = dev->sdev_target; - tp->starget_ref++; - spi_min_period(tp->starget) = esp->min_period; spi_max_offset(tp->starget) = 15; @@ -2426,17 +2441,10 @@ static int esp_slave_configure(struct scsi_device *dev) static void esp_slave_destroy(struct scsi_device *dev) { - struct esp *esp = shost_priv(dev->host); - struct esp_target_data *tp = &esp->target[dev->id]; struct esp_lun_data *lp = dev->hostdata; kfree(lp); dev->hostdata = NULL; - - BUG_ON(tp->starget_ref <= 0); - - if (!--tp->starget_ref) - tp->starget = NULL; } static int esp_eh_abort_handler(struct scsi_cmnd *cmd) @@ -2616,6 +2624,8 @@ struct scsi_host_template scsi_esp_template = { .name = "esp", .info = esp_info, .queuecommand = esp_queuecommand, + .target_alloc = esp_target_alloc, + .target_destroy = esp_target_destroy, .slave_alloc = esp_slave_alloc, .slave_configure = esp_slave_configure, .slave_destroy = esp_slave_destroy, diff --git a/trunk/drivers/scsi/esp_scsi.h b/trunk/drivers/scsi/esp_scsi.h index 655e0b2240bf..bb43a1388188 100644 --- a/trunk/drivers/scsi/esp_scsi.h +++ b/trunk/drivers/scsi/esp_scsi.h @@ -322,7 +322,6 @@ struct esp_target_data { u8 nego_goal_tags; struct scsi_target *starget; - int starget_ref; }; struct esp_event_ent {