]> err.no Git - linux-2.6/blobdiff - block/scsi_ioctl.c
ocfs2: ->fallocate() support
[linux-2.6] / block / scsi_ioctl.c
index daded70ffbb1610e3c134a8083254f133747e27f..a26ba07955fee2f3dff02adf911928e828c940f1 100644 (file)
@@ -112,7 +112,7 @@ static int sg_emulated_host(request_queue_t *q, int __user *p)
 #define safe_for_read(cmd)     [cmd] = CMD_READ_SAFE
 #define safe_for_write(cmd)    [cmd] = CMD_WRITE_SAFE
 
-static int verify_command(unsigned char *cmd, int has_write_perm)
+int blk_verify_command(unsigned char *cmd, int has_write_perm)
 {
        static unsigned char cmd_type[256] = {
 
@@ -212,6 +212,7 @@ static int verify_command(unsigned char *cmd, int has_write_perm)
        /* Otherwise fail it with an "Operation not permitted" */
        return -EPERM;
 }
+EXPORT_SYMBOL_GPL(blk_verify_command);
 
 int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,
                      struct sg_io_hdr *hdr, int has_write_perm)
@@ -220,7 +221,7 @@ int blk_fill_sghdr_rq(request_queue_t *q, struct request *rq,
 
        if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len))
                return -EFAULT;
-       if (verify_command(rq->cmd, has_write_perm))
+       if (blk_verify_command(rq->cmd, has_write_perm))
                return -EPERM;
 
        /*
@@ -457,7 +458,7 @@ int sg_scsi_ioctl(struct file *file, struct request_queue *q,
        if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len))
                goto error;
 
-       err = verify_command(rq->cmd, file->f_mode & FMODE_WRITE);
+       err = blk_verify_command(rq->cmd, file->f_mode & FMODE_WRITE);
        if (err)
                goto error;
 
@@ -547,16 +548,12 @@ static inline int blk_send_start_stop(request_queue_t *q, struct gendisk *bd_dis
        return __blk_send_generic(q, bd_disk, GPCMD_START_STOP_UNIT, data);
 }
 
-int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
+int scsi_cmd_ioctl(struct file *file, struct request_queue *q,
+                  struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
 {
-       request_queue_t *q;
        int err;
 
-       q = bd_disk->queue;
-       if (!q)
-               return -ENXIO;
-
-       if (blk_get_queue(q))
+       if (!q || blk_get_queue(q))
                return -ENXIO;
 
        switch (cmd) {