SG: work with the SCSI fixed maximum allocations.

SCSI sg table allocation has a maximum size (of SCSI_MAX_SG_SEGMENTS,
currently 128) and this will cause a BUG_ON() in SCSI if something
tries an allocation over it.  This patch adds a size limit to the
chaining allocator to allow the specification of the maximum
allocation size for chaining, so we always chain in units of the
maximum SCSI allocation size.

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
James Bottomley
2008-01-13 14:15:28 -06:00
committed by Jens Axboe
부모 5ed7959ede
커밋 7cedb1f17f
3개의 변경된 파일35개의 추가작업 그리고 19개의 파일을 삭제

파일 보기

@@ -761,9 +761,11 @@ int scsi_alloc_sgtable(struct scsi_cmnd *cmd, gfp_t gfp_mask)
BUG_ON(!cmd->use_sg);
ret = __sg_alloc_table(&cmd->sg_table, cmd->use_sg, gfp_mask, scsi_sg_alloc);
ret = __sg_alloc_table(&cmd->sg_table, cmd->use_sg,
SCSI_MAX_SG_SEGMENTS, gfp_mask, scsi_sg_alloc);
if (unlikely(ret))
__sg_free_table(&cmd->sg_table, scsi_sg_free);
__sg_free_table(&cmd->sg_table, SCSI_MAX_SG_SEGMENTS,
scsi_sg_free);
cmd->request_buffer = cmd->sg_table.sgl;
return ret;
@@ -773,7 +775,7 @@ EXPORT_SYMBOL(scsi_alloc_sgtable);
void scsi_free_sgtable(struct scsi_cmnd *cmd)
{
__sg_free_table(&cmd->sg_table, scsi_sg_free);
__sg_free_table(&cmd->sg_table, SCSI_MAX_SG_SEGMENTS, scsi_sg_free);
}
EXPORT_SYMBOL(scsi_free_sgtable);