Skip to contentSkip to conversation

fs/ext4/super.c: Let 'counters' switched by SMP

PATCH In review Chen Gang 4 participants 6 messages Jul 15, 2014 – Jul 23, 2014 ext4 file system

lore
Share & tools
lore

Chen Gang

author
#0 lore raw

PATCH 1/1 fs/ext4/super.c: Let 'counters' switched by SMP

When SMP is disabled, 'struct percpu_counter' has no 'counters' member, so need skip it when in !SMP.

The related git commit:

"feab139 ext4: rearrange initialization to fix EXT4FS_DEBUG".

The related error (with allmodconfig under score):

    CC [M]  fs/ext4/super.o
  fs/ext4/super.c: In function 'ext4_commit_super':
  fs/ext4/super.c:4546:41: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeclusters_counter.counters)
                                           ^
  fs/ext4/super.c:4550:39: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeinodes_counter.counters)
                                         ^
---
 fs/ext4/super.c | 4 ++++
 1 file changed, 4 insertions(+)
fs/ext4/super.c +4 -0
index 30767cd..3cd4fe1 100644
@@ -4543,11 +4543,15 @@ static int ext4_commit_super(struct super_block *sb, int sync)
 	else
 		es->s_kbytes_written =
 			cpu_to_le64(EXT4_SB(sb)->s_kbytes_written);
+#ifdef CONFIG_SMP
 	if (EXT4_SB(sb)->s_freeclusters_counter.counters)
+#endif
 		ext4_free_blocks_count_set(es,
 			EXT4_C2B(EXT4_SB(sb), percpu_counter_sum_positive(
 				&EXT4_SB(sb)->s_freeclusters_counter)));
+#ifdef CONFIG_SMP
 	if (EXT4_SB(sb)->s_freeinodes_counter.counters)
+#endif
 		es->s_free_inodes_count =
 			cpu_to_le32(percpu_counter_sum_positive(
 				&EXT4_SB(sb)->s_freeinodes_counter));
Signature · 1 line
1.9.2.459.g68773ac
maintainer
#1 lore raw
Quoted 9 lines · Chen Gang

When SMP is disabled, 'struct percpu_counter' has no 'counters' member, so need skip it when in !SMP.

The related git commit:

"feab139 ext4: rearrange initialization to fix EXT4FS_DEBUG".

The related error (with allmodconfig under score):

Quoted 7 lines
    CC [M]  fs/ext4/super.o
  fs/ext4/super.c: In function 'ext4_commit_super':
  fs/ext4/super.c:4546:41: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeclusters_counter.counters)
                                           ^
  fs/ext4/super.c:4550:39: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeinodes_counter.counters)

Thanks for the pointing out the problem. I though think the right way of fixing this problem, though, instead of using the #ifdef CONFIG_SMP, is to do this:

       if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeclusters_counter))
       	  ...

I'll respin the "ext4: rearrange initialization to fix EXT4FS_DEBUG" commit to include this fix and give you credit in the commit logs for pointing out this issue.

Cheers,

- Ted

author
#2 lore raw
Quoted 18 lines · Theodore Ts'o
Quoted 9 lines · Chen Gang

When SMP is disabled, 'struct percpu_counter' has no 'counters' member, so need skip it when in !SMP.

The related git commit:

"feab139 ext4: rearrange initialization to fix EXT4FS_DEBUG".

The related error (with allmodconfig under score):

Quoted 7 lines
    CC [M]  fs/ext4/super.o
  fs/ext4/super.c: In function 'ext4_commit_super':
  fs/ext4/super.c:4546:41: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeclusters_counter.counters)
                                           ^
  fs/ext4/super.c:4550:39: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeinodes_counter.counters)
Quoted 7 lines

Thanks for the pointing out the problem. I though think the right way of fixing this problem, though, instead of using the #ifdef CONFIG_SMP, is to do this:

       if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeclusters_counter))
       	  ...

That sounds fine to me (unlike my ugly fix, your fix is common and standard), thanks.

Quoted 4 lines

I'll respin the "ext4: rearrange initialization to fix EXT4FS_DEBUG" commit to include this fix and give you credit in the commit logs for pointing out this issue.

Thank you for your work.

Thanks.

Signature · 3 lines
Chen Gang

Open, share, and attitude like air, water, and life which God blessed
#3 lore raw
In reply to Theodore Ts'o

Hi Ted,

Quoted 22 lines · Theodore Ts'o
Quoted 9 lines · Chen Gang

When SMP is disabled, 'struct percpu_counter' has no 'counters' member, so need skip it when in !SMP.

The related git commit:

"feab139 ext4: rearrange initialization to fix EXT4FS_DEBUG".

The related error (with allmodconfig under score):

Quoted 7 lines
    CC [M]  fs/ext4/super.o
  fs/ext4/super.c: In function 'ext4_commit_super':
  fs/ext4/super.c:4546:41: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeclusters_counter.counters)
                                           ^
  fs/ext4/super.c:4550:39: error: 'struct percpu_counter' has no member named 'counters'
    if (EXT4_SB(sb)->s_freeinodes_counter.counters)

Thanks for the pointing out the problem. I though think the right way of fixing this problem, though, instead of using the #ifdef CONFIG_SMP, is to do this:

Quoted 6 lines
       if (percpu_counter_initialized(&EXT4_SB(sb)->s_freeclusters_counter))
          ...

I'll respin the "ext4: rearrange initialization to fix EXT4FS_DEBUG" commit to include this fix and give you credit in the commit logs for pointing out this issue.

Friendly ping, since all !SMP builds in -next seem to be broken by this still.

-Olof

maintainer
#4 lore raw
Quoted 5 lines · Olof Johansson
Quoted 3 lines

I'll respin the "ext4: rearrange initialization to fix EXT4FS_DEBUG" commit to include this fix and give you credit in the commit logs for pointing out this issue.

Friendly ping, since all !SMP builds in -next seem to be broken by this still.

Right, sorry, I'm currently in vacation in Rome, and the network connection was really lousy here now that I'm no longer at the ACACES summer school in Fiuggi. (Also, now that I'm no longer actually teaching, I've beeen trying to actually do the disconnecting and sightseeing thing. :-)

Pushed now.

- Ted

#5 lore raw
Quoted 6 lines · Theodore Ts'o

Right, sorry, I'm currently in vacation in Rome, and the network connection was really lousy here now that I'm no longer at the ACACES summer school in Fiuggi. (Also, now that I'm no longer actually teaching, I've beeen trying to actually do the disconnecting and sightseeing thing. :-)

Confirmed this is now fixed in linux-next, thanks Ted!