- LASSERT(rkey);
- capa_keys[0] = *rkey;
- if (bkey)
- capa_keys[1] = *bkey;
- spin_unlock(&filter->fo_capa_lock);
-
- tcapa = *capa;
- tcapa.lc_keyid = capa_keys[0].k_key.lk_keyid;
- capa_hmac(filter->fo_capa_hmac, capa_keys[0].k_key.lk_key, &tcapa);
-
- /* store in capa cache */
- ocapa = capa_renew(&tcapa, FILTER_CAPA);
- if (!ocapa)
- GOTO(out, rc = -ENOMEM);
-
- if (bkey) {
- tcapa.lc_keyid = capa_keys[1].k_key.lk_keyid;
- capa_hmac(filter->fo_capa_hmac, capa_keys[1].k_key.lk_key,
- &tcapa);
-
- spin_lock(&filter->fo_capa_lock);
- memcpy(ocapa->c_bhmac, tcapa.lc_hmac, sizeof(ocapa->c_bhmac));
- ocapa->c_bkeyid = capa_keys[1].k_key.lk_keyid;
- ocapa->c_bvalid = 1;
- spin_unlock(&filter->fo_capa_lock);
+ spin_lock(&capa_lock);
+ list_for_each_entry_safe(key, n, &filter->fo_capa_keys, k_list) {
+ list_del_init(&key->k_list);
+ OBD_FREE(key, sizeof(*key));