if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
                unsigned long long end_lba;
 -
 -              if (sectors > dev->dev_attrib.fabric_max_sectors) {
 -                      printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
 -                              " big sectors %u exceeds fabric_max_sectors:"
 -                              " %u\n", cdb[0], sectors,
 -                              dev->dev_attrib.fabric_max_sectors);
 -                      return TCM_INVALID_CDB_FIELD;
 -              }
 -              if (sectors > dev->dev_attrib.hw_max_sectors) {
 -                      printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
 -                              " big sectors %u exceeds backend hw_max_sectors:"
 -                              " %u\n", cdb[0], sectors,
 -                              dev->dev_attrib.hw_max_sectors);
 -                      return TCM_INVALID_CDB_FIELD;
 -              }
  check_lba:
                end_lba = dev->transport->get_blocks(dev) + 1;
-               if (cmd->t_task_lba + sectors > end_lba) {
+               if (((cmd->t_task_lba + sectors) < cmd->t_task_lba) ||
+                   ((cmd->t_task_lba + sectors) > end_lba)) {
                        pr_err("cmd exceeds last lba %llu "
                                "(lba %llu, sectors %u)\n",
                                end_lba, cmd->t_task_lba, sectors);
 
        return 0;
  }
  
- static void tcm_vhost_submission_work(struct work_struct *work)
 +static int vhost_scsi_to_tcm_attr(int attr)
 +{
 +      switch (attr) {
 +      case VIRTIO_SCSI_S_SIMPLE:
 +              return TCM_SIMPLE_TAG;
 +      case VIRTIO_SCSI_S_ORDERED:
 +              return TCM_ORDERED_TAG;
 +      case VIRTIO_SCSI_S_HEAD:
 +              return TCM_HEAD_TAG;
 +      case VIRTIO_SCSI_S_ACA:
 +              return TCM_ACA_TAG;
 +      default:
 +              break;
 +      }
 +      return TCM_SIMPLE_TAG;
 +}
 +
+ static void vhost_scsi_submission_work(struct work_struct *work)
  {
-       struct tcm_vhost_cmd *cmd =
-               container_of(work, struct tcm_vhost_cmd, work);
-       struct tcm_vhost_nexus *tv_nexus;
+       struct vhost_scsi_cmd *cmd =
+               container_of(work, struct vhost_scsi_cmd, work);
+       struct vhost_scsi_nexus *tv_nexus;
        struct se_cmd *se_cmd = &cmd->tvc_se_cmd;
        struct scatterlist *sg_ptr, *sg_prot_ptr = NULL;
        int rc;