diff --git a/qla2x00t/qla2x00-target/README b/qla2x00t/qla2x00-target/README index fb1b40640..34dafb4d5 100644 --- a/qla2x00t/qla2x00-target/README +++ b/qla2x00t/qla2x00-target/README @@ -110,10 +110,12 @@ https://forums.openfiler.com/viewtopic.php?id=3422. IMPORTANT USAGE NOTES --------------------- -1. It is strongly recommended to use firmware version 5.x or higher -for 24xx/25xx adapters. See +1. It is strongly recommended to use firmware version 5.x or higher for +24xx/25xx adapters. See http://sourceforge.net/mailarchive/forum.php?thread_name=4B4CD39F.6020401%40vlnb.net&forum_name=scst-devel -for more details why. +for more details why. Recent report also suggest that openSUSE ships FW +8.6.0 that leads to severe "scst: TM fn ABORT_TASK/0" errors on the +target side, but using the latest 8.7.0 firmware from QLogic works well. 2. If you reload qla2x00tgt module, you should also reload qla2xxx module, otherwise your initiators could not see the target, when it is diff --git a/scst/include/backport.h b/scst/include/backport.h index 3aeb67771..ee3f172c6 100644 --- a/scst/include/backport.h +++ b/scst/include/backport.h @@ -57,6 +57,7 @@ static inline struct bio_set *bioset_create_backport(unsigned int pool_size, return bioset_create(pool_size, front_pad); } #define bioset_create bioset_create_backport +#define BIOSET_NEED_BVECS 0 #endif /* */ diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index d9a8e7c05..faa3a3781 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -7818,7 +7818,7 @@ static int vdisk_create_bioset(struct scst_vdisk_dev *virt_dev) EXTRACHECKS_BUG_ON(virt_dev->vdisk_bioset || !virt_dev->blockio); /* Pool size doesn't really matter */ - virt_dev->vdisk_bioset = bioset_create(2, 0, 0); + virt_dev->vdisk_bioset = bioset_create(2, 0, BIOSET_NEED_BVECS); if (virt_dev->vdisk_bioset == NULL) { PRINT_ERROR("Failed to create bioset (dev %s)", virt_dev->name); res = -ENOMEM; diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index 17aee5683..a6b83435f 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -7970,6 +7970,10 @@ static struct request *blk_make_request(struct request_queue *q, scsi_req_init(scsi_req(rq)); #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) scsi_req_init(rq); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + rq->cmd_flags = bio_data_dir(bio) == READ ? REQ_OP_SCSI_IN : + REQ_OP_SCSI_OUT; #else blk_rq_set_block_pc(rq); #endif @@ -8146,6 +8150,9 @@ static struct request *__blk_map_kern_sg(struct request_queue *q, */ rq->cmd_type = REQ_TYPE_BLOCK_PC; #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + rq->cmd_flags = reading ? REQ_OP_SCSI_IN : REQ_OP_SCSI_OUT; +#endif if (bw != NULL) { atomic_set(&bw->bios_inflight, bios); @@ -8199,8 +8206,11 @@ static struct request *blk_map_kern_sg(struct request_queue *q, scsi_req_init(scsi_req(rq)); #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) scsi_req_init(rq); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + rq->cmd_flags = reading ? REQ_OP_SCSI_IN : REQ_OP_SCSI_OUT; #else - rq->cmd_type = REQ_TYPE_BLOCK_PC; + blk_rq_set_block_pc(rq); #endif goto out; }