- inst = tmpl->alloc(¶m->alg, sizeof(param->alg));
- if (IS_ERR(inst))
- goto err;
- else if ((err = crypto_register_instance(tmpl, inst))) {
- tmpl->free(inst);
- goto err;
- }
+ do {
+ inst = tmpl->alloc(¶m->alg, sizeof(param->alg));
+ if (IS_ERR(inst))
+ err = PTR_ERR(inst);
+ else if ((err = crypto_register_instance(tmpl, inst)))
+ tmpl->free(inst);
+ } while (err == -EAGAIN && !signal_pending(current));