scsi: docs: convert st.txt to ReST
[linux-2.6-microblaze.git] / drivers / scsi / st.c
index 9e3fff2..2cff8a7 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
    SCSI Tape Driver for Linux version 1.1 and newer. See the accompanying
-   file Documentation/scsi/st.txt for more information.
+   file Documentation/scsi/st.rst for more information.
 
    History:
    Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara.
@@ -3501,7 +3501,7 @@ out:
 
 
 /* The ioctl command */
-static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
+static long st_ioctl_common(struct file *file, unsigned int cmd_in, void __user *p)
 {
        int i, cmd_nr, cmd_type, bt;
        int retval = 0;
@@ -3509,7 +3509,6 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
        struct scsi_tape *STp = file->private_data;
        struct st_modedef *STm;
        struct st_partstat *STps;
-       void __user *p = (void __user *)arg;
 
        if (mutex_lock_interruptible(&STp->lock))
                return -ERESTARTSYS;
@@ -3824,9 +3823,19 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
        }
        mutex_unlock(&STp->lock);
        switch (cmd_in) {
+               case SCSI_IOCTL_STOP_UNIT:
+                       /* unload */
+                       retval = scsi_ioctl(STp->device, cmd_in, p);
+                       if (!retval) {
+                               STp->rew_at_close = 0;
+                               STp->ready = ST_NO_TAPE;
+                       }
+                       return retval;
+
                case SCSI_IOCTL_GET_IDLUN:
                case SCSI_IOCTL_GET_BUS_NUMBER:
                        break;
+
                default:
                        if ((cmd_in == SG_IO ||
                             cmd_in == SCSI_IOCTL_SEND_COMMAND ||
@@ -3840,42 +3849,46 @@ static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
                                return i;
                        break;
        }
-       retval = scsi_ioctl(STp->device, cmd_in, p);
-       if (!retval && cmd_in == SCSI_IOCTL_STOP_UNIT) { /* unload */
-               STp->rew_at_close = 0;
-               STp->ready = ST_NO_TAPE;
-       }
-       return retval;
+       return -ENOTTY;
 
  out:
        mutex_unlock(&STp->lock);
        return retval;
 }
 
+static long st_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
+{
+       void __user *p = (void __user *)arg;
+       struct scsi_tape *STp = file->private_data;
+       int ret;
+
+       ret = st_ioctl_common(file, cmd_in, p);
+       if (ret != -ENOTTY)
+               return ret;
+
+       return scsi_ioctl(STp->device, cmd_in, p);
+}
+
 #ifdef CONFIG_COMPAT
 static long st_compat_ioctl(struct file *file, unsigned int cmd_in, unsigned long arg)
 {
        void __user *p = compat_ptr(arg);
        struct scsi_tape *STp = file->private_data;
-       struct scsi_device *sdev = STp->device;
-       int ret = -ENOIOCTLCMD;
+       int ret;
 
        /* argument conversion is handled using put_user_mtpos/put_user_mtget */
        switch (cmd_in) {
-       case MTIOCTOP:
-               return st_ioctl(file, MTIOCTOP, (unsigned long)p);
        case MTIOCPOS32:
-               return st_ioctl(file, MTIOCPOS, (unsigned long)p);
+               return st_ioctl_common(file, MTIOCPOS, p);
        case MTIOCGET32:
-               return st_ioctl(file, MTIOCGET, (unsigned long)p);
+               return st_ioctl_common(file, MTIOCGET, p);
        }
 
-       if (sdev->host->hostt->compat_ioctl) { 
+       ret = st_ioctl_common(file, cmd_in, p);
+       if (ret != -ENOTTY)
+               return ret;
 
-               ret = sdev->host->hostt->compat_ioctl(sdev, cmd_in, (void __user *)arg);
-
-       }
-       return ret;
+       return scsi_compat_ioctl(STp->device, cmd_in, p);
 }
 #endif