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