On Mar 05, 2026 / 10:03, Chao Yu wrote:
[...]
> Updated link as below which includes compile error fix.
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git/commit/?h=bugfix/syzbot&id=ef20840493da6cb26bb910a73c46413a17ea58e7
>

I applied the patch above and ran my test workload, then I observed the
BUG below.

Mar 05 14:27:51 redsun40 kernel: BUG: key ff1100011a6b5ea0 has not been 
registered!
Mar 05 14:27:51 redsun40 kernel: ------------[ cut here ]------------
Mar 05 14:27:51 redsun40 kernel: DEBUG_LOCKS_WARN_ON(1)
Mar 05 14:27:51 redsun40 kernel: WARNING: kernel/locking/lockdep.c:4976 at 
lockdep_init_map_type+0x122/0x220, CPU#11: mount/1829

 4969         /*                                                                
      |
 4970          * Sanity check, the lock-class key must either have been 
allocated     |
 4971          * statically or must have been registered as a dynamic key.      
      |
 4972          */                                                               
      |
 4973         if (!static_obj(key) && !is_dynamic_key(key)) {                   
      |
 4974                 if (debug_locks)                                          
      |
 4975                         printk(KERN_ERR "BUG: key %px has not been 
registered!\n", key);
 4976                 DEBUG_LOCKS_WARN_ON(1);                                   
      |
 4977                 return;                                                   
      |
 4978         }                                                                 
      |

>From the comment, I learned that cp_global_sem_key should be registered. I made
the additional patch below. With this, I observed no lockdep splat, no WARN :)
Great.

Chao, thank you again for the solution idea. I would like to ask you to take the
next step to upstream the fix. If it helps, I can post the patch on behalf of
you, but your action might be faster.


diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 23ef8816c04..1d97dded4ee 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -4949,6 +4949,7 @@ static int f2fs_fill_super(struct super_block *sb, struct 
fs_context *fc)
        mutex_init(&sbi->writepages);
        init_f2fs_rwsem_trace(&sbi->cp_global_sem, sbi, LOCK_NAME_CP_GLOBAL);
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
+       lockdep_register_key(&sbi->cp_global_sem_key);
        lockdep_set_class(&sbi->cp_global_sem.internal_rwsem,
                                        &sbi->cp_global_sem_key);
 #endif
@@ -5423,6 +5424,9 @@ static int f2fs_fill_super(struct super_block *sb, struct 
fs_context *fc)
 free_sb_buf:
        kfree(raw_super);
 free_sbi:
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+       lockdep_unregister_key(&sbi->cp_global_sem_key);
+#endif
        kfree(sbi);
        sb->s_fs_info = NULL;
 
@@ -5504,6 +5508,9 @@ static void kill_f2fs_super(struct super_block *sb)
        /* Release block devices last, after fscrypt_destroy_keyring(). */
        if (sbi) {
                destroy_device_list(sbi);
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+               lockdep_unregister_key(&sbi->cp_global_sem_key);
+#endif
                kfree(sbi);
                sb->s_fs_info = NULL;
        }


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to