• Eric Biggers's avatar
    fs, fscrypt: add an S_ENCRYPTED inode flag · 2ee6a576
    Eric Biggers authored
    Introduce a flag S_ENCRYPTED which can be set in ->i_flags to indicate
    that the inode is encrypted using the fscrypt (fs/crypto/) mechanism.
    
    Checking this flag will give the same information that
    inode->i_sb->s_cop->is_encrypted(inode) currently does, but will be more
    efficient.  This will be useful for adding higher-level helper functions
    for filesystems to use.  For example we'll be able to replace this:
    
    	if (ext4_encrypted_inode(inode)) {
    		ret = fscrypt_get_encryption_info(inode);
    		if (ret)
    			return ret;
    		if (!fscrypt_has_encryption_key(inode))
    			return -ENOKEY;
    	}
    
    with this:
    
    	ret = fscrypt_require_key(inode);
    	if (ret)
    		return ret;
    
    ... since we'll be able to retain the fast path for unencrypted files as
    a single flag check, using an inline function.  This wasn't possible
    before because we'd have had to frequently call through the
    ->i_sb->s_cop->is_encrypted function pointer, even when the encryption
    support was disabled or not being used.
    
    Note: we don't define S_ENCRYPTED to 0 if CONFIG_FS_ENCRYPTION is
    disabled because we want to continue to return an error if an encrypted
    file is accessed without encryption support, rather than pretending that
    it is unencrypted.
    Reviewed-by: 's avatarChao Yu <yuchao0@huawei.com>
    Acked-by: 's avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: 's avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: Theodore Ts'o's avatarTheodore Ts'o <tytso@mit.edu>
    2ee6a576
ioctl.c 5.82 KB