mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-19 19:51:27 +00:00
scst: Introduce for_each_sg() in scst_adjust_sg()
Make scst_adjust_sg() slightly easier to read by using for_each_sg() to iterate over the elements of the scatter/gather-list. Signed-off-by: Bart Van Assche <bvanassche@acm.org> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4910 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -2786,41 +2786,38 @@ next:
|
|||||||
static void scst_adjust_sg(struct scst_cmd *cmd, struct scatterlist *sg,
|
static void scst_adjust_sg(struct scst_cmd *cmd, struct scatterlist *sg,
|
||||||
int *sg_cnt, int adjust_len)
|
int *sg_cnt, int adjust_len)
|
||||||
{
|
{
|
||||||
int i, j, l;
|
struct scatterlist *sgi;
|
||||||
|
int i, l;
|
||||||
|
|
||||||
TRACE_ENTRY();
|
TRACE_ENTRY();
|
||||||
|
|
||||||
l = 0;
|
l = 0;
|
||||||
for (i = 0, j = 0; i < *sg_cnt; i++, j++) {
|
for_each_sg(sg, sgi, *sg_cnt, i) {
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24)
|
||||||
TRACE_DBG("i %d, j %d, sg_cnt %d, sg %p, page_link %lx", i, j,
|
TRACE_DBG("i %d, sg_cnt %d, sg %p, page_link %lx", i,
|
||||||
*sg_cnt, sg, sg[j].page_link);
|
*sg_cnt, sg, sgi->page_link);
|
||||||
#else
|
#else
|
||||||
TRACE_DBG("i %d, j %d, sg_cnt %d, sg %p, page_link %lx", i, j,
|
TRACE_DBG("i %d, sg_cnt %d, sg %p, page_link %lx", i,
|
||||||
*sg_cnt, sg, 0UL);
|
*sg_cnt, sg, 0UL);
|
||||||
#endif
|
#endif
|
||||||
if (unlikely(sg_is_chain(&sg[j]))) {
|
l += sgi->length;
|
||||||
sg = sg_chain_ptr(&sg[j]);
|
|
||||||
j = 0;
|
|
||||||
}
|
|
||||||
l += sg[j].length;
|
|
||||||
if (l >= adjust_len) {
|
if (l >= adjust_len) {
|
||||||
int left = adjust_len - (l - sg[j].length);
|
int left = adjust_len - (l - sgi->length);
|
||||||
#ifdef CONFIG_SCST_DEBUG
|
#ifdef CONFIG_SCST_DEBUG
|
||||||
TRACE(TRACE_SG_OP|TRACE_MEMORY, "cmd %p (tag %llu), "
|
TRACE(TRACE_SG_OP|TRACE_MEMORY, "cmd %p (tag %llu), "
|
||||||
"sg %p, sg_cnt %d, adjust_len %d, i %d, j %d, "
|
"sg %p, sg_cnt %d, adjust_len %d, i %d, "
|
||||||
"sg[j].length %d, left %d",
|
"sg[j].length %d, left %d",
|
||||||
cmd, (long long unsigned int)cmd->tag,
|
cmd, (long long unsigned int)cmd->tag,
|
||||||
sg, *sg_cnt, adjust_len, i, j,
|
sg, *sg_cnt, adjust_len, i,
|
||||||
sg[j].length, left);
|
sgi->length, left);
|
||||||
#endif
|
#endif
|
||||||
cmd->p_orig_sg_cnt = sg_cnt;
|
cmd->p_orig_sg_cnt = sg_cnt;
|
||||||
cmd->orig_sg_cnt = *sg_cnt;
|
cmd->orig_sg_cnt = *sg_cnt;
|
||||||
cmd->orig_sg_entry = &sg[j];
|
cmd->orig_sg_entry = sgi;
|
||||||
cmd->orig_entry_offs = sg[j].offset;
|
cmd->orig_entry_offs = sgi->offset;
|
||||||
cmd->orig_entry_len = sg[j].length;
|
cmd->orig_entry_len = sgi->length;
|
||||||
*sg_cnt = (left > 0) ? i+1 : i;
|
*sg_cnt = (left > 0) ? i+1 : i;
|
||||||
sg[j].length = left;
|
sgi->length = left;
|
||||||
cmd->sg_buff_modified = 1;
|
cmd->sg_buff_modified = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user