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);
|
||||
if (!wq)
|
||||
return -ENOMEM;
|
||||
|
||||
old = NULL;
|
||||
/*
|
||||
* 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... */
|
||||
if (old)
|
||||
destroy_workqueue(wq);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sb_init_dio_done_wq);
|
||||
|
|
|
|||
Loading…
Reference in New Issue