From: Stephan Mueller <smueller@chronox.de>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: linux-crypto <linux-crypto@vger.kernel.org>,
"'LKML'" <linux-kernel@vger.kernel.org>
Subject: algif_hash: splice of data > 2**16
Date: Thu, 18 Dec 2014 13:15:28 +0100 [thread overview]
Message-ID: <8707521.TbV00HIEUx@tauon> (raw)
Hi Herbert,
While testing the vmsplice/splice interface of algif_hash I was made
aware of the problem that data blobs larger than 16 pages do not seem to
be hashed properly.
For testing, a file is mmap()ed and handed to vmsplice / splice. If the
file is smaller than 2**16, the interface returns the proper hash.
However, when the file is larger, only the first 2**16 bytes seem to be
used.
When adding printk's to hash_sendpage, I see that this function is
invoked exactly 16 times where the first 15 invocations have the
MSG_MORE flag set and the last invocation does not have MSG_MORE.
To invoke the vmsplice/splice interface, I use my current implementation
of libkcapi available at [1]. That library uses the following calls:
vmsplice(handle->pipes[1], iov, iovlen, SPLICE_F_GIFT);
splice(handle->pipes[0], NULL, handle->opfd, NULL, inlen, 0);
read(handle->opfd, out, outlen);
The return code of splice() is always 65536 irrespectively of the
following variations:
- have one iovec pointing to the entire buffer of the mmap()ed file
- have multiple iovecs with all pointing to at most 2**16 bytes
- invoke splice/read multiple times with at most 2**16 bytes
My guess of the problem is that the maximum buffer size for the pipe is
16 pages. These 16 pages are filled with the repeated invocation of
hash_sendpage.
Is there a specific way of how the splice interface is to be called so
that the pages are released? Or is there a need to change hash_sendpage
such that after the af_alg_wait_for_completion call, some form of
"releasing/putting" of the used page needs to be added?
Note, hashing the large mmap()ed file with one iovec using the sendmsg()
interface works flawlessly.
[1] http://www.chronox.de/libkcapi.html
Thanks
Stephan
next reply other threads:[~2014-12-18 12:15 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-18 12:15 Stephan Mueller [this message]
2014-12-18 12:22 ` algif_hash: splice of data > 2**16 leroy christophe
2014-12-18 12:37 ` Stephan Mueller
2014-12-20 6:37 ` Stephan Mueller
2014-12-23 17:16 ` leroy christophe
2014-12-24 9:03 ` Stephan Mueller
2014-12-24 14:10 ` leroy christophe
2014-12-24 15:12 ` Stephan Mueller
2014-12-25 22:08 ` Stephan Mueller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8707521.TbV00HIEUx@tauon \
--to=smueller@chronox.de \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox