diff options
-rw-r--r-- | drivers/scsi/scsi_lib.c | 11 | ||||
-rw-r--r-- | include/scsi/scsi_cmnd.h | 1 |
2 files changed, 4 insertions, 8 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 1a7e8d811a08..aac8a02cbe80 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -769,10 +769,8 @@ struct scatterlist *scsi_alloc_sgtable(struct scsi_cmnd *cmd, gfp_t gfp_mask) | |||
769 | /* | 769 | /* |
770 | * first loop through, set initial index and return value | 770 | * first loop through, set initial index and return value |
771 | */ | 771 | */ |
772 | if (!ret) { | 772 | if (!ret) |
773 | cmd->sglist_len = index; | ||
774 | ret = sgl; | 773 | ret = sgl; |
775 | } | ||
776 | 774 | ||
777 | /* | 775 | /* |
778 | * chain previous sglist, if any. we know the previous | 776 | * chain previous sglist, if any. we know the previous |
@@ -825,8 +823,6 @@ void scsi_free_sgtable(struct scsi_cmnd *cmd) | |||
825 | struct scatterlist *sgl = cmd->request_buffer; | 823 | struct scatterlist *sgl = cmd->request_buffer; |
826 | struct scsi_host_sg_pool *sgp; | 824 | struct scsi_host_sg_pool *sgp; |
827 | 825 | ||
828 | BUG_ON(cmd->sglist_len >= SG_MEMPOOL_NR); | ||
829 | |||
830 | /* | 826 | /* |
831 | * if this is the biggest size sglist, check if we have | 827 | * if this is the biggest size sglist, check if we have |
832 | * chained parts we need to free | 828 | * chained parts we need to free |
@@ -861,9 +857,10 @@ void scsi_free_sgtable(struct scsi_cmnd *cmd) | |||
861 | * Restore original, will be freed below | 857 | * Restore original, will be freed below |
862 | */ | 858 | */ |
863 | sgl = cmd->request_buffer; | 859 | sgl = cmd->request_buffer; |
864 | } | 860 | sgp = scsi_sg_pools + SG_MEMPOOL_NR - 1; |
861 | } else | ||
862 | sgp = scsi_sg_pools + scsi_sgtable_index(cmd->__use_sg); | ||
865 | 863 | ||
866 | sgp = scsi_sg_pools + cmd->sglist_len; | ||
867 | mempool_free(sgl, sgp->pool); | 864 | mempool_free(sgl, sgp->pool); |
868 | } | 865 | } |
869 | 866 | ||
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 4a5fa2d1c44c..3f47e522a1ec 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -69,7 +69,6 @@ struct scsi_cmnd { | |||
69 | 69 | ||
70 | /* These elements define the operation we ultimately want to perform */ | 70 | /* These elements define the operation we ultimately want to perform */ |
71 | unsigned short use_sg; /* Number of pieces of scatter-gather */ | 71 | unsigned short use_sg; /* Number of pieces of scatter-gather */ |
72 | unsigned short sglist_len; /* size of malloc'd scatter-gather list */ | ||
73 | unsigned short __use_sg; | 72 | unsigned short __use_sg; |
74 | 73 | ||
75 | unsigned underflow; /* Return error if less than | 74 | unsigned underflow; /* Return error if less than |