Staging: hv: storvsc_drv: move unused functions
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 8 Jan 2010 18:21:58 +0000 (10:21 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 4 Mar 2010 00:42:36 +0000 (16:42 -0800)
Now that the callback pointer was removed, we can remove
the code itself, as it is never used.

Cc: Hank Janssen <hjanssen@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/storvsc_drv.c

index c383962..56c911e 100644 (file)
@@ -39,8 +39,6 @@
 struct host_device_context {
        /* must be 1st field
         * FIXME this is a bug */
-       struct work_struct host_rescan_work;
-
        /* point back to our device context */
        struct device_context *device_ctx;
        struct kmem_cache *request_pool;
@@ -77,8 +75,6 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd,
 static int storvsc_device_alloc(struct scsi_device *);
 static int storvsc_device_configure(struct scsi_device *);
 static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd);
-static void storvsc_host_rescan_callback(struct work_struct *work);
-static void storvsc_host_rescan(struct hv_device *device_obj);
 static int storvsc_remove(struct device *dev);
 
 static struct scatterlist *create_bounce_buffer(struct scatterlist *sgl,
@@ -94,8 +90,6 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl,
                                          struct scatterlist *bounce_sgl,
                                          unsigned int orig_sgl_count);
 
-static int storvsc_report_luns(struct scsi_device *sdev, unsigned int luns[],
-                              unsigned int *lun_count);
 static int storvsc_get_chs(struct scsi_device *sdev, struct block_device *bdev,
                           sector_t capacity, int *info);
 
@@ -265,9 +259,6 @@ static int storvsc_probe(struct device *device)
        host_device_ctx->port = host->host_no;
        host_device_ctx->device_ctx = device_ctx;
 
-       INIT_WORK(&host_device_ctx->host_rescan_work,
-                 storvsc_host_rescan_callback);
-
        host_device_ctx->request_pool =
                                kmem_cache_create(dev_name(&device_ctx->device),
                                        sizeof(struct storvsc_cmd_request) +
@@ -908,201 +899,6 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
        return ret;
 }
 
-/**
- * storvsc_host_rescan - Rescan the scsi HBA
- */
-static void storvsc_host_rescan_callback(struct work_struct *work)
-{
-       struct hv_device *device_obj =
-           &((struct host_device_context *)work)->device_ctx->device_obj;
-       struct device_context *device_ctx = to_device_context(device_obj);
-       struct Scsi_Host *host = dev_get_drvdata(&device_ctx->device);
-       struct scsi_device *sdev;
-       struct host_device_context *host_device_ctx;
-       struct scsi_device **sdevs_remove_list;
-       unsigned int sdevs_count = 0;
-       unsigned int found;
-       unsigned int i;
-       unsigned int lun_count = 0;
-       unsigned int *lun_list;
-
-       DPRINT_ENTER(STORVSC_DRV);
-
-       host_device_ctx = (struct host_device_context *)host->hostdata;
-       lun_list = kcalloc(STORVSC_MAX_LUNS_PER_TARGET, sizeof(unsigned int),
-                          GFP_ATOMIC);
-       if (!lun_list) {
-               DPRINT_ERR(STORVSC_DRV, "unable to allocate lun list");
-               return;
-       }
-
-       sdevs_remove_list = kcalloc(STORVSC_MAX_LUNS_PER_TARGET,
-                                   sizeof(void *), GFP_ATOMIC);
-       if (!sdevs_remove_list) {
-               kfree(lun_list);
-               DPRINT_ERR(STORVSC_DRV, "unable to allocate lun remove list");
-               return;
-       }
-
-       DPRINT_INFO(STORVSC_DRV, "rescanning host for new scsi devices...");
-
-       /* Rescan for new device */
-       scsi_scan_target(&host->shost_gendev, host_device_ctx->path,
-                        host_device_ctx->target, SCAN_WILD_CARD, 1);
-
-       DPRINT_INFO(STORVSC_DRV, "rescanning host for removed scsi device...");
-
-       /* Use the 1st device to send the report luns cmd */
-       shost_for_each_device(sdev, host) {
-               lun_count = STORVSC_MAX_LUNS_PER_TARGET;
-               storvsc_report_luns(sdev, lun_list, &lun_count);
-
-               DPRINT_INFO(STORVSC_DRV,
-                           "report luns on scsi device (%p) found %u luns ",
-                           sdev, lun_count);
-               DPRINT_INFO(STORVSC_DRV,
-                           "existing luns on scsi device (%p) host (%d)",
-                           sdev, host->host_no);
-
-               scsi_device_put(sdev);
-               break;
-       }
-
-       for (i = 0; i < lun_count; i++)
-               DPRINT_INFO(STORVSC_DRV, "%d) lun %u", i, lun_list[i]);
-
-       /* Rescan for devices that may have been removed.
-        * We do not have to worry that new devices may have been added since
-        * this callback is serialized by the workqueue ie add/remove are done
-        * here.
-        */
-       shost_for_each_device(sdev, host) {
-               /* See if this device is still here */
-               found = 0;
-               for (i = 0; i < lun_count; i++) {
-                       if (sdev->lun == lun_list[i]) {
-                               found = 1;
-                               break;
-                       }
-               }
-               if (!found) {
-                       DPRINT_INFO(STORVSC_DRV, "lun (%u) does not exists",
-                                   sdev->lun);
-                       sdevs_remove_list[sdevs_count++] = sdev;
-               }
-       }
-
-       /* Now remove the devices */
-       for (i = 0; i < sdevs_count; i++) {
-               DPRINT_INFO(STORVSC_DRV,
-                           "removing scsi device (%p) lun (%u)...",
-                           sdevs_remove_list[i], sdevs_remove_list[i]->lun);
-
-               /* make sure it is not removed from underneath us */
-               if (!scsi_device_get(sdevs_remove_list[i])) {
-                       scsi_remove_device(sdevs_remove_list[i]);
-                       scsi_device_put(sdevs_remove_list[i]);
-               }
-       }
-
-       DPRINT_INFO(STORVSC_DRV, "rescan completed on dev obj (%p) "
-                   "target (%u) bus (%u)", device_obj,
-                   host_device_ctx->target, host_device_ctx->path);
-
-       kfree(lun_list);
-       kfree(sdevs_remove_list);
-
-       DPRINT_EXIT(STORVSC_DRV);
-}
-
-static int storvsc_report_luns(struct scsi_device *sdev, unsigned int luns[],
-                              unsigned int *lun_count)
-{
-       int i, j;
-       unsigned int lun = 0;
-       unsigned int num_luns;
-       int result;
-       unsigned char *data;
-       struct scsi_sense_hdr sshdr;
-       unsigned char cmd[16] = {0};
-       /* Add 1 to cover the report_lun header */
-       unsigned int report_len = 8 * (STORVSC_MAX_LUNS_PER_TARGET+1);
-       unsigned long long *report_luns;
-       const unsigned int in_lun_count = *lun_count;
-
-       *lun_count = 0;
-
-       report_luns = kzalloc(report_len, GFP_ATOMIC);
-       if (!report_luns)
-               return -ENOMEM;
-
-       cmd[0] = REPORT_LUNS;
-
-       /* cmd length */
-       *(unsigned int *)&cmd[6] = cpu_to_be32(report_len);
-
-       result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE,
-                                 (unsigned char *)report_luns, report_len,
-                                 &sshdr, 30 * HZ, 3, NULL);
-       if (result != 0) {
-               kfree(report_luns);
-               return -EBUSY;
-       }
-
-       /* get the length from the first four bytes */
-       report_len = be32_to_cpu(*(unsigned int *)&report_luns[0]);
-
-       num_luns = (report_len / sizeof(unsigned long long));
-       if (num_luns > in_lun_count) {
-               kfree(report_luns);
-               return -EINVAL;
-       }
-
-       *lun_count = num_luns;
-
-       DPRINT_DBG(STORVSC_DRV,
-                  "report luns on scsi device (%p) found %u luns ",
-                  sdev, num_luns);
-
-       /* lun id starts at 1 */
-       for (i = 1; i < num_luns + 1; i++) {
-               lun = 0;
-               data = (unsigned char *)&report_luns[i];
-               for (j = 0; j < sizeof(lun); j += 2) {
-                       lun = lun | (((data[j] << 8) | data[j + 1]) <<
-                               (j * 8));
-               }
-
-               luns[i-1] = lun;
-       }
-
-       kfree(report_luns);
-       return 0;
-}
-
-static void storvsc_host_rescan(struct hv_device *device_obj)
-{
-       struct device_context *device_ctx = to_device_context(device_obj);
-       struct Scsi_Host *host = dev_get_drvdata(&device_ctx->device);
-       struct host_device_context *host_device_ctx;
-
-       DPRINT_ENTER(STORVSC_DRV);
-
-       host_device_ctx = (struct host_device_context *)host->hostdata;
-
-       DPRINT_INFO(STORVSC_DRV, "initiating rescan on dev obj (%p) "
-                   "target (%u) bus (%u)...", device_obj,
-                   host_device_ctx->target, host_device_ctx->path);
-
-       /*
-        * We need to queue this since the scanning may block and the caller
-        * may be in an intr context
-        */
-       /* scsi_queue_work(host, &host_device_ctx->host_rescan_work); */
-       schedule_work(&host_device_ctx->host_rescan_work);
-       DPRINT_EXIT(STORVSC_DRV);
-}
-
 static int storvsc_get_chs(struct scsi_device *sdev, struct block_device * bdev,
                           sector_t capacity, int *info)
 {