Thread (27 messages) 27 messages, 3 authors, 2021-01-27

Re: [PATCH v3 01/12] btrfs: make flush_space take a enum btrfs_flush_state instead of int

From: David Sterba <hidden>
Date: 2021-01-27 15:31:28

On Tue, Jan 26, 2021 at 03:32:36PM -0500, Josef Bacik wrote:
On 1/26/21 1:36 PM, David Sterba wrote:
quoted
On Fri, Oct 09, 2020 at 09:28:18AM -0400, Josef Bacik wrote:
quoted
I got a automated message from somebody who runs clang against our
kernels and it's because I used the wrong enum type for what I passed
into flush_space.  Change the argument to be explicitly the enum we're
expecting to make everything consistent.  Maybe eventually gcc will
catch errors like this.
I can't find any such public report and none of the clang warnings seem
to be specific about that. Local run with clang 11 does not produce any
warning.
IDK, it was a private email just to me with the following output from clang

s/btrfs/space-info.c:1115:12: warning: implicit conversion from
enumeration type 'enum btrfs_flush_state' to different enumeration type
'enum btrfs_reserve_flush_enum' [-Wenum-conversion]
                          flush = FLUSH_DELALLOC;
                                ~ ^~~~~~~~~~~~~~
fs/btrfs/space-info.c:1120:12: warning: implicit conversion from
enumeration type 'enum btrfs_flush_state' to different enumeration type
'enum btrfs_reserve_flush_enum' [-Wenum-conversion]
                          flush = FORCE_COMMIT_TRANS;
                                ~ ^~~~~~~~~~~~~~~~~~
fs/btrfs/space-info.c:1124:12: warning: implicit conversion from
enumeration type 'enum btrfs_flush_state' to different enumeration type
'enum btrfs_reserve_flush_enum' [-Wenum-conversion]
                          flush = FLUSH_DELAYED_ITEMS_NR;
                                ~ ^~~~~~~~~~~~~~~~~~~~~~
fs/btrfs/space-info.c:1127:12: warning: implicit conversion from
enumeration type 'enum btrfs_flush_state' to different enumeration type
'enum btrfs_reserve_flush_enum' [-Wenum-conversion]
                          flush = FLUSH_DELAYED_REFS_NR;
                                ~ ^~~~~~~~~~~~~~~~~~~~~

I figure it made sense, might as well fix it.  Do we have that option for our 
shiny new -W build options?  Thanks,
We can add -Wenum-conversion sure, but neither gcc (10.2.1) nor clang
(11.0.1) reproduces the warning for me so I wonder how useful it would
be. I've also tried adding -Wextra and -Wall and the build is clean.

Per gcc documentation, -Wenum-conversion is not exactly what the code
did:

 "Warn when a value of enumerated type is implicitly converted to a
  different enumerated type.  This warning is enabled by -Wextra."

And now that I read the warning carefuly it does not apply to our code,
"btrfs_reserve_flush_enum = btrfs_flush_state" does not happen so it
must have been some older revision of the code.

Changing 
@@ -1073,7 +1073,7 @@ static void btrfs_preempt_reclaim_metadata_space(struct work_struct *work)
 
        spin_lock(&space_info->lock);
        while (need_preemptive_reclaim(fs_info, space_info)) {
-               enum btrfs_flush_state flush;
+               enum btrfs_reserve_flush_enum flush;

---
gcc says (on misc-next without this patchset)

fs/btrfs/space-info.c: In function ‘btrfs_preempt_reclaim_metadata_space’:
fs/btrfs/space-info.c:1112:10: warning: implicit conversion from ‘enum btrfs_flush_state’ to ‘enum btrfs_reserve_flush_enum’ [-Wenum-conversion]
 1112 |    flush = FLUSH_DELALLOC;
      |          ^
  CC [M]  fs/btrfs/block-group.o
fs/btrfs/space-info.c:1117:10: warning: implicit conversion from ‘enum btrfs_flush_state’ to ‘enum btrfs_reserve_flush_enum’ [-Wenum-conversion]
 1117 |    flush = FORCE_COMMIT_TRANS;
      |          ^
fs/btrfs/space-info.c:1121:10: warning: implicit conversion from ‘enum btrfs_flush_state’ to ‘enum btrfs_reserve_flush_enum’ [-Wenum-conversion]
 1121 |    flush = FLUSH_DELAYED_ITEMS_NR;
      |          ^
fs/btrfs/space-info.c:1124:10: warning: implicit conversion from ‘enum btrfs_flush_state’ to ‘enum btrfs_reserve_flush_enum’ [-Wenum-conversion]
 1124 |    flush = FLUSH_DELAYED_REFS_NR;
      |          ^
fs/btrfs/space-info.c:1135:48: warning: implicit conversion from ‘enum btrfs_reserve_flush_enum’ to ‘enum btrfs_flush_state’ [-Wenum-conversion]
 1135 |   flush_space(fs_info, space_info, to_reclaim, flush, true);
      |    
---

So you weren't fixing the reported problem by this patch. Assigning enum
to an int should be natural so thre's no reason to fix that but for
clarity I don't mind, the patch stays.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help