On Thu, May 19, 2022 at 09:21:25AM -0400, James Simmons wrote: > Currently fscrypt offers two options. One option is to use the > internal bounce buffer allocated or perform inline encrpytion. > Add the option to use an external bounce buffer. This change can > be used useful for example for a network file systems which can > pass in a page from the page cache and place the encrypted data > into a page for a network packet to be sent. Another potential > use is the use of GPU pages with RDMA being the final destination > for the encrypted data. Lastly in performance measurements the > allocation of the bounce page incures a heavy cost. Using a page > from a predefined memory pool can lower the case. We can replace > the one off case of inplace encryption with the new general > functions. > > Signed-Off-By: James Simmons <jsimmons@xxxxxxxxxxxxx> > --- > fs/crypto/crypto.c | 34 +++++++++++++++++++--------------- > fs/ubifs/crypto.c | 16 +++++++++------- > include/linux/fscrypt.h | 31 ++++++++++++++++--------------- > 3 files changed, 44 insertions(+), 37 deletions(-) Can you send a patch with the user of this at the same time? This patch isn't useful on its own. UBIFS doesn't count, since it works fine without this. > /** > - * fscrypt_encrypt_block_inplace() - Encrypt a filesystem block in-place > + * fscrypt_encrypt_page() - Cache an encrypt filesystem block in a page fscrypt_encrypt_block() would be a better name, to avoid confusion between blocks and pages. Also, "Cache an encrypt filesystem block" => "Encrypt a filesystem block" > /** > - * fscrypt_decrypt_block_inplace() - Decrypt a filesystem block in-place > + * fscrypt_decrypt_page() - Cache a decrypt a filesystem block in a page Likewise, fscrypt_decrypt_block(). > * @inode: The inode to which this block belongs > - * @page: The page containing the block to decrypt > + * @src: The page containing the block to decrypt > + * @dst: The page which will contain the plain data > * @len: Size of block to decrypt. This must be a multiple of > * FSCRYPT_CONTENTS_ALIGNMENT. > * @offs: Byte offset within @page at which the block to decrypt begins > @@ -292,17 +295,18 @@ EXPORT_SYMBOL(fscrypt_decrypt_pagecache_blocks); > * Decrypt a possibly-compressed filesystem block that is located in an > * arbitrary page, not necessarily in the original pagecache page. The @inode > * and @lblk_num must be specified, as they can't be determined from @page. > + * The encrypted data will be stored in @dst. > * > * Return: 0 on success; -errno on failure > */ > -int fscrypt_decrypt_block_inplace(const struct inode *inode, struct page *page, > - unsigned int len, unsigned int offs, > - u64 lblk_num) > +int fscrypt_decrypt_page(const struct inode *inode, struct page *src, > + struct page *dst, unsigned int len, unsigned int offs, > + u64 lblk_num, gfp_t gfp_flags) The new gfp_flags parameter is not documented in the kerneldoc comment. - Eric