* [PATCH] btrfs: Merge inode_can_compress in inode_need_compress
@ 2020-08-18 6:30 Nikolay Borisov
2020-08-18 7:50 ` Qu Wenruo
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Nikolay Borisov @ 2020-08-18 6:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: Nikolay Borisov
The latter is the only caller of the former. Just open code can_compress
into need_compress and also remove the warning since it's made redundant
by this change.
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
fs/btrfs/inode.c | 21 +++------------------
1 file changed, 3 insertions(+), 18 deletions(-)
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 15dc8b6871ac..19e1918bad5c 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -410,17 +410,6 @@ static noinline int add_async_extent(struct async_chunk *cow,
return 0;
}
-/*
- * Check if the inode has flags compatible with compression
- */
-static inline bool inode_can_compress(struct btrfs_inode *inode)
-{
- if (inode->flags & BTRFS_INODE_NODATACOW ||
- inode->flags & BTRFS_INODE_NODATASUM)
- return false;
- return true;
-}
-
/*
* Check if the inode needs to be submitted to compression, based on mount
* options, defragmentation, properties or heuristics.
@@ -430,12 +419,9 @@ static inline int inode_need_compress(struct btrfs_inode *inode, u64 start,
{
struct btrfs_fs_info *fs_info = inode->root->fs_info;
- if (!inode_can_compress(inode)) {
- WARN(IS_ENABLED(CONFIG_BTRFS_DEBUG),
- KERN_ERR "BTRFS: unexpected compression for ino %llu\n",
- btrfs_ino(inode));
+ if (inode->flags & BTRFS_INODE_NODATACOW ||
+ inode->flags & BTRFS_INODE_NODATASUM)
return 0;
- }
/* force compress */
if (btrfs_test_opt(fs_info, FORCE_COMPRESS))
return 1;
@@ -1833,8 +1819,7 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
} else if (inode->flags & BTRFS_INODE_PREALLOC && !force_cow) {
ret = run_delalloc_nocow(inode, locked_page, start, end,
page_started, 0, nr_written);
- } else if (!inode_can_compress(inode) ||
- !inode_need_compress(inode, start, end)) {
+ } else if (!inode_need_compress(inode, start, end)) {
ret = cow_file_range(inode, locked_page, start, end,
page_started, nr_written, 1);
} else {
--
2.17.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] btrfs: Merge inode_can_compress in inode_need_compress
2020-08-18 6:30 [PATCH] btrfs: Merge inode_can_compress in inode_need_compress Nikolay Borisov
@ 2020-08-18 7:50 ` Qu Wenruo
2020-08-26 11:13 ` David Sterba
2020-08-31 20:40 ` David Sterba
2 siblings, 0 replies; 5+ messages in thread
From: Qu Wenruo @ 2020-08-18 7:50 UTC (permalink / raw)
To: Nikolay Borisov, linux-btrfs
On 2020/8/18 下午2:30, Nikolay Borisov wrote:
> The latter is the only caller of the former. Just open code can_compress
> into need_compress and also remove the warning since it's made redundant
> by this change.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Thanks,
Qu
> ---
> fs/btrfs/inode.c | 21 +++------------------
> 1 file changed, 3 insertions(+), 18 deletions(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 15dc8b6871ac..19e1918bad5c 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -410,17 +410,6 @@ static noinline int add_async_extent(struct async_chunk *cow,
> return 0;
> }
>
> -/*
> - * Check if the inode has flags compatible with compression
> - */
> -static inline bool inode_can_compress(struct btrfs_inode *inode)
> -{
> - if (inode->flags & BTRFS_INODE_NODATACOW ||
> - inode->flags & BTRFS_INODE_NODATASUM)
> - return false;
> - return true;
> -}
> -
> /*
> * Check if the inode needs to be submitted to compression, based on mount
> * options, defragmentation, properties or heuristics.
> @@ -430,12 +419,9 @@ static inline int inode_need_compress(struct btrfs_inode *inode, u64 start,
> {
> struct btrfs_fs_info *fs_info = inode->root->fs_info;
>
> - if (!inode_can_compress(inode)) {
> - WARN(IS_ENABLED(CONFIG_BTRFS_DEBUG),
> - KERN_ERR "BTRFS: unexpected compression for ino %llu\n",
> - btrfs_ino(inode));
> + if (inode->flags & BTRFS_INODE_NODATACOW ||
> + inode->flags & BTRFS_INODE_NODATASUM)
> return 0;
> - }
> /* force compress */
> if (btrfs_test_opt(fs_info, FORCE_COMPRESS))
> return 1;
> @@ -1833,8 +1819,7 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
> } else if (inode->flags & BTRFS_INODE_PREALLOC && !force_cow) {
> ret = run_delalloc_nocow(inode, locked_page, start, end,
> page_started, 0, nr_written);
> - } else if (!inode_can_compress(inode) ||
> - !inode_need_compress(inode, start, end)) {
> + } else if (!inode_need_compress(inode, start, end)) {
> ret = cow_file_range(inode, locked_page, start, end,
> page_started, nr_written, 1);
> } else {
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] btrfs: Merge inode_can_compress in inode_need_compress
2020-08-18 6:30 [PATCH] btrfs: Merge inode_can_compress in inode_need_compress Nikolay Borisov
2020-08-18 7:50 ` Qu Wenruo
@ 2020-08-26 11:13 ` David Sterba
2020-08-31 20:40 ` David Sterba
2 siblings, 0 replies; 5+ messages in thread
From: David Sterba @ 2020-08-26 11:13 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: linux-btrfs
On Tue, Aug 18, 2020 at 09:30:56AM +0300, Nikolay Borisov wrote:
> The latter is the only caller of the former. Just open code can_compress
> into need_compress and also remove the warning since it's made redundant
> by this change.
We had discussions and some disagreements in the past regarding the
need/can compression helpers
(v1) https://lore.kernel.org/linux-btrfs/20180515073622.18732-1-wqu@suse.com/
(v2) https://lore.kernel.org/linux-btrfs/20190701051225.17957-1-wqu@suse.com/
The fix got merged as there was a pending user report and bug to fix,
but I remember there's more to do.
While this patch cleans up some of the code, I don't think it's going
the right way, we have 2 semantics for the compression decision and the
helpers codify that.
I haven't read the discussions yet again and will have to do that
before merging this patch.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] btrfs: Merge inode_can_compress in inode_need_compress
2020-08-18 6:30 [PATCH] btrfs: Merge inode_can_compress in inode_need_compress Nikolay Borisov
2020-08-18 7:50 ` Qu Wenruo
2020-08-26 11:13 ` David Sterba
@ 2020-08-31 20:40 ` David Sterba
2020-08-31 20:44 ` Nikolay Borisov
2 siblings, 1 reply; 5+ messages in thread
From: David Sterba @ 2020-08-31 20:40 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: linux-btrfs
On Tue, Aug 18, 2020 at 09:30:56AM +0300, Nikolay Borisov wrote:
> The latter is the only caller of the former. Just open code can_compress
> into need_compress and also remove the warning since it's made redundant
> by this change.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
> ---
> fs/btrfs/inode.c | 21 +++------------------
> 1 file changed, 3 insertions(+), 18 deletions(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 15dc8b6871ac..19e1918bad5c 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -410,17 +410,6 @@ static noinline int add_async_extent(struct async_chunk *cow,
> return 0;
> }
>
> -/*
> - * Check if the inode has flags compatible with compression
> - */
> -static inline bool inode_can_compress(struct btrfs_inode *inode)
> -{
> - if (inode->flags & BTRFS_INODE_NODATACOW ||
> - inode->flags & BTRFS_INODE_NODATASUM)
> - return false;
> - return true;
> -}
> -
> /*
> * Check if the inode needs to be submitted to compression, based on mount
> * options, defragmentation, properties or heuristics.
> @@ -430,12 +419,9 @@ static inline int inode_need_compress(struct btrfs_inode *inode, u64 start,
> {
> struct btrfs_fs_info *fs_info = inode->root->fs_info;
>
> - if (!inode_can_compress(inode)) {
> - WARN(IS_ENABLED(CONFIG_BTRFS_DEBUG),
> - KERN_ERR "BTRFS: unexpected compression for ino %llu\n",
> - btrfs_ino(inode));
> + if (inode->flags & BTRFS_INODE_NODATACOW ||
> + inode->flags & BTRFS_INODE_NODATASUM)
> return 0;
This serves as a runtime friendly assert, when inode_need_compress is
called from compress_file_range.
First call in btrfs_run_delalloc_range duplicates the
nodatacow/nodatasum which would be cleaned up by this patch but we'd
lose the warning in case compress_file_range detects the unexpected
flags.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] btrfs: Merge inode_can_compress in inode_need_compress
2020-08-31 20:40 ` David Sterba
@ 2020-08-31 20:44 ` Nikolay Borisov
0 siblings, 0 replies; 5+ messages in thread
From: Nikolay Borisov @ 2020-08-31 20:44 UTC (permalink / raw)
To: dsterba, linux-btrfs
On 31.08.20 г. 23:40 ч., David Sterba wrote:
> On Tue, Aug 18, 2020 at 09:30:56AM +0300, Nikolay Borisov wrote:
>> The latter is the only caller of the former. Just open code can_compress
>> into need_compress and also remove the warning since it's made redundant
>> by this change.
>>
>> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
>> ---
>> fs/btrfs/inode.c | 21 +++------------------
>> 1 file changed, 3 insertions(+), 18 deletions(-)
>>
>> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
>> index 15dc8b6871ac..19e1918bad5c 100644
>> --- a/fs/btrfs/inode.c
>> +++ b/fs/btrfs/inode.c
>> @@ -410,17 +410,6 @@ static noinline int add_async_extent(struct async_chunk *cow,
>> return 0;
>> }
>>
>> -/*
>> - * Check if the inode has flags compatible with compression
>> - */
>> -static inline bool inode_can_compress(struct btrfs_inode *inode)
>> -{
>> - if (inode->flags & BTRFS_INODE_NODATACOW ||
>> - inode->flags & BTRFS_INODE_NODATASUM)
>> - return false;
>> - return true;
>> -}
>> -
>> /*
>> * Check if the inode needs to be submitted to compression, based on mount
>> * options, defragmentation, properties or heuristics.
>> @@ -430,12 +419,9 @@ static inline int inode_need_compress(struct btrfs_inode *inode, u64 start,
>> {
>> struct btrfs_fs_info *fs_info = inode->root->fs_info;
>>
>> - if (!inode_can_compress(inode)) {
>> - WARN(IS_ENABLED(CONFIG_BTRFS_DEBUG),
>> - KERN_ERR "BTRFS: unexpected compression for ino %llu\n",
>> - btrfs_ino(inode));
>> + if (inode->flags & BTRFS_INODE_NODATACOW ||
>> + inode->flags & BTRFS_INODE_NODATASUM)
>> return 0;
>
> This serves as a runtime friendly assert, when inode_need_compress is
> called from compress_file_range.
>
> First call in btrfs_run_delalloc_range duplicates the
> nodatacow/nodatasum which would be cleaned up by this patch but we'd
> lose the warning in case compress_file_range detects the unexpected
> flags.
>
I think we should simply come to an agreement at which stage of a write
shall we check for the presence of flags. IMO the less places we have
the better. This will obviate the need for a run-time assert... Frankly
I think we should be checking only at the time of btrfs_run_delalloc_range
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-08-31 20:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-18 6:30 [PATCH] btrfs: Merge inode_can_compress in inode_need_compress Nikolay Borisov
2020-08-18 7:50 ` Qu Wenruo
2020-08-26 11:13 ` David Sterba
2020-08-31 20:40 ` David Sterba
2020-08-31 20:44 ` Nikolay Borisov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox