aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/i2o
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/message/i2o
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'drivers/message/i2o')
-rw-r--r--drivers/message/i2o/README2
-rw-r--r--drivers/message/i2o/README.ioctl2
-rw-r--r--drivers/message/i2o/device.c8
-rw-r--r--drivers/message/i2o/driver.c3
-rw-r--r--drivers/message/i2o/i2o_block.c37
-rw-r--r--drivers/message/i2o/i2o_block.h2
-rw-r--r--drivers/message/i2o/i2o_config.c26
-rw-r--r--drivers/message/i2o/i2o_scsi.c12
8 files changed, 47 insertions, 45 deletions
diff --git a/drivers/message/i2o/README b/drivers/message/i2o/README
index 911fc3021e3b..f072a8eb3041 100644
--- a/drivers/message/i2o/README
+++ b/drivers/message/i2o/README
@@ -53,7 +53,7 @@ Symbios Logic (Now LSI)
53BoxHill Corporation 53BoxHill Corporation
54 Loan of initial FibreChannel disk array used for development work. 54 Loan of initial FibreChannel disk array used for development work.
55 55
56European Comission 56European Commission
57 Funding the work done by the University of Helsinki 57 Funding the work done by the University of Helsinki
58 58
59SysKonnect 59SysKonnect
diff --git a/drivers/message/i2o/README.ioctl b/drivers/message/i2o/README.ioctl
index 65c0c47aeb79..5fb195af43e2 100644
--- a/drivers/message/i2o/README.ioctl
+++ b/drivers/message/i2o/README.ioctl
@@ -110,7 +110,7 @@ V. Getting Logical Configuration Table
110 ENOBUFS Buffer not large enough. If this occurs, the required 110 ENOBUFS Buffer not large enough. If this occurs, the required
111 buffer length is written into *(lct->reslen) 111 buffer length is written into *(lct->reslen)
112 112
113VI. Settting Parameters 113VI. Setting Parameters
114 114
115 SYNOPSIS 115 SYNOPSIS
116 116
diff --git a/drivers/message/i2o/device.c b/drivers/message/i2o/device.c
index 0ee4264f5db7..4547db99f7da 100644
--- a/drivers/message/i2o/device.c
+++ b/drivers/message/i2o/device.c
@@ -65,7 +65,7 @@ int i2o_device_claim(struct i2o_device *dev)
65 65
66 rc = i2o_device_issue_claim(dev, I2O_CMD_UTIL_CLAIM, I2O_CLAIM_PRIMARY); 66 rc = i2o_device_issue_claim(dev, I2O_CMD_UTIL_CLAIM, I2O_CLAIM_PRIMARY);
67 if (!rc) 67 if (!rc)
68 pr_debug("i2o: claim of device %d succeded\n", 68 pr_debug("i2o: claim of device %d succeeded\n",
69 dev->lct_data.tid); 69 dev->lct_data.tid);
70 else 70 else
71 pr_debug("i2o: claim of device %d failed %d\n", 71 pr_debug("i2o: claim of device %d failed %d\n",
@@ -110,7 +110,7 @@ int i2o_device_claim_release(struct i2o_device *dev)
110 } 110 }
111 111
112 if (!rc) 112 if (!rc)
113 pr_debug("i2o: claim release of device %d succeded\n", 113 pr_debug("i2o: claim release of device %d succeeded\n",
114 dev->lct_data.tid); 114 dev->lct_data.tid);
115 else 115 else
116 pr_debug("i2o: claim release of device %d failed %d\n", 116 pr_debug("i2o: claim release of device %d failed %d\n",
@@ -248,7 +248,7 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
248 goto unreg_dev; 248 goto unreg_dev;
249 } 249 }
250 250
251 /* create user entries refering to this device */ 251 /* create user entries referring to this device */
252 list_for_each_entry(tmp, &c->devices, list) 252 list_for_each_entry(tmp, &c->devices, list)
253 if ((tmp->lct_data.user_tid == i2o_dev->lct_data.tid) 253 if ((tmp->lct_data.user_tid == i2o_dev->lct_data.tid)
254 && (tmp != i2o_dev)) { 254 && (tmp != i2o_dev)) {
@@ -267,7 +267,7 @@ static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry)
267 goto rmlink1; 267 goto rmlink1;
268 } 268 }
269 269
270 /* create parent entries refering to this device */ 270 /* create parent entries referring to this device */
271 list_for_each_entry(tmp, &c->devices, list) 271 list_for_each_entry(tmp, &c->devices, list)
272 if ((tmp->lct_data.parent_tid == i2o_dev->lct_data.tid) 272 if ((tmp->lct_data.parent_tid == i2o_dev->lct_data.tid)
273 && (tmp != i2o_dev)) { 273 && (tmp != i2o_dev)) {
diff --git a/drivers/message/i2o/driver.c b/drivers/message/i2o/driver.c
index a0421efe04ca..8a5b2d8f4daf 100644
--- a/drivers/message/i2o/driver.c
+++ b/drivers/message/i2o/driver.c
@@ -84,7 +84,8 @@ int i2o_driver_register(struct i2o_driver *drv)
84 osm_debug("Register driver %s\n", drv->name); 84 osm_debug("Register driver %s\n", drv->name);
85 85
86 if (drv->event) { 86 if (drv->event) {
87 drv->event_queue = create_workqueue(drv->name); 87 drv->event_queue = alloc_workqueue(drv->name,
88 WQ_MEM_RECLAIM, 1);
88 if (!drv->event_queue) { 89 if (!drv->event_queue) {
89 osm_err("Could not initialize event queue for driver " 90 osm_err("Could not initialize event queue for driver "
90 "%s\n", drv->name); 91 "%s\n", drv->name);
diff --git a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c
index f0f1e667000f..4796bbf0ae4e 100644
--- a/drivers/message/i2o/i2o_block.c
+++ b/drivers/message/i2o/i2o_block.c
@@ -53,7 +53,7 @@
53#include <linux/module.h> 53#include <linux/module.h>
54#include <linux/slab.h> 54#include <linux/slab.h>
55#include <linux/i2o.h> 55#include <linux/i2o.h>
56#include <linux/smp_lock.h> 56#include <linux/mutex.h>
57 57
58#include <linux/mempool.h> 58#include <linux/mempool.h>
59 59
@@ -69,6 +69,7 @@
69#define OSM_VERSION "1.325" 69#define OSM_VERSION "1.325"
70#define OSM_DESCRIPTION "I2O Block Device OSM" 70#define OSM_DESCRIPTION "I2O Block Device OSM"
71 71
72static DEFINE_MUTEX(i2o_block_mutex);
72static struct i2o_driver i2o_block_driver; 73static struct i2o_driver i2o_block_driver;
73 74
74/* global Block OSM request mempool */ 75/* global Block OSM request mempool */
@@ -308,7 +309,7 @@ static inline void i2o_block_request_free(struct i2o_block_request *ireq)
308 * @ireq: I2O block request 309 * @ireq: I2O block request
309 * @mptr: message body pointer 310 * @mptr: message body pointer
310 * 311 *
311 * Builds the SG list and map it to be accessable by the controller. 312 * Builds the SG list and map it to be accessible by the controller.
312 * 313 *
313 * Returns 0 on failure or 1 on success. 314 * Returns 0 on failure or 1 on success.
314 */ 315 */
@@ -578,7 +579,7 @@ static int i2o_block_open(struct block_device *bdev, fmode_t mode)
578 if (!dev->i2o_dev) 579 if (!dev->i2o_dev)
579 return -ENODEV; 580 return -ENODEV;
580 581
581 lock_kernel(); 582 mutex_lock(&i2o_block_mutex);
582 if (dev->power > 0x1f) 583 if (dev->power > 0x1f)
583 i2o_block_device_power(dev, 0x02); 584 i2o_block_device_power(dev, 0x02);
584 585
@@ -587,7 +588,7 @@ static int i2o_block_open(struct block_device *bdev, fmode_t mode)
587 i2o_block_device_lock(dev->i2o_dev, -1); 588 i2o_block_device_lock(dev->i2o_dev, -1);
588 589
589 osm_debug("Ready.\n"); 590 osm_debug("Ready.\n");
590 unlock_kernel(); 591 mutex_unlock(&i2o_block_mutex);
591 592
592 return 0; 593 return 0;
593}; 594};
@@ -609,7 +610,7 @@ static int i2o_block_release(struct gendisk *disk, fmode_t mode)
609 610
610 /* 611 /*
611 * This is to deail with the case of an application 612 * This is to deail with the case of an application
612 * opening a device and then the device dissapears while 613 * opening a device and then the device disappears while
613 * it's in use, and then the application tries to release 614 * it's in use, and then the application tries to release
614 * it. ex: Unmounting a deleted RAID volume at reboot. 615 * it. ex: Unmounting a deleted RAID volume at reboot.
615 * If we send messages, it will just cause FAILs since 616 * If we send messages, it will just cause FAILs since
@@ -618,7 +619,7 @@ static int i2o_block_release(struct gendisk *disk, fmode_t mode)
618 if (!dev->i2o_dev) 619 if (!dev->i2o_dev)
619 return 0; 620 return 0;
620 621
621 lock_kernel(); 622 mutex_lock(&i2o_block_mutex);
622 i2o_block_device_flush(dev->i2o_dev); 623 i2o_block_device_flush(dev->i2o_dev);
623 624
624 i2o_block_device_unlock(dev->i2o_dev, -1); 625 i2o_block_device_unlock(dev->i2o_dev, -1);
@@ -629,7 +630,7 @@ static int i2o_block_release(struct gendisk *disk, fmode_t mode)
629 operation = 0x24; 630 operation = 0x24;
630 631
631 i2o_block_device_power(dev, operation); 632 i2o_block_device_power(dev, operation);
632 unlock_kernel(); 633 mutex_unlock(&i2o_block_mutex);
633 634
634 return 0; 635 return 0;
635} 636}
@@ -664,7 +665,7 @@ static int i2o_block_ioctl(struct block_device *bdev, fmode_t mode,
664 if (!capable(CAP_SYS_ADMIN)) 665 if (!capable(CAP_SYS_ADMIN))
665 return -EPERM; 666 return -EPERM;
666 667
667 lock_kernel(); 668 mutex_lock(&i2o_block_mutex);
668 switch (cmd) { 669 switch (cmd) {
669 case BLKI2OGRSTRAT: 670 case BLKI2OGRSTRAT:
670 ret = put_user(dev->rcache, (int __user *)arg); 671 ret = put_user(dev->rcache, (int __user *)arg);
@@ -688,33 +689,35 @@ static int i2o_block_ioctl(struct block_device *bdev, fmode_t mode,
688 ret = 0; 689 ret = 0;
689 break; 690 break;
690 } 691 }
691 unlock_kernel(); 692 mutex_unlock(&i2o_block_mutex);
692 693
693 return ret; 694 return ret;
694}; 695};
695 696
696/** 697/**
697 * i2o_block_media_changed - Have we seen a media change? 698 * i2o_block_check_events - Have we seen a media change?
698 * @disk: gendisk which should be verified 699 * @disk: gendisk which should be verified
700 * @clearing: events being cleared
699 * 701 *
700 * Verifies if the media has changed. 702 * Verifies if the media has changed.
701 * 703 *
702 * Returns 1 if the media was changed or 0 otherwise. 704 * Returns 1 if the media was changed or 0 otherwise.
703 */ 705 */
704static int i2o_block_media_changed(struct gendisk *disk) 706static unsigned int i2o_block_check_events(struct gendisk *disk,
707 unsigned int clearing)
705{ 708{
706 struct i2o_block_device *p = disk->private_data; 709 struct i2o_block_device *p = disk->private_data;
707 710
708 if (p->media_change_flag) { 711 if (p->media_change_flag) {
709 p->media_change_flag = 0; 712 p->media_change_flag = 0;
710 return 1; 713 return DISK_EVENT_MEDIA_CHANGE;
711 } 714 }
712 return 0; 715 return 0;
713} 716}
714 717
715/** 718/**
716 * i2o_block_transfer - Transfer a request to/from the I2O controller 719 * i2o_block_transfer - Transfer a request to/from the I2O controller
717 * @req: the request which should be transfered 720 * @req: the request which should be transferred
718 * 721 *
719 * This function converts the request into a I2O message. The necessary 722 * This function converts the request into a I2O message. The necessary
720 * DMA buffers are allocated and after everything is setup post the message 723 * DMA buffers are allocated and after everything is setup post the message
@@ -894,11 +897,7 @@ static void i2o_block_request_fn(struct request_queue *q)
894{ 897{
895 struct request *req; 898 struct request *req;
896 899
897 while (!blk_queue_plugged(q)) { 900 while ((req = blk_peek_request(q)) != NULL) {
898 req = blk_peek_request(q);
899 if (!req)
900 break;
901
902 if (req->cmd_type == REQ_TYPE_FS) { 901 if (req->cmd_type == REQ_TYPE_FS) {
903 struct i2o_block_delayed_request *dreq; 902 struct i2o_block_delayed_request *dreq;
904 struct i2o_block_request *ireq = req->special; 903 struct i2o_block_request *ireq = req->special;
@@ -949,7 +948,7 @@ static const struct block_device_operations i2o_block_fops = {
949 .ioctl = i2o_block_ioctl, 948 .ioctl = i2o_block_ioctl,
950 .compat_ioctl = i2o_block_ioctl, 949 .compat_ioctl = i2o_block_ioctl,
951 .getgeo = i2o_block_getgeo, 950 .getgeo = i2o_block_getgeo,
952 .media_changed = i2o_block_media_changed 951 .check_events = i2o_block_check_events,
953}; 952};
954 953
955/** 954/**
diff --git a/drivers/message/i2o/i2o_block.h b/drivers/message/i2o/i2o_block.h
index 67f921b4419b..cf8873cbca3f 100644
--- a/drivers/message/i2o/i2o_block.h
+++ b/drivers/message/i2o/i2o_block.h
@@ -73,7 +73,7 @@ struct i2o_block_device {
73 struct i2o_device *i2o_dev; /* pointer to I2O device */ 73 struct i2o_device *i2o_dev; /* pointer to I2O device */
74 struct gendisk *gd; 74 struct gendisk *gd;
75 spinlock_t lock; /* queue lock */ 75 spinlock_t lock; /* queue lock */
76 struct list_head open_queue; /* list of transfered, but unfinished 76 struct list_head open_queue; /* list of transferred, but unfinished
77 requests */ 77 requests */
78 unsigned int open_queue_depth; /* number of requests in the queue */ 78 unsigned int open_queue_depth; /* number of requests in the queue */
79 79
diff --git a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c
index 068ba0785bb4..098de2b35784 100644
--- a/drivers/message/i2o/i2o_config.c
+++ b/drivers/message/i2o/i2o_config.c
@@ -31,7 +31,7 @@
31 */ 31 */
32 32
33#include <linux/miscdevice.h> 33#include <linux/miscdevice.h>
34#include <linux/smp_lock.h> 34#include <linux/mutex.h>
35#include <linux/compat.h> 35#include <linux/compat.h>
36#include <linux/slab.h> 36#include <linux/slab.h>
37 37
@@ -41,6 +41,7 @@
41 41
42#define SG_TABLESIZE 30 42#define SG_TABLESIZE 30
43 43
44static DEFINE_MUTEX(i2o_cfg_mutex);
44static long i2o_cfg_ioctl(struct file *, unsigned int, unsigned long); 45static long i2o_cfg_ioctl(struct file *, unsigned int, unsigned long);
45 46
46static spinlock_t i2o_config_lock; 47static spinlock_t i2o_config_lock;
@@ -741,7 +742,7 @@ static long i2o_cfg_compat_ioctl(struct file *file, unsigned cmd,
741 unsigned long arg) 742 unsigned long arg)
742{ 743{
743 int ret; 744 int ret;
744 lock_kernel(); 745 mutex_lock(&i2o_cfg_mutex);
745 switch (cmd) { 746 switch (cmd) {
746 case I2OGETIOPS: 747 case I2OGETIOPS:
747 ret = i2o_cfg_ioctl(file, cmd, arg); 748 ret = i2o_cfg_ioctl(file, cmd, arg);
@@ -753,7 +754,7 @@ static long i2o_cfg_compat_ioctl(struct file *file, unsigned cmd,
753 ret = -ENOIOCTLCMD; 754 ret = -ENOIOCTLCMD;
754 break; 755 break;
755 } 756 }
756 unlock_kernel(); 757 mutex_unlock(&i2o_cfg_mutex);
757 return ret; 758 return ret;
758} 759}
759 760
@@ -981,7 +982,7 @@ static long i2o_cfg_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
981{ 982{
982 int ret; 983 int ret;
983 984
984 lock_kernel(); 985 mutex_lock(&i2o_cfg_mutex);
985 switch (cmd) { 986 switch (cmd) {
986 case I2OGETIOPS: 987 case I2OGETIOPS:
987 ret = i2o_cfg_getiops(arg); 988 ret = i2o_cfg_getiops(arg);
@@ -1037,21 +1038,20 @@ static long i2o_cfg_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
1037 osm_debug("unknown ioctl called!\n"); 1038 osm_debug("unknown ioctl called!\n");
1038 ret = -EINVAL; 1039 ret = -EINVAL;
1039 } 1040 }
1040 unlock_kernel(); 1041 mutex_unlock(&i2o_cfg_mutex);
1041 return ret; 1042 return ret;
1042} 1043}
1043 1044
1044static int cfg_open(struct inode *inode, struct file *file) 1045static int cfg_open(struct inode *inode, struct file *file)
1045{ 1046{
1046 struct i2o_cfg_info *tmp = 1047 struct i2o_cfg_info *tmp = kmalloc(sizeof(struct i2o_cfg_info),
1047 (struct i2o_cfg_info *)kmalloc(sizeof(struct i2o_cfg_info),
1048 GFP_KERNEL); 1048 GFP_KERNEL);
1049 unsigned long flags; 1049 unsigned long flags;
1050 1050
1051 if (!tmp) 1051 if (!tmp)
1052 return -ENOMEM; 1052 return -ENOMEM;
1053 1053
1054 lock_kernel(); 1054 mutex_lock(&i2o_cfg_mutex);
1055 file->private_data = (void *)(i2o_cfg_info_id++); 1055 file->private_data = (void *)(i2o_cfg_info_id++);
1056 tmp->fp = file; 1056 tmp->fp = file;
1057 tmp->fasync = NULL; 1057 tmp->fasync = NULL;
@@ -1065,7 +1065,7 @@ static int cfg_open(struct inode *inode, struct file *file)
1065 spin_lock_irqsave(&i2o_config_lock, flags); 1065 spin_lock_irqsave(&i2o_config_lock, flags);
1066 open_files = tmp; 1066 open_files = tmp;
1067 spin_unlock_irqrestore(&i2o_config_lock, flags); 1067 spin_unlock_irqrestore(&i2o_config_lock, flags);
1068 unlock_kernel(); 1068 mutex_unlock(&i2o_cfg_mutex);
1069 1069
1070 return 0; 1070 return 0;
1071} 1071}
@@ -1076,14 +1076,14 @@ static int cfg_fasync(int fd, struct file *fp, int on)
1076 struct i2o_cfg_info *p; 1076 struct i2o_cfg_info *p;
1077 int ret = -EBADF; 1077 int ret = -EBADF;
1078 1078
1079 lock_kernel(); 1079 mutex_lock(&i2o_cfg_mutex);
1080 for (p = open_files; p; p = p->next) 1080 for (p = open_files; p; p = p->next)
1081 if (p->q_id == id) 1081 if (p->q_id == id)
1082 break; 1082 break;
1083 1083
1084 if (p) 1084 if (p)
1085 ret = fasync_helper(fd, fp, on, &p->fasync); 1085 ret = fasync_helper(fd, fp, on, &p->fasync);
1086 unlock_kernel(); 1086 mutex_unlock(&i2o_cfg_mutex);
1087 return ret; 1087 return ret;
1088} 1088}
1089 1089
@@ -1093,7 +1093,7 @@ static int cfg_release(struct inode *inode, struct file *file)
1093 struct i2o_cfg_info *p, **q; 1093 struct i2o_cfg_info *p, **q;
1094 unsigned long flags; 1094 unsigned long flags;
1095 1095
1096 lock_kernel(); 1096 mutex_lock(&i2o_cfg_mutex);
1097 spin_lock_irqsave(&i2o_config_lock, flags); 1097 spin_lock_irqsave(&i2o_config_lock, flags);
1098 for (q = &open_files; (p = *q) != NULL; q = &p->next) { 1098 for (q = &open_files; (p = *q) != NULL; q = &p->next) {
1099 if (p->q_id == id) { 1099 if (p->q_id == id) {
@@ -1103,7 +1103,7 @@ static int cfg_release(struct inode *inode, struct file *file)
1103 } 1103 }
1104 } 1104 }
1105 spin_unlock_irqrestore(&i2o_config_lock, flags); 1105 spin_unlock_irqrestore(&i2o_config_lock, flags);
1106 unlock_kernel(); 1106 mutex_unlock(&i2o_cfg_mutex);
1107 1107
1108 return 0; 1108 return 0;
1109} 1109}
diff --git a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c
index ea6b2197da8a..74fbe56321ff 100644
--- a/drivers/message/i2o/i2o_scsi.c
+++ b/drivers/message/i2o/i2o_scsi.c
@@ -204,7 +204,7 @@ static int i2o_scsi_remove(struct device *dev)
204 * i2o_scsi_probe - verify if dev is a I2O SCSI device and install it 204 * i2o_scsi_probe - verify if dev is a I2O SCSI device and install it
205 * @dev: device to verify if it is a I2O SCSI device 205 * @dev: device to verify if it is a I2O SCSI device
206 * 206 *
207 * Retrieve channel, id and lun for I2O device. If everthing goes well 207 * Retrieve channel, id and lun for I2O device. If everything goes well
208 * register the I2O device as SCSI device on the I2O SCSI controller. 208 * register the I2O device as SCSI device on the I2O SCSI controller.
209 * 209 *
210 * Returns 0 on success or negative error code on failure. 210 * Returns 0 on success or negative error code on failure.
@@ -361,7 +361,7 @@ static int i2o_scsi_reply(struct i2o_controller *c, u32 m,
361 */ 361 */
362 error = le32_to_cpu(msg->body[0]); 362 error = le32_to_cpu(msg->body[0]);
363 363
364 osm_debug("Completed %ld\n", cmd->serial_number); 364 osm_debug("Completed %0x%p\n", cmd);
365 365
366 cmd->result = error & 0xff; 366 cmd->result = error & 0xff;
367 /* 367 /*
@@ -506,7 +506,7 @@ static struct i2o_driver i2o_scsi_driver = {
506 * Locks: takes the controller lock on error path only 506 * Locks: takes the controller lock on error path only
507 */ 507 */
508 508
509static int i2o_scsi_queuecommand(struct scsi_cmnd *SCpnt, 509static int i2o_scsi_queuecommand_lck(struct scsi_cmnd *SCpnt,
510 void (*done) (struct scsi_cmnd *)) 510 void (*done) (struct scsi_cmnd *))
511{ 511{
512 struct i2o_controller *c; 512 struct i2o_controller *c;
@@ -678,7 +678,7 @@ static int i2o_scsi_queuecommand(struct scsi_cmnd *SCpnt,
678 /* Queue the message */ 678 /* Queue the message */
679 i2o_msg_post(c, msg); 679 i2o_msg_post(c, msg);
680 680
681 osm_debug("Issued %ld\n", SCpnt->serial_number); 681 osm_debug("Issued %0x%p\n", SCpnt);
682 682
683 return 0; 683 return 0;
684 684
@@ -688,7 +688,9 @@ static int i2o_scsi_queuecommand(struct scsi_cmnd *SCpnt,
688 688
689 exit: 689 exit:
690 return rc; 690 return rc;
691}; 691}
692
693static DEF_SCSI_QCMD(i2o_scsi_queuecommand)
692 694
693/** 695/**
694 * i2o_scsi_abort - abort a running command 696 * i2o_scsi_abort - abort a running command