diff options
| author | Li Zhong <zhong@linux.vnet.ibm.com> | 2012-09-29 00:23:37 -0400 |
|---|---|---|
| committer | James Bottomley <JBottomley@Parallels.com> | 2012-10-09 07:04:42 -0400 |
| commit | 329a402cb052b233bc92aa34c4caf2f7dfb2d76e (patch) | |
| tree | c58a423318703fc41a61641aef2720d48640f25d /include | |
| parent | 865b58c05b841964f48f574c2027311bd04db8a1 (diff) | |
[SCSI] Shorten the path length of scsi_cmd_to_driver()
This patch tries to shorten the path length of scsi_cmd_to_driver(). As only
REQ_TYPE_BLOCK_PC commands can be submitted without a driver, so we could
avoid the related NULL checking, as long as we make sure we don't use it for
REQ_TYPE_BLOCK_PC type commands. Plus, this fixes a bug where you get
different behaviors from REQ_TYPE_BLOCK_PC commands when a driver is and isn't
attached.
Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index ac06cc595890..de5f5d8f1f8a 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -132,18 +132,10 @@ struct scsi_cmnd { | |||
| 132 | unsigned char tag; /* SCSI-II queued command tag */ | 132 | unsigned char tag; /* SCSI-II queued command tag */ |
| 133 | }; | 133 | }; |
| 134 | 134 | ||
| 135 | /* make sure not to use it with REQ_TYPE_BLOCK_PC commands */ | ||
| 135 | static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd) | 136 | static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd) |
| 136 | { | 137 | { |
| 137 | struct scsi_driver **sdp; | 138 | return *(struct scsi_driver **)cmd->request->rq_disk->private_data; |
| 138 | |||
| 139 | if (!cmd->request->rq_disk) | ||
| 140 | return NULL; | ||
| 141 | |||
| 142 | sdp = (struct scsi_driver **)cmd->request->rq_disk->private_data; | ||
| 143 | if (!sdp) | ||
| 144 | return NULL; | ||
| 145 | |||
| 146 | return *sdp; | ||
| 147 | } | 139 | } |
| 148 | 140 | ||
| 149 | extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); | 141 | extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); |
