Commit 635d98b1d0cfc2ba3426a701725d31a6102c059a
1 parent
e6c11dbb8d
scsi: move the nr_phys_segments assert into scsi_init_io
scsi_init_io should only be called for requests that transfer data, so move the assert that a request has segments from the callers into scsi_init_io. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.de>
Showing 1 changed file with 5 additions and 11 deletions Side-by-side Diff
drivers/scsi/scsi_lib.c
... | ... | @@ -963,8 +963,11 @@ |
963 | 963 | { |
964 | 964 | struct scsi_device *sdev = cmd->device; |
965 | 965 | struct request *rq = cmd->request; |
966 | + int error; | |
966 | 967 | |
967 | - int error = scsi_init_sgtable(rq, &cmd->sdb, gfp_mask); | |
968 | + BUG_ON(!rq->nr_phys_segments); | |
969 | + | |
970 | + error = scsi_init_sgtable(rq, &cmd->sdb, gfp_mask); | |
968 | 971 | if (error) |
969 | 972 | goto err_exit; |
970 | 973 | |
... | ... | @@ -1055,11 +1058,7 @@ |
1055 | 1058 | * submit a request without an attached bio. |
1056 | 1059 | */ |
1057 | 1060 | if (req->bio) { |
1058 | - int ret; | |
1059 | - | |
1060 | - BUG_ON(!req->nr_phys_segments); | |
1061 | - | |
1062 | - ret = scsi_init_io(cmd, GFP_ATOMIC); | |
1061 | + int ret = scsi_init_io(cmd, GFP_ATOMIC); | |
1063 | 1062 | if (unlikely(ret)) |
1064 | 1063 | return ret; |
1065 | 1064 | } else { |
... | ... | @@ -1097,11 +1096,6 @@ |
1097 | 1096 | if (ret != BLKPREP_OK) |
1098 | 1097 | return ret; |
1099 | 1098 | } |
1100 | - | |
1101 | - /* | |
1102 | - * Filesystem requests must transfer data. | |
1103 | - */ | |
1104 | - BUG_ON(!req->nr_phys_segments); | |
1105 | 1099 | |
1106 | 1100 | memset(cmd->cmnd, 0, BLK_MAX_CDB); |
1107 | 1101 | return scsi_init_io(cmd, GFP_ATOMIC); |