mirror of https://github.com/torvalds/linux.git
fs: Use try_cmpxchg() in sb_init_done_wq()
Use !try_cmpxchg() instead of cmpxchg(*ptr, old, new) != old. The x86 CMPXCHG instruction returns success in the ZF flag, so this change saves a compare after CMPXCHG. No functional change intended. Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Link: https://lore.kernel.org/20250811132326.620521-1-ubizjak@gmail.com Reviewed-by: Jan Kara <jack@suse.cz> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Christian Brauner <brauner@kernel.org> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
14498ca7e0
commit
ec6f613ef3
|
|
@ -2318,13 +2318,15 @@ int sb_init_dio_done_wq(struct super_block *sb)
|
||||||
sb->s_id);
|
sb->s_id);
|
||||||
if (!wq)
|
if (!wq)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
old = NULL;
|
||||||
/*
|
/*
|
||||||
* This has to be atomic as more DIOs can race to create the workqueue
|
* This has to be atomic as more DIOs can race to create the workqueue
|
||||||
*/
|
*/
|
||||||
old = cmpxchg(&sb->s_dio_done_wq, NULL, wq);
|
if (!try_cmpxchg(&sb->s_dio_done_wq, &old, wq)) {
|
||||||
/* Someone created workqueue before us? Free ours... */
|
/* Someone created workqueue before us? Free ours... */
|
||||||
if (old)
|
|
||||||
destroy_workqueue(wq);
|
destroy_workqueue(wq);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sb_init_dio_done_wq);
|
EXPORT_SYMBOL_GPL(sb_init_dio_done_wq);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue