- if (atomic_inc_return(&t->ldt_device_nr) == 1 &&
- t->ldt_ops->ldto_start != NULL)
- t->ldt_ops->ldto_start(t);
+ if (atomic_add_unless(&t->ldt_device_nr, 1, 0) == 0) {
+ down_write(&lu_key_initing);
+ if (t->ldt_ops->ldto_start &&
+ atomic_read(&t->ldt_device_nr) == 0)
+ t->ldt_ops->ldto_start(t);
+ atomic_inc(&t->ldt_device_nr);
+ up_write(&lu_key_initing);
+ }