Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1658811 > unrolled thread
| Started by | Johannes Thumshirn <jthumshirn@suse.de> |
|---|---|
| First post | 2017-06-06 16:40 +0200 |
| Last post | 2017-06-07 09:10 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v5 1/9] scatterlist: add sg_zeroout_area() helper Johannes Thumshirn <jthumshirn@suse.de> - 2017-06-06 16:40 +0200
Re: [PATCH v5 1/9] scatterlist: add sg_zeroout_area() helper Sagi Grimberg <sagi@grimberg.me> - 2017-06-06 20:30 +0200
Re: [PATCH v5 1/9] scatterlist: add sg_zeroout_area() helper Johannes Thumshirn <jthumshirn@suse.de> - 2017-06-07 09:10 +0200
| From | Johannes Thumshirn <jthumshirn@suse.de> |
|---|---|
| Date | 2017-06-06 16:40 +0200 |
| Subject | [PATCH v5 1/9] scatterlist: add sg_zeroout_area() helper |
| Message-ID | <tPnOh-1Aw-1@gated-at.bofh.it> |
The sg_zeroout_area() helper is used to zero fill an area in a SG
list.
Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
---
include/linux/scatterlist.h | 3 +++
lib/scatterlist.c | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
index cb3c8fe6acd7..a38ce9f4e78a 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -279,6 +279,9 @@ size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
void *buf, size_t buflen, off_t skip);
+size_t sg_zeroout_area(struct scatterlist *sgl, unsigned int nents,
+ size_t buflen, off_t skip);
+
/*
* Maximum number of entries that will be allocated in one piece, if
* a list larger than this is required then chaining will be utilized.
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
index c6cf82242d65..ce311cde2654 100644
--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -751,3 +751,40 @@ 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_zeroout_area - 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_zeroout_area(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_zeroout_area);
--
2.12.3
[toc] | [next] | [standalone]
| From | Sagi Grimberg <sagi@grimberg.me> |
|---|---|
| Date | 2017-06-06 20:30 +0200 |
| Message-ID | <tProS-3Yv-23@gated-at.bofh.it> |
| In reply to | #1658811 |
> + while ((offset < buflen) && sg_miter_next(&miter)) {
> + unsigned int len;
> +
> + len = min(miter.length, buflen - offset);
> + memset(miter.addr, '\0', len);
Why '\0' and not 0?
[toc] | [prev] | [next] | [standalone]
| From | Johannes Thumshirn <jthumshirn@suse.de> |
|---|---|
| Date | 2017-06-07 09:10 +0200 |
| Message-ID | <tPDgl-3om-7@gated-at.bofh.it> |
| In reply to | #1659042 |
On 06/06/2017 08:26 PM, Sagi Grimberg wrote:
>
>> + while ((offset < buflen) && sg_miter_next(&miter)) {
>> + unsigned int len;
>> +
>> + len = min(miter.length, buflen - offset);
>> + memset(miter.addr, '\0', len);
>
> Why '\0' and not 0?
Shouldn't be a difference, should it? ascii(7) says
'000 0 00 NUL '\0' (null character)'
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web