]> err.no Git - linux-2.6/blobdiff - drivers/scsi/scsi_ioctl.c
Merge from Linus' tree.
[linux-2.6] / drivers / scsi / scsi_ioctl.c
index 5f399c9c68ee8165a950f321dd3c74685b50a3e9..de7f98cc38feb020863323b06e4fd6d2e4f426a9 100644 (file)
 
 #define MAX_BUF PAGE_SIZE
 
-/*
- * If we are told to probe a host, we will return 0 if  the host is not
- * present, 1 if the host is present, and will return an identifying
- * string at *arg, if arg is non null, filling to the length stored at
- * (int *) arg
+/**
+ * ioctl_probe  --  return host identification
+ * @host:      host to identify
+ * @buffer:    userspace buffer for identification
+ *
+ * Return an identifying string at @buffer, if @buffer is non-NULL, filling
+ * to the length stored at * (int *) @buffer.
  */
-
 static int ioctl_probe(struct Scsi_Host *host, void __user *buffer)
 {
        unsigned int len, slen;
        const char *string;
-       int temp = host->hostt->present;
 
-       if (temp && buffer) {
+       if (buffer) {
                if (get_user(len, (unsigned int __user *) buffer))
                        return -EFAULT;
 
@@ -59,7 +59,7 @@ static int ioctl_probe(struct Scsi_Host *host, void __user *buffer)
                                return -EFAULT;
                }
        }
-       return temp;
+       return 1;
 }
 
 /*
@@ -90,19 +90,16 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
 {
        int result;
        struct scsi_sense_hdr sshdr;
-       char sense[SCSI_SENSE_BUFFERSIZE];
 
        SCSI_LOG_IOCTL(1, printk("Trying ioctl with scsi command %d\n", *cmd));
 
-
-       memset(sense, 0, sizeof(*sense));
        result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0,
-                                 sense, timeout, retries);
+                                 &sshdr, timeout, retries);
 
        SCSI_LOG_IOCTL(2, printk("Ioctl returned  0x%x\n", result));
 
        if ((driver_byte(result) & DRIVER_SENSE) &&
-           (scsi_normalize_sense(sense, sizeof(*sense), &sshdr))) {
+           (scsi_sense_valid(&sshdr))) {
                switch (sshdr.sense_key) {
                case ILLEGAL_REQUEST:
                        if (cmd[0] == ALLOW_MEDIUM_REMOVAL)
@@ -132,7 +129,7 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
                               sdev->id,
                               sdev->lun,
                               result);
-                       __scsi_print_sense("   ", sense, sizeof(*sense));
+                       scsi_print_sense_hdr("   ", &sshdr);
                        break;
                }
        }
@@ -315,9 +312,9 @@ int scsi_ioctl_send_command(struct scsi_device *sdev,
                break;
        }
 
-       result = scsi_execute_req(sdev, cmd, data_direction, buf, needed,
-                                 sense, timeout, retries);
-                                 
+       result = scsi_execute(sdev, cmd, data_direction, buf, needed,
+                             sense, timeout, retries, 0);
+
        /* 
         * If there was an error condition, pass the info back to the user. 
         */
@@ -461,7 +458,7 @@ int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
         * error processing, as long as the device was opened
         * non-blocking */
        if (filp && filp->f_flags & O_NONBLOCK) {
-               if (sdev->host->shost_state == SHOST_RECOVERY)
+               if (scsi_host_in_recovery(sdev->host))
                        return -ENODEV;
        } else if (!scsi_block_when_processing_errors(sdev))
                return -ENODEV;