|
Filipe Manana |
f5cf2d |
From: Chung-Chiang Cheng <cccheng@synology.com>
|
|
Filipe Manana |
f5cf2d |
Date: Fri, 15 Apr 2022 16:04:05 +0800
|
|
Filipe Manana |
f5cf2d |
Git-commit: e6f9d69648029e48b8f97db09368d419b5e2614a
|
|
Filipe Manana |
f5cf2d |
Patch-mainline: v5.18-rc6
|
|
Filipe Manana |
f5cf2d |
References: bsc#1206149
|
|
Filipe Manana |
f5cf2d |
Subject: [PATCH] btrfs: export a helper for compression hard check
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
inode_can_compress will be used outside of inode.c to check the
|
|
Filipe Manana |
f5cf2d |
availability of setting compression flag by xattr. This patch moves
|
|
Filipe Manana |
f5cf2d |
this function as an internal helper and renames it to
|
|
Filipe Manana |
f5cf2d |
btrfs_inode_can_compress.
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
|
|
Filipe Manana |
f5cf2d |
Signed-off-by: Chung-Chiang Cheng <cccheng@synology.com>
|
|
Filipe Manana |
f5cf2d |
Reviewed-by: David Sterba <dsterba@suse.com>
|
|
Filipe Manana |
f5cf2d |
Signed-off-by: David Sterba <dsterba@suse.com>
|
|
Filipe Manana |
f5cf2d |
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
|
Filipe Manana |
f5cf2d |
---
|
|
Filipe Manana |
f5cf2d |
fs/btrfs/btrfs_inode.h | 14 ++++++++++++++
|
|
Filipe Manana |
f5cf2d |
fs/btrfs/inode.c | 18 ++----------------
|
|
Filipe Manana |
f5cf2d |
2 files changed, 16 insertions(+), 16 deletions(-)
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h
|
|
Filipe Manana |
f5cf2d |
index 2172b37c8..476a25661 100644
|
|
Filipe Manana |
f5cf2d |
--- a/fs/btrfs/btrfs_inode.h
|
|
Filipe Manana |
f5cf2d |
+++ b/fs/btrfs/btrfs_inode.h
|
|
Filipe Manana |
f5cf2d |
@@ -339,6 +339,20 @@ static inline bool btrfs_inode_in_log(struct btrfs_inode *inode, u64 generation)
|
|
Filipe Manana |
f5cf2d |
return ret;
|
|
Filipe Manana |
f5cf2d |
}
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
+/*
|
|
Filipe Manana |
f5cf2d |
+ * Check if the inode has flags compatible with compression
|
|
Filipe Manana |
f5cf2d |
+ */
|
|
Filipe Manana |
f5cf2d |
+static inline bool btrfs_inode_can_compress(const struct btrfs_inode *inode)
|
|
Filipe Manana |
f5cf2d |
+{
|
|
Filipe Manana |
f5cf2d |
+ /* Subpage doesn't support compression yet */
|
|
Filipe Manana |
f5cf2d |
+ if (inode->root->fs_info->sectorsize < PAGE_SIZE)
|
|
Filipe Manana |
f5cf2d |
+ return false;
|
|
Filipe Manana |
f5cf2d |
+ if (inode->flags & BTRFS_INODE_NODATACOW ||
|
|
Filipe Manana |
f5cf2d |
+ inode->flags & BTRFS_INODE_NODATASUM)
|
|
Filipe Manana |
f5cf2d |
+ return false;
|
|
Filipe Manana |
f5cf2d |
+ return true;
|
|
Filipe Manana |
f5cf2d |
+}
|
|
Filipe Manana |
f5cf2d |
+
|
|
Filipe Manana |
f5cf2d |
struct btrfs_dio_private {
|
|
Filipe Manana |
f5cf2d |
struct inode *inode;
|
|
Filipe Manana |
f5cf2d |
u64 logical_offset;
|
|
Filipe Manana |
f5cf2d |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
|
Filipe Manana |
f5cf2d |
index c9c7d97eb..45e6827aa 100644
|
|
Filipe Manana |
f5cf2d |
--- a/fs/btrfs/inode.c
|
|
Filipe Manana |
f5cf2d |
+++ b/fs/btrfs/inode.c
|
|
Filipe Manana |
f5cf2d |
@@ -485,20 +485,6 @@ static noinline int add_async_extent(struct async_chunk *cow,
|
|
Filipe Manana |
f5cf2d |
return 0;
|
|
Filipe Manana |
f5cf2d |
}
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
-/*
|
|
Filipe Manana |
f5cf2d |
- * Check if the inode has flags compatible with compression
|
|
Filipe Manana |
f5cf2d |
- */
|
|
Filipe Manana |
f5cf2d |
-static inline bool inode_can_compress(struct btrfs_inode *inode)
|
|
Filipe Manana |
f5cf2d |
-{
|
|
Filipe Manana |
f5cf2d |
- /* Subpage doesn't support compression yet */
|
|
Filipe Manana |
f5cf2d |
- if (inode->root->fs_info->sectorsize < PAGE_SIZE)
|
|
Filipe Manana |
f5cf2d |
- return false;
|
|
Filipe Manana |
f5cf2d |
- if (inode->flags & BTRFS_INODE_NODATACOW ||
|
|
Filipe Manana |
f5cf2d |
- inode->flags & BTRFS_INODE_NODATASUM)
|
|
Filipe Manana |
f5cf2d |
- return false;
|
|
Filipe Manana |
f5cf2d |
- return true;
|
|
Filipe Manana |
f5cf2d |
-}
|
|
Filipe Manana |
f5cf2d |
-
|
|
Filipe Manana |
f5cf2d |
/*
|
|
Filipe Manana |
f5cf2d |
* Check if the inode needs to be submitted to compression, based on mount
|
|
Filipe Manana |
f5cf2d |
* options, defragmentation, properties or heuristics.
|
|
Filipe Manana |
f5cf2d |
@@ -508,7 +494,7 @@ static inline int inode_need_compress(struct btrfs_inode *inode, u64 start,
|
|
Filipe Manana |
f5cf2d |
{
|
|
Filipe Manana |
f5cf2d |
struct btrfs_fs_info *fs_info = inode->root->fs_info;
|
|
Filipe Manana |
f5cf2d |
|
|
Filipe Manana |
f5cf2d |
- if (!inode_can_compress(inode)) {
|
|
Filipe Manana |
f5cf2d |
+ if (!btrfs_inode_can_compress(inode)) {
|
|
Filipe Manana |
f5cf2d |
WARN(IS_ENABLED(CONFIG_BTRFS_DEBUG),
|
|
Filipe Manana |
f5cf2d |
KERN_ERR "BTRFS: unexpected compression for ino %llu\n",
|
|
Filipe Manana |
f5cf2d |
btrfs_ino(inode));
|
|
Filipe Manana |
f5cf2d |
@@ -1950,7 +1936,7 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
|
|
Filipe Manana |
f5cf2d |
ASSERT(!zoned);
|
|
Filipe Manana |
f5cf2d |
ret = run_delalloc_nocow(inode, locked_page, start, end,
|
|
Filipe Manana |
f5cf2d |
page_started, nr_written);
|
|
Filipe Manana |
f5cf2d |
- } else if (!inode_can_compress(inode) ||
|
|
Filipe Manana |
f5cf2d |
+ } else if (!btrfs_inode_can_compress(inode) ||
|
|
Filipe Manana |
f5cf2d |
!inode_need_compress(inode, start, end)) {
|
|
Filipe Manana |
f5cf2d |
if (zoned)
|
|
Filipe Manana |
f5cf2d |
ret = run_delalloc_zoned(inode, locked_page, start, end,
|
|
Filipe Manana |
f5cf2d |
--
|
|
Filipe Manana |
f5cf2d |
2.26.2
|
|
Filipe Manana |
f5cf2d |
|