|
@@ -146,3 +146,25 @@ int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes)
|
|
|
return n;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen);
|
|
|
+
|
|
|
+struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
|
|
|
+ struct scatterlist *src,
|
|
|
+ unsigned int len)
|
|
|
+{
|
|
|
+ for (;;) {
|
|
|
+ if (!len)
|
|
|
+ return src;
|
|
|
+
|
|
|
+ if (src->length > len)
|
|
|
+ break;
|
|
|
+
|
|
|
+ len -= src->length;
|
|
|
+ src = sg_next(src);
|
|
|
+ }
|
|
|
+
|
|
|
+ sg_set_page(dst, sg_page(src), src->length - len, src->offset + len);
|
|
|
+ scatterwalk_crypto_chain(dst, sg_next(src), 0, 2);
|
|
|
+
|
|
|
+ return dst;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(scatterwalk_ffwd);
|