]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/target/target_core_device.c
target: break up free_device callback
[linux.git] / drivers / target / target_core_device.c
index 1f54b397bd57444b7149875cf89138c2c8f039e7..16a701fed66b265d7813f3c4c13d0d1a23be1bfb 100644 (file)
@@ -974,6 +974,8 @@ void target_free_device(struct se_device *dev)
        if (dev->dev_flags & DF_CONFIGURED) {
                destroy_workqueue(dev->tmr_wq);
 
+               dev->transport->destroy_device(dev);
+
                mutex_lock(&g_device_mutex);
                list_del(&dev->g_dev_node);
                mutex_unlock(&g_device_mutex);
@@ -1091,19 +1093,19 @@ passthrough_parse_cdb(struct se_cmd *cmd,
              TRANSPORT_FLAG_PASSTHROUGH_PGR)) {
                if (cdb[0] == PERSISTENT_RESERVE_IN) {
                        cmd->execute_cmd = target_scsi3_emulate_pr_in;
-                       size = (cdb[7] << 8) + cdb[8];
+                       size = get_unaligned_be16(&cdb[7]);
                        return target_cmd_size_check(cmd, size);
                }
                if (cdb[0] == PERSISTENT_RESERVE_OUT) {
                        cmd->execute_cmd = target_scsi3_emulate_pr_out;
-                       size = (cdb[7] << 8) + cdb[8];
+                       size = get_unaligned_be16(&cdb[7]);
                        return target_cmd_size_check(cmd, size);
                }
 
                if (cdb[0] == RELEASE || cdb[0] == RELEASE_10) {
                        cmd->execute_cmd = target_scsi2_reservation_release;
                        if (cdb[0] == RELEASE_10)
-                               size = (cdb[7] << 8) | cdb[8];
+                               size = get_unaligned_be16(&cdb[7]);
                        else
                                size = cmd->data_length;
                        return target_cmd_size_check(cmd, size);
@@ -1111,7 +1113,7 @@ passthrough_parse_cdb(struct se_cmd *cmd,
                if (cdb[0] == RESERVE || cdb[0] == RESERVE_10) {
                        cmd->execute_cmd = target_scsi2_reservation_reserve;
                        if (cdb[0] == RESERVE_10)
-                               size = (cdb[7] << 8) | cdb[8];
+                               size = get_unaligned_be16(&cdb[7]);
                        else
                                size = cmd->data_length;
                        return target_cmd_size_check(cmd, size);