Skip to content

Commit

Permalink
scatterlist: introduce sg_unmark_end
Browse files Browse the repository at this point in the history
This is useful in places that recycle the same scatterlist multiple
times, and do not want to incur the cost of sg_init_table every
time in hot paths.

Acked-by: Jens Axboe <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
bonzini authored and rustyrussell committed Mar 20, 2013
1 parent 0d2e1a2 commit c8164d8
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
2 changes: 1 addition & 1 deletion block/blk-integrity.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio,
if (!sg)
sg = sglist;
else {
sg->page_link &= ~0x02;
sg_unmark_end(sg);
sg = sg_next(sg);
}

Expand Down
2 changes: 1 addition & 1 deletion block/blk-merge.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ __blk_segment_map_sg(struct request_queue *q, struct bio_vec *bvec,
* termination bit to avoid doing a full
* sg_init_table() in drivers for each command.
*/
(*sg)->page_link &= ~0x02;
sg_unmark_end(*sg);
*sg = sg_next(*sg);
}

Expand Down
16 changes: 16 additions & 0 deletions include/linux/scatterlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,22 @@ static inline void sg_mark_end(struct scatterlist *sg)
sg->page_link &= ~0x01;
}

/**
* sg_unmark_end - Undo setting the end of the scatterlist
* @sg: SG entryScatterlist
*
* Description:
* Removes the termination marker from the given entry of the scatterlist.
*
**/
static inline void sg_unmark_end(struct scatterlist *sg)
{
#ifdef CONFIG_DEBUG_SG
BUG_ON(sg->sg_magic != SG_MAGIC);
#endif
sg->page_link &= ~0x02;
}

/**
* sg_phys - Return physical address of an sg entry
* @sg: SG entry
Expand Down

0 comments on commit c8164d8

Please sign in to comment.