On 2026/3/5 16:49, Shinichiro Kawasaki wrote:
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.

Shinichiro,

Nice catch on the bug and thanks a lot for the fix and test!

I've tested the updated patch w/ xfstests locally, seems no regression, let me 
send
the new version for review.


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.

I'm good to send the patch, let me know if you have any other concern. :)

Thanks,



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