mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
ecryptfs: merge ecryptfs_inode_newsize_ok into truncate_upper
Both callers of ecryptfs_inode_newsize_ok call truncate_upper right after. Merge ecryptfs_inode_newsize_ok into truncate_upper to simplify the logic. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Tyler Hicks <code@tyhicks.com>
This commit is contained in:
parent
472dea1d22
commit
081447ecfc
|
|
@ -738,6 +738,23 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
|||
return 0;
|
||||
}
|
||||
|
||||
crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
|
||||
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) {
|
||||
/*
|
||||
* The eCryptfs inode and the new *lower* size are mixed here
|
||||
* because we may not have the lower i_mutex held and/or it may
|
||||
* not be appropriate to call inode_newsize_ok() with inodes
|
||||
* from other filesystems.
|
||||
*/
|
||||
rc = inode_newsize_ok(inode, lower_size_after_truncate);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = ecryptfs_get_lower_file(dentry, inode);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
|
@ -756,7 +773,6 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
|||
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);
|
||||
lower_ia->ia_size = ia->ia_size;
|
||||
|
|
@ -791,10 +807,6 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
|||
* 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;
|
||||
|
|
@ -806,28 +818,6 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int ecryptfs_inode_newsize_ok(struct inode *inode, loff_t offset)
|
||||
{
|
||||
struct ecryptfs_crypt_stat *crypt_stat;
|
||||
loff_t lower_oldsize, lower_newsize;
|
||||
|
||||
crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
|
||||
lower_oldsize = upper_size_to_lower_size(crypt_stat,
|
||||
i_size_read(inode));
|
||||
lower_newsize = upper_size_to_lower_size(crypt_stat, offset);
|
||||
if (lower_newsize > lower_oldsize) {
|
||||
/*
|
||||
* The eCryptfs inode and the new *lower* size are mixed here
|
||||
* because we may not have the lower i_mutex held and/or it may
|
||||
* not be appropriate to call inode_newsize_ok() with inodes
|
||||
* from other filesystems.
|
||||
*/
|
||||
return inode_newsize_ok(inode, lower_newsize);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ecryptfs_truncate
|
||||
* @dentry: The ecryptfs layer dentry
|
||||
|
|
@ -844,10 +834,6 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
|
|||
struct iattr lower_ia = { .ia_valid = 0 };
|
||||
int rc;
|
||||
|
||||
rc = ecryptfs_inode_newsize_ok(d_inode(dentry), new_length);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = truncate_upper(dentry, &ia, &lower_ia);
|
||||
if (!rc && lower_ia.ia_valid & ATTR_SIZE) {
|
||||
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
|
|
@ -939,10 +925,6 @@ static int ecryptfs_setattr(struct mnt_idmap *idmap,
|
|||
if (ia->ia_valid & ATTR_FILE)
|
||||
lower_ia.ia_file = ecryptfs_file_to_lower(ia->ia_file);
|
||||
if (ia->ia_valid & ATTR_SIZE) {
|
||||
rc = ecryptfs_inode_newsize_ok(inode, ia->ia_size);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
rc = truncate_upper(dentry, ia, &lower_ia);
|
||||
if (rc < 0)
|
||||
goto out;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user