forked from luck/tmp_suning_uos_patched
scatterlist: add sg_zero_buffer() helper
The sg_zero_buffer() helper is used to zero fill an area in a SG list. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> [hch: renamed to sg_zero_buffer] Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
d19d4c8eb1
commit
0945e56994
|
@ -278,6 +278,8 @@ size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
|
|||
const void *buf, size_t buflen, off_t skip);
|
||||
size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
void *buf, size_t buflen, off_t skip);
|
||||
size_t sg_zero_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
size_t buflen, off_t skip);
|
||||
|
||||
/*
|
||||
* Maximum number of entries that will be allocated in one piece, if
|
||||
|
|
|
@ -751,3 +751,38 @@ size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
|
|||
return sg_copy_buffer(sgl, nents, buf, buflen, skip, true);
|
||||
}
|
||||
EXPORT_SYMBOL(sg_pcopy_to_buffer);
|
||||
|
||||
/**
|
||||
* sg_zero_buffer - Zero-out a part of a SG list
|
||||
* @sgl: The SG list
|
||||
* @nents: Number of SG entries
|
||||
* @buflen: The number of bytes to zero out
|
||||
* @skip: Number of bytes to skip before zeroing
|
||||
*
|
||||
* Returns the number of bytes zeroed.
|
||||
**/
|
||||
size_t sg_zero_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
size_t buflen, off_t skip)
|
||||
{
|
||||
unsigned int offset = 0;
|
||||
struct sg_mapping_iter miter;
|
||||
unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG;
|
||||
|
||||
sg_miter_start(&miter, sgl, nents, sg_flags);
|
||||
|
||||
if (!sg_miter_skip(&miter, skip))
|
||||
return false;
|
||||
|
||||
while (offset < buflen && sg_miter_next(&miter)) {
|
||||
unsigned int len;
|
||||
|
||||
len = min(miter.length, buflen - offset);
|
||||
memset(miter.addr, 0, len);
|
||||
|
||||
offset += len;
|
||||
}
|
||||
|
||||
sg_miter_stop(&miter);
|
||||
return offset;
|
||||
}
|
||||
EXPORT_SYMBOL(sg_zero_buffer);
|
||||
|
|
Loading…
Reference in New Issue
Block a user