From: Christoph Hellwig <hch@lst.de>
To: Tyler Hicks <code@tyhicks.com>
Cc: ecryptfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: [PATCH 1/7] ecryptfs: streamline truncate_upper
Date: Tue, 7 Apr 2026 16:02:37 +0200 [thread overview]
Message-ID: <20260407140329.633186-2-hch@lst.de> (raw)
In-Reply-To: <20260407140329.633186-1-hch@lst.de>
Use a few strategic gotos to keep reduce indentation and keep the
main reduce size flow outside of branches. Switch all touched comments
to normal kernel style and avoid breaks in printed strings for all
the code touched.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
fs/ecryptfs/inode.c | 115 +++++++++++++++++++++++---------------------
1 file changed, 60 insertions(+), 55 deletions(-)
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 8ab014db3e03..69a5dfaddc5c 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -725,83 +725,88 @@ upper_size_to_lower_size(struct ecryptfs_crypt_stat *crypt_stat,
static int truncate_upper(struct dentry *dentry, struct iattr *ia,
struct iattr *lower_ia)
{
- int rc = 0;
struct inode *inode = d_inode(dentry);
struct ecryptfs_crypt_stat *crypt_stat;
loff_t i_size = i_size_read(inode);
loff_t lower_size_before_truncate;
loff_t lower_size_after_truncate;
+ size_t num_zeros;
+ int rc;
if (unlikely((ia->ia_size == i_size))) {
lower_ia->ia_valid &= ~ATTR_SIZE;
return 0;
}
+
rc = ecryptfs_get_lower_file(dentry, inode);
if (rc)
return rc;
- crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
- /* Switch on growing or shrinking file */
+
if (ia->ia_size > i_size) {
char zero[] = { 0x00 };
+ /*
+ * Write a single 0 at the last position of the file; this
+ * triggers code that will fill in 0's throughout the
+ * intermediate portion of the previous end of the file and the
+ * new end of the file.
+ */
+ rc = ecryptfs_write(inode, zero, ia->ia_size - 1, 1);
lower_ia->ia_valid &= ~ATTR_SIZE;
- /* Write a single 0 at the last position of the file;
- * this triggers code that will fill in 0's throughout
- * the intermediate portion of the previous end of the
- * file and the new and of the file */
- rc = ecryptfs_write(inode, zero,
- (ia->ia_size - 1), 1);
- } else { /* ia->ia_size < i_size_read(inode) */
- /* We're chopping off all the pages down to the page
- * in which ia->ia_size is located. Fill in the end of
- * that page from (ia->ia_size & ~PAGE_MASK) to
- * PAGE_SIZE with zeros. */
- size_t num_zeros = (PAGE_SIZE
- - (ia->ia_size & ~PAGE_MASK));
-
- if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
- truncate_setsize(inode, ia->ia_size);
- lower_ia->ia_size = ia->ia_size;
- lower_ia->ia_valid |= ATTR_SIZE;
- goto out;
- }
- if (num_zeros) {
- char *zeros_virt;
+ goto out;
+ }
- zeros_virt = kzalloc(num_zeros, GFP_KERNEL);
- if (!zeros_virt) {
- rc = -ENOMEM;
- goto out;
- }
- rc = ecryptfs_write(inode, zeros_virt,
- ia->ia_size, num_zeros);
- kfree(zeros_virt);
- if (rc) {
- printk(KERN_ERR "Error attempting to zero out "
- "the remainder of the end page on "
- "reducing truncate; rc = [%d]\n", rc);
- goto out;
- }
- }
+ crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
+ if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
truncate_setsize(inode, ia->ia_size);
- rc = ecryptfs_write_inode_size_to_metadata(inode);
+ lower_ia->ia_size = ia->ia_size;
+ lower_ia->ia_valid |= ATTR_SIZE;
+ goto out;
+ }
+
+ /*
+ * We're chopping off all the pages down to the page in which
+ * ia->ia_size is located. Fill in the end of that page from
+ * (ia->ia_size & ~PAGE_MASK) to PAGE_SIZE with zeros.
+ */
+ num_zeros = PAGE_SIZE - (ia->ia_size & ~PAGE_MASK);
+ if (num_zeros) {
+ char *zeros_virt;
+
+ zeros_virt = kzalloc(num_zeros, GFP_KERNEL);
+ if (!zeros_virt) {
+ rc = -ENOMEM;
+ goto out;
+ }
+ rc = ecryptfs_write(inode, zeros_virt, ia->ia_size, num_zeros);
+ kfree(zeros_virt);
if (rc) {
- printk(KERN_ERR "Problem with "
- "ecryptfs_write_inode_size_to_metadata; "
- "rc = [%d]\n", rc);
+ pr_err("Error attempting to zero out the remainder of the end page on reducing truncate; rc = [%d]\n",
+ rc);
goto out;
}
- /* We are reducing the size of the ecryptfs file, and need to
- * know if we need to reduce the size of the lower file. */
- lower_size_before_truncate =
- upper_size_to_lower_size(crypt_stat, i_size);
- lower_size_after_truncate =
- upper_size_to_lower_size(crypt_stat, ia->ia_size);
- if (lower_size_after_truncate < lower_size_before_truncate) {
- lower_ia->ia_size = lower_size_after_truncate;
- lower_ia->ia_valid |= ATTR_SIZE;
- } else
- lower_ia->ia_valid &= ~ATTR_SIZE;
+ }
+ truncate_setsize(inode, ia->ia_size);
+ rc = ecryptfs_write_inode_size_to_metadata(inode);
+ if (rc) {
+ pr_err("Problem with ecryptfs_write_inode_size_to_metadata; rc = [%d]\n",
+ rc);
+ goto out;
+ }
+
+ /*
+ * We are reducing the size of the ecryptfs file, and need to know if we
+ * need to reduce the size of the lower file.
+ */
+ lower_size_before_truncate =
+ upper_size_to_lower_size(crypt_stat, i_size);
+ lower_size_after_truncate =
+ upper_size_to_lower_size(crypt_stat, ia->ia_size);
+ if (lower_size_after_truncate < lower_size_before_truncate) {
+ lower_ia->ia_size = lower_size_after_truncate;
+ lower_ia->ia_valid |= ATTR_SIZE;
+ } else {
+ lower_ia->ia_valid &= ~ATTR_SIZE;
}
out:
ecryptfs_put_lower_file(inode);
--
2.47.3
next prev parent reply other threads:[~2026-04-07 14:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-07 14:02 cleanup truncate handling in ecryptfs v2 Christoph Hellwig
2026-04-07 14:02 ` Christoph Hellwig [this message]
2026-04-07 14:02 ` [PATCH 2/7] ecryptfs: cleanup ecryptfs_setattr Christoph Hellwig
2026-04-07 14:02 ` [PATCH 3/7] ecryptfs: use ZERO_PAGE instead of allocating zeroed memory in truncate_upper Christoph Hellwig
2026-04-07 14:02 ` [PATCH 4/7] ecryptfs: combine the two ATTR_SIZE blocks in ecryptfs_setattr Christoph Hellwig
2026-04-07 14:02 ` [PATCH 5/7] ecryptfs: sanitize struct iattr handling in truncate_upper Christoph Hellwig
2026-04-07 14:02 ` [PATCH 6/7] ecryptfs: merge ecryptfs_inode_newsize_ok into truncate_upper Christoph Hellwig
2026-04-07 14:02 ` [PATCH 7/7] ecryptfs: call notify_change from truncate_upper Christoph Hellwig
2026-04-07 14:50 ` cleanup truncate handling in ecryptfs v2 Christoph Hellwig
2026-04-08 1:10 ` Tyler Hicks
-- strict thread matches above, loose matches on Subject: below --
2026-03-31 15:37 cleanup truncate handling in ecryptfs Christoph Hellwig
2026-03-31 15:37 ` [PATCH 1/7] ecryptfs: streamline truncate_upper Christoph Hellwig
2026-04-06 5:52 ` Tyler Hicks
2026-04-06 6:28 ` Christoph Hellwig
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=20260407140329.633186-2-hch@lst.de \
--to=hch@lst.de \
--cc=code@tyhicks.com \
--cc=ecryptfs@vger.kernel.org \
--cc=linux-fsdevel@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