On Mon 11-08-25 15:23:03, Uros Bizjak wrote: > 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@xxxxxxxxx> > Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> > Cc: Christian Brauner <brauner@xxxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/super.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/fs/super.c b/fs/super.c > index 7f876f32343a..e91718017701 100644 > --- a/fs/super.c > +++ b/fs/super.c > @@ -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); > - /* Someone created workqueue before us? Free ours... */ > - if (old) > + if (!try_cmpxchg(&sb->s_dio_done_wq, &old, wq)) { > + /* Someone created workqueue before us? Free ours... */ > destroy_workqueue(wq); > + } > return 0; > } > EXPORT_SYMBOL_GPL(sb_init_dio_done_wq); > -- > 2.50.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR