mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 05:49:47 -04:00
fscrypt: Remove fscrypt_dio_supported()
On block-based filesystems, fscrypt file contents encryption is now always implemented using blk-crypto. This implementation supports direct I/O. Therefore, fscrypt_dio_supported() now always returns true, except in the edge case where statx(STATX_DIOALIGN) is called on an encrypted regular file that hasn't had its key set up. But that was really a workaround rather than the desired behavior, so we can disregard it. Thus, fscrypt_dio_supported() is no longer needed. Remove it. Reviewed-by: Christoph Hellwig <hch@lst.de> Link: https://patch.msgid.link/20260713023708.9245-14-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
This commit is contained in:
@@ -286,49 +286,6 @@ bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio);
|
||||
|
||||
/**
|
||||
* fscrypt_dio_supported() - check whether DIO (direct I/O) is supported on an
|
||||
* inode, as far as encryption is concerned
|
||||
* @inode: the inode in question
|
||||
*
|
||||
* Return: %true if there are no encryption constraints that prevent DIO from
|
||||
* being supported; %false if DIO is unsupported. (Note that in the
|
||||
* %true case, the filesystem might have other, non-encryption-related
|
||||
* constraints that prevent DIO from actually being supported. Also, on
|
||||
* encrypted files the filesystem is still responsible for only allowing
|
||||
* DIO when requests are filesystem-block-aligned.)
|
||||
*/
|
||||
bool fscrypt_dio_supported(struct inode *inode)
|
||||
{
|
||||
int err;
|
||||
|
||||
/* If the file is unencrypted, no veto from us. */
|
||||
if (!fscrypt_needs_contents_encryption(inode))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* We only support DIO with inline crypto, not fs-layer crypto.
|
||||
*
|
||||
* To determine whether the inode is using inline crypto, we have to set
|
||||
* up the key if it wasn't already done. This is because in the current
|
||||
* design of fscrypt, the decision of whether to use inline crypto or
|
||||
* not isn't made until the inode's encryption key is being set up. In
|
||||
* the DIO read/write case, the key will always be set up already, since
|
||||
* the file will be open. But in the case of statx(), the key might not
|
||||
* be set up yet, as the file might not have been opened yet.
|
||||
*/
|
||||
err = fscrypt_require_key(inode);
|
||||
if (err) {
|
||||
/*
|
||||
* Key unavailable or couldn't be set up. This edge case isn't
|
||||
* worth worrying about; just report that DIO is unsupported.
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fscrypt_dio_supported);
|
||||
|
||||
/**
|
||||
* fscrypt_limit_io_blocks() - limit I/O blocks to avoid discontiguous DUNs
|
||||
* @inode: the file on which I/O is being done
|
||||
|
||||
@@ -6147,11 +6147,8 @@ u32 ext4_dio_alignment(struct inode *inode)
|
||||
return 0;
|
||||
if (ext4_has_inline_data(inode))
|
||||
return 0;
|
||||
if (IS_ENCRYPTED(inode)) {
|
||||
if (!fscrypt_dio_supported(inode))
|
||||
return 0;
|
||||
if (IS_ENCRYPTED(inode))
|
||||
return i_blocksize(inode);
|
||||
}
|
||||
return 1; /* use the iomap defaults */
|
||||
}
|
||||
|
||||
@@ -6170,11 +6167,7 @@ int ext4_getattr(struct mnt_idmap *idmap, const struct path *path,
|
||||
stat->btime.tv_nsec = ei->i_crtime.tv_nsec;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the DIO alignment restrictions if requested. We only return
|
||||
* this information when requested, since on encrypted files it might
|
||||
* take a fair bit of work to get if the file wasn't opened recently.
|
||||
*/
|
||||
/* Return the DIO alignment restrictions if requested. */
|
||||
if ((request_mask & STATX_DIOALIGN) && S_ISREG(inode->i_mode)) {
|
||||
u32 dio_align = ext4_dio_alignment(inode);
|
||||
|
||||
|
||||
@@ -950,8 +950,6 @@ static bool f2fs_force_buffered_io(struct inode *inode, int rw)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||
|
||||
if (!fscrypt_dio_supported(inode))
|
||||
return true;
|
||||
if (fsverity_active(inode))
|
||||
return true;
|
||||
if (f2fs_compressed_file(inode))
|
||||
@@ -996,9 +994,7 @@ int f2fs_getattr(struct mnt_idmap *idmap, const struct path *path,
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the DIO alignment restrictions if requested. We only return
|
||||
* this information when requested, since on encrypted files it might
|
||||
* take a fair bit of work to get if the file wasn't opened recently.
|
||||
* Return the DIO alignment restrictions if requested.
|
||||
*
|
||||
* f2fs sometimes supports DIO reads but not DIO writes. STATX_DIOALIGN
|
||||
* cannot represent that, so in that case we report no DIO support.
|
||||
|
||||
@@ -872,8 +872,6 @@ void fscrypt_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
|
||||
bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
|
||||
loff_t pos);
|
||||
|
||||
bool fscrypt_dio_supported(struct inode *inode);
|
||||
|
||||
u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 nr_blocks);
|
||||
|
||||
#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
|
||||
@@ -889,11 +887,6 @@ static inline bool fscrypt_mergeable_bio(struct bio *bio,
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool fscrypt_dio_supported(struct inode *inode)
|
||||
{
|
||||
return !fscrypt_needs_contents_encryption(inode);
|
||||
}
|
||||
|
||||
static inline u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk,
|
||||
u64 nr_blocks)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user